From f1a7b1f7e921825794ab2d3b4ac04c5d0b7c7831 Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Tue, 2 Jan 2024 16:36:52 +0800 Subject: [PATCH] remove unused code --- docs/api.md | 240 ++++++++++++++++++++ package.json | 2 +- src/api.server.ts | 3 +- src/controllers/activity.controller.ts | 1 + src/controllers/tasks.controller.ts | 2 +- src/queue/chain.queue.ts | 70 ------ src/utils/contract.util.ts | 221 ------------------ src/utils/nft.util.ts | 18 +- start_test.json | 4 +- yarn.lock | 298 +++++++++++++++++++------ 10 files changed, 480 insertions(+), 379 deletions(-) create mode 100644 docs/api.md delete mode 100644 src/queue/chain.queue.ts delete mode 100644 src/utils/contract.util.ts diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..31c6ca1 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,240 @@ +# Task相关接口 + +### 说明 + +1. 通用返回格式, errcode=0 表示无错误 + +2. 如无特别说明, 以下接口的 Response 格式指的是 data 字段 +3. 接口名中带\*的表示, 需要验证 token, token 可以设置 header 的 Authorization: Bearer JWT_token, 或 Post body 的 token 字段, 或 Get 的 query token + +```json +{ + "errcode": Number, + "errmsg": String, + "data": {} +} +``` + +### 1. 钱包预登录 + +#### Request + +- URL:`/api/wallet/nonce?address=` +- 方法:`GET` + +query param + +| Name | Type | Desc | +| ------- | ------ | -------- | +| address | string | 钱包地址 | + + + +#### Response + +```json +{ + "nonce": String, + "tips": String +} +``` + +### 2. 钱包登录 + +客户端在获得钱包地址后,须先调用预登录方法获取 nonce 和 tips, 然后调用钱包进行 EIP-721 签名. + +登录成功后返回的 jwt 需要保存至本地存储, 再次载入后, 可解析并获取 exp 字段, 判断当前 token 是否已经过期 + +#### Request + +- URL:`/api/wallet/login` +- 方法:`POST` +- 头部: + - Content-type: application/json +- Body: + +```json +{ + "activity": String, + "signature": String, + "message": SiweMessage +} +``` + +SiweMessage说明: https://docs.login.xyz/sign-in-with-ethereum/quickstart-guide/creating-siwe-messages + + + +#### Response + +```json +{ + "token": String, +} +``` + +### 3. 活动信息 + +#### Request + +- URL:`/api/activity/:id` +- 方法:`GET` +- 参数: + - `id`(当前活动的ID) + +#### Response + +```js + { + "_id": "TwitterConnect", // 任务id + "name": "活动名称", + "description": "活动描述", + "tasks": [ // 该活动需要完成的任务 + { + "id": "任务id", + "title": "任务名", + "desc": "任务描述" + } + ], + "startTime": 1702628292366, // 活动开始时间 + "endTime": 1705220292366 // 活动结束时间 + } +``` + + +### 4. *用户任务进度 + +#### Request + +- URL:`/api/tasks/progress` +- 方法:`POST` +- 头部: + - Authorization: Bearer JWT_token +- Body: {} + + +#### Response + +```js +[ + { + "status": 2, // 任务状态, 0: 未开始, 1: 进行中, 2: 成功, 9: 失败 + "id": "TwitterConnect", // 任务id + "timeStart": 1703150269527, // 任务开始时间 + "data": { // 当前任务带的额外信息, 比如twitter的id和昵称等 + "username": "zhl01", + "userid": "564269223" + }, + "timeFinish": 1703150280059 // 任务结束时间 + } + ] +``` + +### 5.\* 开始某个任务 + +#### Request + +- URL:`/api/tasks/begin_task` +- 方法:`POST` +- 头部: + - Authorization: Bearer JWT_token + + +body: + +```js +{ + "task": "TwitterFollow" // 任务id +} + +``` + +#### Response + +```json +{ + "status": 1, // 任务状态, 0: 未开始, 1: 进行中, 2: 成功, 9: 失败 + "id": "TwitterFollow", // 任务id + "timeStart": 1703150294051 // 任务开始时间 + } +``` + +### 6.\* 检查任务状态 + +#### Request + +- URL:`/api/tasks/check_task` +- 方法:`GET` +- 头部: + - Authorization: Bearer JWT_token + +body: + +```js +{ + "task": "TwitterFollow" // 任务id +} + +``` + +#### Response + +```json +{ + "status": 1, // 任务状态, 0: 未开始, 1: 进行中, 2: 成功, 9: 失败 + "id": "TwitterFollow", // 任务id + "timeStart": 1703150294051, // 任务开始时间 + "timeFinish": 1703151338598 + } +``` + +### 6.\* 提交邀请码 + +#### Request + +- URL:`/api/activity/upload_invite_code` +- 方法:`GET` +- 头部: + - Authorization: Bearer JWT_token + +body: + +```js +{ + "code": "邀请人的邀请码" +} + +``` + +#### Response + +> 只要不返回errcode, 即表示上传成功 +```json +{} +``` + +### 7. 积分排行榜 + +#### Request + +- URL:`/api/activity/leaderboard/:activity/:page` +- 方法:`GET` +- 头部: + - Authorization: Bearer JWT_token +- 参数: + - `activity`(当前活动的ID) + - `page` (返回数据的分页序号, 0 开始) + +> 默认返回50条记录, 如果要返回不同数量, query param传 limit + +#### Response + +```json +[ + { + "rank": 1, // 排名 + "address": "钱包地址", + "score": 获得的积分 + } +] +``` \ No newline at end of file diff --git a/package.json b/package.json index 9c6490b..db27ec7 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "deepmerge": "^4.2.2", "dotenv": "^16.0.3", "ethereumjs-util": "^7.1.5", - "ethers": "^6.9.0", + "ethers": "^5.6.8", "fast-rbac": "^1.3.0", "fastify": "^4.15.0", "fastify-file-upload": "^3.0.0", diff --git a/src/api.server.ts b/src/api.server.ts index ae32b3b..8d629ee 100644 --- a/src/api.server.ts +++ b/src/api.server.ts @@ -7,7 +7,6 @@ import { IncomingMessage, Server, ServerResponse } from 'http' import { RouterMap } from 'decorators/router' import { mongoose } from '@typegoose/typegoose' import logger from 'logger/logger' -import path from 'path' import { RedisClient } from 'redis/RedisClient' import NonceRecordSchedule from 'schedule/noncerecord.schedule' @@ -159,7 +158,7 @@ export class ApiServer { self.setErrHandler() self.setFormatSend() self.initSchedules() - this.server.listen({ port: parseInt(process.env.API_PORT) }, (err: any, address: any) => { + this.server.listen({ port: parseInt(process.env.API_PORT), host: process.env.API_HOST }, (err: any, address: any) => { if (err) { logger.log(err) process.exit(0) diff --git a/src/controllers/activity.controller.ts b/src/controllers/activity.controller.ts index c43139d..d6cc562 100644 --- a/src/controllers/activity.controller.ts +++ b/src/controllers/activity.controller.ts @@ -51,6 +51,7 @@ export default class ActivityController extends BaseController { return {} } + @role(ROLE_ANON) @router('get /api/activity/leaderboard/:activity/:page') async inviteCode(req) { let user = req.user; diff --git a/src/controllers/tasks.controller.ts b/src/controllers/tasks.controller.ts index 1394522..c5089b9 100644 --- a/src/controllers/tasks.controller.ts +++ b/src/controllers/tasks.controller.ts @@ -83,7 +83,7 @@ const parseNextTask = async ( } export default class TasksController extends BaseController { - @router('get /api/tasks/progress') + @router('post /api/tasks/progress') async taskProgress(req) { let user = req.user; let activity = req.activity; diff --git a/src/queue/chain.queue.ts b/src/queue/chain.queue.ts deleted file mode 100644 index a5eb87f..0000000 --- a/src/queue/chain.queue.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { AsyncQueue, createAsyncQueue } from 'common/AsyncQueue' -import { singleton } from 'decorators/singleton' -import { DocumentType } from '@typegoose/typegoose' -import logger from 'logger/logger' -import { ClaimTaskClass } from 'models/ClaimTask' -import { addTask, getMintableCount } from 'service/ChainSvr' - -const MAX_BATCH_COUNT = 20 - -/** - * let data = { - taskId: '1', - type: 2, - data: [ - { - address: '0xd45A464a2412A2f83498d13635698a041b9dBe9b', - to: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', - count: 10 - }, - ], - } - */ - -@singleton -export class ChainQueue { - private queue: AsyncQueue - - constructor() { - this.queue = createAsyncQueue() - } - - public addTask(task: DocumentType) { - this.queue.push(async () => { - try { - if (task.totalCount === 0) { - task.status = 10 - await task.save() - return - } - - // datas: [{address: distributor's address, to: userAddress, count: number}] - const address = task.dAddress - const to = task.address - const batchs = Math.ceil(task.totalCount / MAX_BATCH_COUNT) - let datas: any = [] - for (let i = 0; i < batchs; i++) { - datas.push({ - address, - to, - type: 5, - count: Math.min(MAX_BATCH_COUNT, task.totalCount - i * MAX_BATCH_COUNT), - }) - } - - let reqData = { - taskId: task.id, - source: 'claim', - data: datas, - } - - await addTask(reqData) - task.status = 1 - await task.save() - } catch (err) { - logger.error('error add chain task: ') - logger.error(err) - } - }) - } -} diff --git a/src/utils/contract.util.ts b/src/utils/contract.util.ts deleted file mode 100644 index 0c08cc5..0000000 --- a/src/utils/contract.util.ts +++ /dev/null @@ -1,221 +0,0 @@ -import logger from 'logger/logger' -import { toBN } from './number.util' -import { BN } from 'ethereumjs-util' -import { RedisClient } from 'redis/RedisClient' - -const ONE = toBN(1) -const TWO = toBN(2) -const queryRange = toBN(1000) -// 返回数据如果达到这个数值, 需要拆分块的区间, 重新获取 -const RESULT_LIMIT_COUNT = 99 -// 单个块event数量超过该值, 需要独立请求 -const SPLIT_LIMIT_COUNT = 40 - -const blockTimeMap: Map = new Map() - -async function divQueryPassEvents({ - contract, - event, - fromBlock, - toBlock, - options, -}: { - contract: any - event: string - fromBlock: BN - toBlock: BN - options?: any -}) { - const middle = fromBlock.add(toBlock).divRound(TWO) - const middlePlusOne = middle.add(ONE) - - const firstHalfEvents = await getPastEvents({ - contract, - event, - fromBlock, - toBlock: middle, - options, - }) - const secondHalfEvents = await getPastEvents({ - contract, - event, - fromBlock: middlePlusOne, - toBlock, - options, - }) - return [...firstHalfEvents, ...secondHalfEvents] -} -/** - * 某些链最多返回99条数据, 针对这种情况, 如下方式处理 - * 1. 分析现有事件, 对于同一block返回数量超过设定值的, 单独拿出来 - * 2. 比如 fromBlock: 0, toBlock: 100, 51和54号块事件数量超标 - * 3. 那么 分别查询 0-50, 51-51, 52-53, 54-54, 54-100 - * @param param0 - * @returns - */ -async function splitQueryEvents({ - contract, - event, - fromBlock, - toBlock, - options, - events, -}: { - contract: any - event: string - fromBlock: BN - toBlock: BN - options?: any - events: any[] -}) { - let countMap: Map = new Map() - for (let event of events) { - countMap.inc(event.blockNumber, 1) - } - let blockArr: number[] = [] - for (let [key, val] of countMap.entries()) { - if (val >= SPLIT_LIMIT_COUNT) { - blockArr.push(parseInt(key)) - } - } - blockArr.sort((a, b) => a - b) - let results: any[] = [] - let preBlock = fromBlock - for (let i = 0; i < blockArr.length; i++) { - const block = toBN(blockArr[i]) - let subFromBlock = preBlock - let subToBlock = block - if (!preBlock.eq(block)) { - const partEvents0 = await getPastEvents({ - contract, - event, - fromBlock: subFromBlock, - toBlock: subToBlock.sub(ONE), - options, - }) - results = results.concat(partEvents0) - } - - let partEvents1 = await getPastEvents({ - contract, - event, - fromBlock: subToBlock, - toBlock: subToBlock, - options, - }) - results = results.concat(partEvents1) - - if (i === blockArr.length - 1) { - if (!subToBlock.eq(toBlock)) { - let partEvents2 = await getPastEvents({ - contract, - event, - fromBlock: subToBlock.add(ONE), - toBlock: toBlock, - options, - }) - results = results.concat(partEvents2) - } - } - preBlock = block.add(ONE) - } - return results -} - -export async function getPastEvents({ - contract, - event, - fromBlock, - toBlock, - options, -}: { - contract: any - event: string - fromBlock: BN - toBlock: BN - options?: any -}) { - logger.debug(`${contract.options.address}: ${event} from: ${fromBlock} to: ${toBlock}`) - let events - try { - events = await contract.getPastEvents(event, { - ...options, - fromBlock, - toBlock, - }) - if (events.length >= RESULT_LIMIT_COUNT) { - events = splitQueryEvents({ - contract, - event, - fromBlock, - toBlock, - options, - events, - }) - } - } catch (e) { - if (e.message && /query returned more than \d+ results/.test(e.message)) { - events = divQueryPassEvents({ - contract, - event, - fromBlock, - toBlock, - options, - }) - } else { - throw new Error(e) - } - } - return events -} - -export function* getPastEventsIter({ - contract, - event, - fromBlock, - toBlock, - options, -}: { - contract: any - event: string - fromBlock: number - toBlock: number - options?: any -}) { - const address = contract.options.address - const redisKey = `${address.toLowerCase()}_${event}` - logger.debug(`*getPastEventsIter: ${event} from: ${fromBlock} to: ${toBlock}`) - let from = toBN(fromBlock) - let to = toBN(fromBlock).add(queryRange) - const toBlockBN = toBN(toBlock) - while (to.lt(toBlockBN)) { - yield getPastEvents({ contract, event, fromBlock: from, toBlock: to, options }) - from = to.add(ONE) - to = to.add(queryRange) - yield new RedisClient().set(redisKey, from + '') - } - yield getPastEvents({ contract, event, fromBlock: from, toBlock: toBlockBN, options }) - yield new RedisClient().set(redisKey, toBlockBN.add(ONE) + '') -} - -export async function processEvents(web3, iterator, processedEvent) { - for (const getPastEventPromise of iterator) { - const events = await getPastEventPromise - for (const event of events) { - if (event?.blockNumber) { - if (blockTimeMap.has(event.blockNumber)) { - event.timestamp = blockTimeMap.get(event.blockNumber) - } else { - const blockData = await web3.eth.getBlock(event.blockNumber) - event.timestamp = blockData.timestamp - blockTimeMap.set(event.blockNumber, blockData.timestamp) - } - } - await processedEvent(event) - } - } -} - -export function clearTimeCache() { - blockTimeMap.clear() -} diff --git a/src/utils/nft.util.ts b/src/utils/nft.util.ts index 749646e..c6a2cae 100644 --- a/src/utils/nft.util.ts +++ b/src/utils/nft.util.ts @@ -1,4 +1,4 @@ -import { IDCounter } from 'models/IDCounter' + export const ONE_DAY = 24 * 60 * 60 * 1000 export const NFT_BEGIN_DAY = new Date(2023, 4, 8) @@ -22,18 +22,4 @@ export function daysBetween(date1: Date, date2: Date) { return diffInDays } -/** - * 生成nft的tokenid - * 规则: - * 100 9999 00 0000001 - * NFT类型 当前日期至开始日期的天数 渠道编号 当前类型的序号 - */ -export async function generateNftID(nfttype: number, channel: number) { - const days = daysBetween(new Date(), NFT_BEGIN_DAY) - const dayKey = (days + '').padStart(4, '0') - const channelKey = (channel + '').padStart(2, '0') - const idkey = nfttype + dayKey + channelKey - const idobj = await IDCounter.nextID(idkey) - const val = (idobj.seq + '').padStart(7, '0') - return idkey + val -} + diff --git a/start_test.json b/start_test.json index bd592cf..e3dd7e1 100644 --- a/start_test.json +++ b/start_test.json @@ -3,8 +3,8 @@ { "name": "web-task-svr", "script": "npm", - "args": "run dev:api", - "cwd": "/home/kingsome/code/web_task_svr", + "args": "run prod:api", + "cwd": "/root/code/task-svr", "max_memory_restart": "1024M", "log_date_format": "YYYY-MM-DD HH:mm Z", "watch": false, diff --git a/yarn.lock b/yarn.lock index 60efbbc..4ec6d36 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== - "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" @@ -81,9 +76,9 @@ "@ethereumjs/common" "^2.5.0" ethereumjs-util "^7.1.2" -"@ethersproject/abi@^5.6.3": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== dependencies: "@ethersproject/address" "^5.7.0" @@ -96,7 +91,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -109,7 +104,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -120,7 +115,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -131,14 +126,22 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@^5.7.0": +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/bignumber@^5.7.0": +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -147,21 +150,37 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/hash@^5.7.0": +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -176,7 +195,44 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/keccak256@^5.7.0": +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -184,26 +240,68 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@^5.7.0": +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/properties@^5.7.0": +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@^5.7.0": +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -211,7 +309,16 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/signing-key@^5.7.0": +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -223,7 +330,19 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/strings@^5.7.0": +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -232,7 +351,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -247,7 +366,37 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/web@^5.7.0": +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -258,6 +407,17 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@fastify/ajv-compiler@^3.5.0": version "3.5.0" resolved "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz" @@ -367,18 +527,6 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - "@noble/hashes@^1.1.2": version "1.3.3" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" @@ -570,11 +718,6 @@ resolved "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz" integrity sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg== -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - "@types/node@^12.12.6": version "12.20.55" resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" @@ -746,10 +889,10 @@ acorn@^8.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== ajv-formats@^2.1.1: version "2.1.1" @@ -944,6 +1087,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + bignumber.js@^9.0.0: version "9.1.1" resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" @@ -1869,18 +2017,41 @@ ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereum ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@^6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.9.0.tgz#a4534bdcdfde306aee94ef32f3d5c70d7e33fcb9" - integrity sha512-pmfNyQzc2mseLe91FnT2vmNaTt8dDzhxZ/xItAV7uGsF4dI4ek2ufMu3rAkgQETL/TIs0GS5A+U05g9QyWnv3Q== +ethers@^5.6.8: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.5.0" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" ethjs-unit@0.1.6: version "0.1.6" @@ -3807,7 +3978,7 @@ saslprep@^1.0.0: dependencies: sparse-bitfield "^3.0.3" -scrypt-js@^3.0.0, scrypt-js@^3.0.1: +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== @@ -4312,11 +4483,6 @@ tsconfig@^7.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" @@ -4811,10 +4977,10 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^3.0.0: version "3.3.3"