将脚本移至scripts
This commit is contained in:
parent
1904ebcd3f
commit
23e793df4c
44
package.json
44
package.json
@ -7,31 +7,29 @@
|
|||||||
"build": "tsc -p tsconfig.json",
|
"build": "tsc -p tsconfig.json",
|
||||||
"dev:api": "ts-node -r tsconfig-paths/register src/api.ts",
|
"dev:api": "ts-node -r tsconfig-paths/register src/api.ts",
|
||||||
"prod:api": "NODE_PATH=./dist node dist/api.js",
|
"prod:api": "NODE_PATH=./dist node dist/api.js",
|
||||||
"dev:admin": "ts-node -r tsconfig-paths/register src/admin.ts",
|
|
||||||
"prod:admin": "node dist/admin.js",
|
|
||||||
"lint": "eslint --ext .ts src/**",
|
"lint": "eslint --ext .ts src/**",
|
||||||
"format": "eslint --ext .ts src/** --fix",
|
"format": "eslint --ext .ts src/** --fix",
|
||||||
"initdata": "ts-node src/initdata.ts",
|
"initdata": "ts-node src/scripts/initdata.ts",
|
||||||
"repairdata": "ts-node -r tsconfig-paths/register src/repairdata.ts",
|
"repairdata": "ts-node -r tsconfig-paths/register src/scripts/repairdata.ts",
|
||||||
"repairdata2": "ts-node -r tsconfig-paths/register src/repairdata2.ts",
|
"repairdata2": "ts-node -r tsconfig-paths/register src/scripts/repairdata2.ts",
|
||||||
"repairredis": "ts-node -r tsconfig-paths/register src/repairredis.ts",
|
"repairredis": "ts-node -r tsconfig-paths/register src/scripts/repairredis.ts",
|
||||||
"checkredis": "ts-node -r tsconfig-paths/register src/checkredis.ts",
|
"checkredis": "ts-node -r tsconfig-paths/register src/scripts/checkredis.ts",
|
||||||
"additem": "ts-node -r tsconfig-paths/register src/addboxdata.ts",
|
"additem": "ts-node -r tsconfig-paths/register src/scripts/addboxdata.ts",
|
||||||
"fixdata": "ts-node -r tsconfig-paths/register src/fixdata.ts",
|
"fixdata": "ts-node -r tsconfig-paths/register src/scripts/fixdata.ts",
|
||||||
"nochain": "ts-node -r tsconfig-paths/register src/removeNoChain.ts",
|
"nochain": "ts-node -r tsconfig-paths/register src/scripts/removeNoChain.ts",
|
||||||
"out": "ts-node -r tsconfig-paths/register src/queryScoreList.ts",
|
"out": "ts-node -r tsconfig-paths/register src/scripts/queryScoreList.ts",
|
||||||
"sybil": "ts-node -r tsconfig-paths/register src/removeSybil.ts",
|
"sybil": "ts-node -r tsconfig-paths/register src/scripts/removeSybil.ts",
|
||||||
"releation": "ts-node -r tsconfig-paths/register src/updateReleation.ts",
|
"releation": "ts-node -r tsconfig-paths/register src/scripts/updateReleation.ts",
|
||||||
"rankquery": "ts-node -r tsconfig-paths/register src/rankquery2.ts",
|
"rankquery": "ts-node -r tsconfig-paths/register src/scripts/rankquery2.ts",
|
||||||
"mail": "ts-node -r tsconfig-paths/register src/batch_mail.ts",
|
"mail": "ts-node -r tsconfig-paths/register src/scripts/batch_mail.ts",
|
||||||
"eth": "ts-node -r tsconfig-paths/register src/queryEthTx.ts -s 0 -l 10000 -k TC7Y76AS4AMQ468XXNKKF2R3TI7V844HUC",
|
"eth": "ts-node -r tsconfig-paths/register src/scripts/queryEthTx.ts -s 0 -l 10000 -k TC7Y76AS4AMQ468XXNKKF2R3TI7V844HUC",
|
||||||
"taskid": "ts-node -r tsconfig-paths/register src/generateTaskId.ts",
|
"taskid": "ts-node -r tsconfig-paths/register src/scripts/generateTaskId.ts",
|
||||||
"token": "ts-node -r tsconfig-paths/register src/generateToken.ts",
|
"token": "ts-node -r tsconfig-paths/register src/scripts/generateToken.ts",
|
||||||
"ingame": "ts-node -r tsconfig-paths/register src/fixIngame.ts",
|
"ingame": "ts-node -r tsconfig-paths/register src/scripts/fixIngame.ts",
|
||||||
"reward": "ts-node -r tsconfig-paths/register src/rewardSchedule.ts",
|
"reward": "ts-node -r tsconfig-paths/register src/scripts/rewardSchedule.ts",
|
||||||
"testdraw": "ts-node -r tsconfig-paths/register src/testdraw.ts",
|
"testdraw": "ts-node -r tsconfig-paths/register src/scripts/testdraw.ts",
|
||||||
"importcec": "ts-node -r tsconfig-paths/register src/importCEC.ts",
|
"importcec": "ts-node -r tsconfig-paths/register src/scripts/importCEC.ts",
|
||||||
"parsecec": "ts-node -r tsconfig-paths/register src/cecStatic.ts",
|
"parsecec": "ts-node -r tsconfig-paths/register src/scripts/cecStatic.ts",
|
||||||
"test:watch": "jest --watch",
|
"test:watch": "jest --watch",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
|
@ -36,16 +36,16 @@ const removeSmallNum = (val: any) => {
|
|||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
var b = ethers.utils.formatEther(val)
|
var b = ethers.utils.formatEther(val)
|
||||||
b = b.substring(0, b.indexOf('.')+3)
|
b = b.substring(0, b.indexOf('.') + 3)
|
||||||
var b1 = parseFloat(b)
|
var b1 = parseFloat(b)
|
||||||
return BigInt(ethers.utils.parseEther(b1+'').toString())
|
return BigInt(ethers.utils.parseEther(b1 + '').toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询cec claim状态
|
* 查询cec claim状态
|
||||||
* 第一期是比较特殊的记录, 在预售阶段, 需要展示第一期可领取的数量, 所以要特殊处理
|
* 第一期是比较特殊的记录, 在预售阶段, 需要展示第一期可领取的数量, 所以要特殊处理
|
||||||
* @param address 有资格的钱包地址
|
* @param address 有资格的钱包地址
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const queryCECClaimStatus = async (address: string) => {
|
const queryCECClaimStatus = async (address: string) => {
|
||||||
let total = 0n
|
let total = 0n
|
||||||
@ -58,7 +58,7 @@ const queryCECClaimStatus = async (address: string) => {
|
|||||||
}
|
}
|
||||||
const records = await CECRecordTotal.find({ address })
|
const records = await CECRecordTotal.find({ address })
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
await updateClaimStatus({ address: CEC_CLAIM_CONTRACT, account: address, token: CEC_ADDRESS, records})
|
await updateClaimStatus({ address: CEC_CLAIM_CONTRACT, account: address, token: CEC_ADDRESS, records })
|
||||||
const bindRecord = await BitgetBindInfo.findOne({ wallet: address })
|
const bindRecord = await BitgetBindInfo.findOne({ wallet: address })
|
||||||
let bit = 0n
|
let bit = 0n
|
||||||
for (const record of records) {
|
for (const record of records) {
|
||||||
@ -75,17 +75,17 @@ const queryCECClaimStatus = async (address: string) => {
|
|||||||
// 预充值, 且记录有效, 且没有跳过绑定检查
|
// 预充值, 且记录有效, 且没有跳过绑定检查
|
||||||
if (bindRecord && !bindRecord.invalid && !record.skipBind) {
|
if (bindRecord && !bindRecord.invalid && !record.skipBind) {
|
||||||
claimed += (currentTotal * BigInt(val.rate)) / 100n
|
claimed += (currentTotal * BigInt(val.rate)) / 100n
|
||||||
} else if (val.status === ClaimStatusEnum.NORMAL){
|
} else if (val.status === ClaimStatusEnum.NORMAL) {
|
||||||
available += (currentTotal * BigInt(val.rate)) / 100n
|
available += (currentTotal * BigInt(val.rate)) / 100n
|
||||||
bit = bit | 1n << BigInt(val.bit)
|
bit = bit | (1n << BigInt(val.bit))
|
||||||
} else if ( val.status === ClaimStatusEnum.CLAIMED) {
|
} else if (val.status === ClaimStatusEnum.CLAIMED) {
|
||||||
claimed += (currentTotal * BigInt(val.rate)) / 100n
|
claimed += (currentTotal * BigInt(val.rate)) / 100n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (stage <= CEC_CLAIM_STAGE && val.status === ClaimStatusEnum.NORMAL) {
|
} else if (stage <= CEC_CLAIM_STAGE && val.status === ClaimStatusEnum.NORMAL) {
|
||||||
available += (currentTotal * BigInt(val.rate)) / 100n
|
available += (currentTotal * BigInt(val.rate)) / 100n
|
||||||
bit = bit | 1n << BigInt(val.bit)
|
bit = bit | (1n << BigInt(val.bit))
|
||||||
} else if ( val.status === ClaimStatusEnum.CLAIMED) {
|
} else if (val.status === ClaimStatusEnum.CLAIMED) {
|
||||||
claimed += (currentTotal * BigInt(val.rate)) / 100n
|
claimed += (currentTotal * BigInt(val.rate)) / 100n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,31 +128,31 @@ class CECController extends BaseController {
|
|||||||
for (const record of records) {
|
for (const record of records) {
|
||||||
total += record.amount
|
total += record.amount
|
||||||
let firstRate = record.firstRate || 50
|
let firstRate = record.firstRate || 50
|
||||||
let firstAmount = record.amount * BigInt(firstRate) / 100n
|
let firstAmount = (record.amount * BigInt(firstRate)) / 100n
|
||||||
firstTotal += firstAmount
|
firstTotal += firstAmount
|
||||||
if (STAGE1_UNLOCK_TIME < now) {
|
if (STAGE1_UNLOCK_TIME < now) {
|
||||||
available += firstAmount
|
available += firstAmount
|
||||||
}
|
}
|
||||||
if (STAGE2_UNLOCK_TIME < now) {
|
if (STAGE2_UNLOCK_TIME < now) {
|
||||||
available += (record.amount - firstAmount)
|
available += record.amount - firstAmount
|
||||||
}
|
}
|
||||||
lists.push(record.toJson())
|
lists.push(record.toJson())
|
||||||
}
|
}
|
||||||
stages.push({
|
stages.push({
|
||||||
stage: 1,
|
stage: 1,
|
||||||
amount: firstTotal.toString(),
|
amount: firstTotal.toString(),
|
||||||
status: 0,
|
status: 0,
|
||||||
unlocked: STAGE1_UNLOCK_TIME < now,
|
unlocked: STAGE1_UNLOCK_TIME < now,
|
||||||
unlockTime: STAGE1_UNLOCK_TIME
|
unlockTime: STAGE1_UNLOCK_TIME,
|
||||||
})
|
})
|
||||||
stages.push({
|
stages.push({
|
||||||
stage: 2,
|
stage: 2,
|
||||||
amount: (total - firstTotal).toString(),
|
amount: (total - firstTotal).toString(),
|
||||||
status: 0,
|
status: 0,
|
||||||
unlocked: STAGE2_UNLOCK_TIME < now,
|
unlocked: STAGE2_UNLOCK_TIME < now,
|
||||||
unlockTime: STAGE2_UNLOCK_TIME
|
unlockTime: STAGE2_UNLOCK_TIME,
|
||||||
})
|
})
|
||||||
|
|
||||||
const historys = await CECClaimHistory.find({ address })
|
const historys = await CECClaimHistory.find({ address })
|
||||||
for (const history of historys) {
|
for (const history of historys) {
|
||||||
if (history.status === CECClaimStatus.FAILED) {
|
if (history.status === CECClaimStatus.FAILED) {
|
||||||
@ -160,7 +160,7 @@ class CECController extends BaseController {
|
|||||||
}
|
}
|
||||||
if (history.status === CECClaimStatus.CONFIRMED) {
|
if (history.status === CECClaimStatus.CONFIRMED) {
|
||||||
claimed += history.amount
|
claimed += history.amount
|
||||||
}
|
}
|
||||||
stages[history.stage - 1].status = history.status
|
stages[history.stage - 1].status = history.status
|
||||||
stages[history.stage - 1].claimTime = history.claimTime
|
stages[history.stage - 1].claimTime = history.claimTime
|
||||||
available -= history.amount
|
available -= history.amount
|
||||||
@ -170,7 +170,7 @@ class CECController extends BaseController {
|
|||||||
available: available.toString(),
|
available: available.toString(),
|
||||||
claimed: claimed.toString(),
|
claimed: claimed.toString(),
|
||||||
stages,
|
stages,
|
||||||
records: lists
|
records: lists,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ class CECController extends BaseController {
|
|||||||
unavailable: unavailable.toString(),
|
unavailable: unavailable.toString(),
|
||||||
// records: records.map(record => record.toJson()),
|
// records: records.map(record => record.toJson()),
|
||||||
bindUid: bindRecord ? hidePartString(bindRecord.biggetAcc) : '',
|
bindUid: bindRecord ? hidePartString(bindRecord.biggetAcc) : '',
|
||||||
bindAddress: bindRecord ? hidePartString(bindRecord.address) : ''
|
bindAddress: bindRecord ? hidePartString(bindRecord.address) : '',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ class CECController extends BaseController {
|
|||||||
if (CEC_CLAIM_STAGE === 0) {
|
if (CEC_CLAIM_STAGE === 0) {
|
||||||
throw new ZError(14, 'not begin')
|
throw new ZError(14, 'not begin')
|
||||||
}
|
}
|
||||||
let wallet: string; // 通过该地址查询可以claim的cec数量
|
let wallet: string // 通过该地址查询可以claim的cec数量
|
||||||
if (user.plat === PlatEnum.EXTERNAL_WALLET) {
|
if (user.plat === PlatEnum.EXTERNAL_WALLET) {
|
||||||
wallet = user.openId || user.openid
|
wallet = user.openId || user.openid
|
||||||
} else {
|
} else {
|
||||||
@ -210,7 +210,7 @@ class CECController extends BaseController {
|
|||||||
wallet = walletRecord.address
|
wallet = walletRecord.address
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wallet) {
|
if (!wallet) {
|
||||||
throw new ZError(11, 'wallet not found')
|
throw new ZError(11, 'wallet not found')
|
||||||
}
|
}
|
||||||
@ -221,16 +221,16 @@ class CECController extends BaseController {
|
|||||||
if (available === 0n) {
|
if (available === 0n) {
|
||||||
throw new ZError(16, 'no cec to claim')
|
throw new ZError(16, 'no cec to claim')
|
||||||
}
|
}
|
||||||
const nonce = now + '' +((Math.random() * 1000) | 0);
|
const nonce = now + '' + ((Math.random() * 1000) | 0)
|
||||||
let data = await buildTokenClaimData({
|
let data = await buildTokenClaimData({
|
||||||
address,
|
address,
|
||||||
account: wallet,
|
account: wallet,
|
||||||
token: CEC_ADDRESS,
|
token: CEC_ADDRESS,
|
||||||
amount: available.toString(),
|
amount: available.toString(),
|
||||||
bit: bit.toString(),
|
bit: bit.toString(),
|
||||||
nonce
|
nonce,
|
||||||
})
|
})
|
||||||
return { calls: [{trans_req: data, trans_id: ''}], direct: true }
|
return { calls: [{ trans_req: data, trans_id: '' }], direct: true }
|
||||||
}
|
}
|
||||||
|
|
||||||
// @role(ROLE_ANON)
|
// @role(ROLE_ANON)
|
||||||
@ -254,13 +254,13 @@ class CECController extends BaseController {
|
|||||||
bit: 9,
|
bit: 9,
|
||||||
claimStatus: {
|
claimStatus: {
|
||||||
'1': { bit: 16, rate: 15, status: 1, time: 0 },
|
'1': { bit: 16, rate: 15, status: 1, time: 0 },
|
||||||
'2': { bit: 17, rate: 85, status: 1, time: 0 }
|
'2': { bit: 17, rate: 85, status: 1, time: 0 },
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
await record.save()
|
await record.save()
|
||||||
return record.toJson()
|
return record.toJson()
|
||||||
}
|
}
|
||||||
|
|
||||||
@router('post /api/cec/bind_account')
|
@router('post /api/cec/bind_account')
|
||||||
async bindAccount(req: any) {
|
async bindAccount(req: any) {
|
||||||
await new SyncLocker().checkLock(req)
|
await new SyncLocker().checkLock(req)
|
||||||
@ -272,15 +272,15 @@ class CECController extends BaseController {
|
|||||||
throw new ZError(14, 'bind parse ended')
|
throw new ZError(14, 'bind parse ended')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (accid && !address || !accid && address) {
|
if ((accid && !address) || (!accid && address)) {
|
||||||
throw new ZError(11, 'address and accid are required')
|
throw new ZError(11, 'address and accid are required')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (address && !ethers.utils.isAddress(address)) {
|
if (address && !ethers.utils.isAddress(address)) {
|
||||||
throw new ZError(12, 'address is invalid')
|
throw new ZError(12, 'address is invalid')
|
||||||
}
|
}
|
||||||
|
|
||||||
let wallet: string; // 通过该地址查询可以claim的cec数量
|
let wallet: string // 通过该地址查询可以claim的cec数量
|
||||||
if (user.plat === PlatEnum.EXTERNAL_WALLET) {
|
if (user.plat === PlatEnum.EXTERNAL_WALLET) {
|
||||||
wallet = user.openId || user.openid
|
wallet = user.openId || user.openid
|
||||||
} else {
|
} else {
|
||||||
@ -289,7 +289,7 @@ class CECController extends BaseController {
|
|||||||
wallet = walletRecord.address
|
wallet = walletRecord.address
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wallet) {
|
if (!wallet) {
|
||||||
throw new ZError(11, 'wallet not found')
|
throw new ZError(11, 'wallet not found')
|
||||||
}
|
}
|
||||||
@ -300,8 +300,8 @@ class CECController extends BaseController {
|
|||||||
throw new ZError(15, 'no claimable record found')
|
throw new ZError(15, 'no claimable record found')
|
||||||
}
|
}
|
||||||
|
|
||||||
await BitgetBindInfo.insertOrUpdate({ wallet }, {address, biggetAcc: accid})
|
await BitgetBindInfo.insertOrUpdate({ wallet }, { address, biggetAcc: accid })
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import { dbconn } from 'decorators/dbconn'
|
import { dbconn } from 'decorators/dbconn'
|
||||||
import { getModelForClass, index, modelOptions, prop, mongoose } from '@typegoose/typegoose'
|
import { getModelForClass, index, modelOptions, prop } from '@typegoose/typegoose'
|
||||||
import { BaseModule } from './Base'
|
import { BaseModule } from './Base'
|
||||||
import { BigNumber } from 'ethers'
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 所有的CEC赚取记录
|
* 所有的CEC赚取记录
|
||||||
@ -11,12 +9,12 @@ import { BigNumber } from 'ethers'
|
|||||||
export enum CECStatusEnum {
|
export enum CECStatusEnum {
|
||||||
NORMAL = 1,
|
NORMAL = 1,
|
||||||
STAGE1_CLAIMED = 2,
|
STAGE1_CLAIMED = 2,
|
||||||
STAGE2_CLAIMED = 3
|
STAGE2_CLAIMED = 3,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ClaimStatusEnum {
|
export enum ClaimStatusEnum {
|
||||||
NORMAL = 1,
|
NORMAL = 1,
|
||||||
CLAIMED = 2
|
CLAIMED = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
@modelOptions({ schemaOptions: { _id: false } })
|
@modelOptions({ schemaOptions: { _id: false } })
|
||||||
@ -68,7 +66,7 @@ export class CECRecordTotalClass extends BaseModule {
|
|||||||
* founder's tag holder: 19
|
* founder's tag holder: 19
|
||||||
*/
|
*/
|
||||||
@prop({ type: () => ClaimStatus, _id: false })
|
@prop({ type: () => ClaimStatus, _id: false })
|
||||||
public claimStatus?: Map<string, ClaimStatus>;
|
public claimStatus?: Map<string, ClaimStatus>
|
||||||
|
|
||||||
@prop()
|
@prop()
|
||||||
public earnTime: string
|
public earnTime: string
|
||||||
@ -86,7 +84,7 @@ export class CECRecordTotalClass extends BaseModule {
|
|||||||
*/
|
*/
|
||||||
@prop()
|
@prop()
|
||||||
public skipBind: number
|
public skipBind: number
|
||||||
|
|
||||||
@prop({ enum: CECStatusEnum, default: CECStatusEnum.NORMAL })
|
@prop({ enum: CECStatusEnum, default: CECStatusEnum.NORMAL })
|
||||||
public status: CECStatusEnum
|
public status: CECStatusEnum
|
||||||
|
|
||||||
@ -95,7 +93,7 @@ export class CECRecordTotalClass extends BaseModule {
|
|||||||
address: this.address,
|
address: this.address,
|
||||||
amount: this.amount.toString(),
|
amount: this.amount.toString(),
|
||||||
desc: this.desc,
|
desc: this.desc,
|
||||||
earnTime: this.earnTime
|
earnTime: this.earnTime,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ import mongoose from 'mongoose'
|
|||||||
const envFile = process.env.NODE_ENV && process.env.NODE_ENV === 'production' ? `.env.production` : '.env.development'
|
const envFile = process.env.NODE_ENV && process.env.NODE_ENV === 'production' ? `.env.production` : '.env.development'
|
||||||
dotenv.config({ path: envFile })
|
dotenv.config({ path: envFile })
|
||||||
console.log(process.env.DB_MAIN)
|
console.log(process.env.DB_MAIN)
|
||||||
import { CECRecord } from './models/CECRecord'
|
import { CECRecord } from 'models/CECRecord'
|
||||||
import { CECRecordTotal } from './models/CECRecordTotal'
|
import { CECRecordTotal } from 'models/CECRecordTotal'
|
||||||
|
|
||||||
const dbMain = mongoose.createConnection(process.env.DB_MAIN)
|
const dbMain = mongoose.createConnection(process.env.DB_MAIN)
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import { Contract } from 'ethers'
|
import { Contract } from 'ethers'
|
||||||
import { CECRecordTotalClass, CECStatusEnum, ClaimStatusEnum } from 'models/CECRecordTotal'
|
import { CECRecordTotalClass, ClaimStatusEnum } from 'models/CECRecordTotal'
|
||||||
import { CheckIn } from 'models/chain/CheckIn'
|
import { CheckIn } from 'models/chain/CheckIn'
|
||||||
import { NftHolder } from 'models/chain/NftHolder'
|
import { NftHolder } from 'models/chain/NftHolder'
|
||||||
import { NftStake } from 'models/chain/NftStake'
|
import { NftStake } from 'models/chain/NftStake'
|
||||||
@ -7,7 +7,6 @@ import { TokenClaimRecord } from 'models/chain/TokenClaimRecord'
|
|||||||
import { sign } from 'utils/sign.utils'
|
import { sign } from 'utils/sign.utils'
|
||||||
import { getMonthBegin, getNDayAgo } from 'utils/utcdate.util'
|
import { getMonthBegin, getNDayAgo } from 'utils/utcdate.util'
|
||||||
import { timeoutFetch } from 'zutils/utils/net.util'
|
import { timeoutFetch } from 'zutils/utils/net.util'
|
||||||
import { numberToBN } from 'zutils/utils/number.util'
|
|
||||||
const DEFAULT_TIMEOUT = 30000
|
const DEFAULT_TIMEOUT = 30000
|
||||||
const ACTIVITY_RPC_URL = process.env.ACTIVITY_RPC_URL
|
const ACTIVITY_RPC_URL = process.env.ACTIVITY_RPC_URL
|
||||||
|
|
||||||
@ -169,20 +168,33 @@ export const fetchClaimStatus = async (address: string, taskId: string) => {
|
|||||||
return fetchChainStatus(address, `0x${method}${addressStr}${valStr}`)
|
return fetchChainStatus(address, `0x${method}${addressStr}${valStr}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const updateClaimStatus = async (
|
export const updateClaimStatus = async ({
|
||||||
{address, account, token, records}:
|
address,
|
||||||
{address: string, account: string, token: string, records: Partial<CECRecordTotalClass>[]}) => {
|
account,
|
||||||
|
token,
|
||||||
|
records,
|
||||||
|
}: {
|
||||||
|
address: string
|
||||||
|
account: string
|
||||||
|
token: string
|
||||||
|
records: Partial<CECRecordTotalClass>[]
|
||||||
|
}) => {
|
||||||
const chain = process.env.CLAIM_CHAIN + ''
|
const chain = process.env.CLAIM_CHAIN + ''
|
||||||
const record = await TokenClaimRecord.findOne({ chain, address: address.toLowerCase(), token: token.toLowerCase(), account })
|
const record = await TokenClaimRecord.findOne({
|
||||||
|
chain,
|
||||||
|
address: address.toLowerCase(),
|
||||||
|
token: token.toLowerCase(),
|
||||||
|
account,
|
||||||
|
})
|
||||||
if (!record) {
|
if (!record) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const bitTotal = BigInt(record.bit)
|
const bitTotal = BigInt(record.bit)
|
||||||
for (let item of records) {
|
for (let item of records) {
|
||||||
let changed = false
|
let changed = false
|
||||||
for ( let value of item.claimStatus.values()) {
|
for (let value of item.claimStatus.values()) {
|
||||||
let bit = BigInt(value.bit)
|
let bit = BigInt(value.bit)
|
||||||
if (value.status == ClaimStatusEnum.NORMAL && (bitTotal & 1n << bit) > 0n ) {
|
if (value.status == ClaimStatusEnum.NORMAL && (bitTotal & (1n << bit)) > 0n) {
|
||||||
value.status = ClaimStatusEnum.CLAIMED
|
value.status = ClaimStatusEnum.CLAIMED
|
||||||
changed = true
|
changed = true
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
@ -193,32 +205,45 @@ export const updateClaimStatus = async (
|
|||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
await item.save()
|
await item.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const claimTokenAbi = [
|
const claimTokenAbi = ['function claim(address,address,uint256[4],bytes)']
|
||||||
'function claim(address,address,uint256[4],bytes)',
|
|
||||||
]
|
|
||||||
|
|
||||||
const claimKeyArr = ["address","address", "address", "address", "uint256","uint256", "uint256", "uint256", "uint256"]
|
const claimKeyArr = ['address', 'address', 'address', 'address', 'uint256', 'uint256', 'uint256', 'uint256', 'uint256']
|
||||||
|
|
||||||
export const buildTokenClaimData = async ({address, account, token, amount, bit, nonce}:
|
export const buildTokenClaimData = async ({
|
||||||
{
|
address,
|
||||||
address: string,
|
account,
|
||||||
account: string,
|
token,
|
||||||
token: string,
|
amount,
|
||||||
amount: string,
|
bit,
|
||||||
bit: number | string,
|
nonce,
|
||||||
nonce: string
|
}: {
|
||||||
}) => {
|
address: string
|
||||||
|
account: string
|
||||||
|
token: string
|
||||||
|
amount: string
|
||||||
|
bit: number | string
|
||||||
|
nonce: string
|
||||||
|
}) => {
|
||||||
const contract = new Contract(process.env.CLAIM_CONTRACT, claimTokenAbi)
|
const contract = new Contract(process.env.CLAIM_CONTRACT, claimTokenAbi)
|
||||||
const time = (Date.now() / 1000 | 0)+''
|
const time = ((Date.now() / 1000) | 0) + ''
|
||||||
bit = bit +''
|
bit = bit + ''
|
||||||
const signValArr = [address, account, token, process.env.CLAIM_CONTRACT, process.env.CLAIM_CHAIN, amount, bit, time, nonce]
|
const signValArr = [
|
||||||
|
address,
|
||||||
|
account,
|
||||||
|
token,
|
||||||
|
process.env.CLAIM_CONTRACT,
|
||||||
|
process.env.CLAIM_CHAIN,
|
||||||
|
amount,
|
||||||
|
bit,
|
||||||
|
time,
|
||||||
|
nonce,
|
||||||
|
]
|
||||||
const signature = await sign(process.env.SIGN_PRIVATE_KEY, claimKeyArr, signValArr)
|
const signature = await sign(process.env.SIGN_PRIVATE_KEY, claimKeyArr, signValArr)
|
||||||
const vals = [amount, bit, time, nonce]
|
const vals = [amount, bit, time, nonce]
|
||||||
const params = [account, token, vals, signature]
|
const params = [account, token, vals, signature]
|
||||||
console.log(JSON.stringify(params))
|
console.log(JSON.stringify(params))
|
||||||
return contract.populateTransaction['claim'](...params)
|
return contract.populateTransaction['claim'](...params)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user