优化alchemy购买流程

This commit is contained in:
CounterFire2023 2023-07-05 11:29:32 +08:00
parent db5c061ce4
commit ff90914997
8 changed files with 25 additions and 14 deletions

View File

@ -8,17 +8,19 @@ API_TOKEN_EXPIRESIN=1d
GOOGLE_OAUTH_CLIENT="53206975661-asnf3qe4bg29p8h981pgf099osvrjbme.apps.googleusercontent.com"
GOOGLE_OAUTH_CLIENT2="53206975661-ih3r0ubph3rqejdq97b029difbrk2bqj.apps.googleusercontent.com"
GOOGLE_OAUTH_CLIENT_IOS="53206975661-qan0rnefniegjv53ohild375pv0p7ekd.apps.googleusercontent.com"
DB_MAIN=mongodb://localhost/wallet-development
GOOGLE_CLOUD_API_KEY="AIzaSyDNOhG9J0TFqeE0g5TOnxWpDNkUMc3PBgI"
DB_MAIN=mongodb://192.168.100.22/wallet-development
DB_PAY=mongodb://192.168.100.22/pay-development
EMAIL_VERIFY_URL="https://wallet.cebggame.com"
EMAIL_SERVER='http://127.0.0.1:3087'
ALCHEMY_APPID="f83Is2y7L425rxl8"
ALCHEMY_APP_SECRET="4Yn8RkxDXN71Q3p0"
# ALCHEMY_API_BASE="https://openapi-test.alchemypay.org"
# ALCHEMY_PAGE_BASE="https://ramptest.alchemypay.org"
ALCHEMY_API_BASE="http://127.0.0.1:3009"
ALCHEMY_PAGE_BASE="http://127.0.0.1:3009/pay_page"
ALCHEMY_API_BASE="https://openapi-test.alchemypay.org"
ALCHEMY_PAGE_BASE="https://ramptest.alchemypay.org"
# ALCHEMY_API_BASE="http://127.0.0.1:3009"
# ALCHEMY_PAGE_BASE="http://127.0.0.1:3009/pay_page"
ALCHEMY_PAY_CB_URL="https://wallet.cebggame.com"

View File

@ -53,7 +53,7 @@ let baseConfig = {
},
db_main: process.env.DB_MAIN,
db_second: process.env.DB_SECOND,
db_pay: process.env.DB_PAY,
chainCfgs: chainCfgs,
}

View File

@ -7,6 +7,7 @@ import { PayRecord, PayStatus } from 'modules/PayRecord'
import { TransferQueue } from 'queue/transfer.queue'
import { TransferRecord } from 'modules/TransferRecord'
import { reportPayResult } from 'service/game.svr'
import { PriceSvr } from 'service/price.svr'
let errorRes = function (msg: string) {
logger.info(`error res: ${msg}`)
@ -90,14 +91,17 @@ class AlchemyOutController extends BaseController {
if (!checkSha1Sign(req.headers)) {
return errorRes('sign error')
}
let gas = 36000 * 0.0000000001
let price = await new PriceSvr().fetchPrice({ crypto: 'ETH', network: 'ARBITRUM' })
let networkFee = gas * parseFloat(price)
let result = {
direct: 1,
data: {
price: '1.0',
networkList: [
{
network: 'AGOR',
networkFee: '0.037',
network: 'ARBITRUM',
networkFee: networkFee.toFixed(6),
},
],
},

View File

@ -23,7 +23,7 @@ const notify = async function (record: DocumentType<PayRecordClass>, subTask: Do
network: record.network, // 用户购买的数字货币对应的网络
// networkFee: record.networkFee, // 网络费用/USDT
address: record.address, // 用户的提币地址
status: 'SUCCESS', // SUCCESS/FAIL
status: record.status === PayStatus.TRANSFERED ? 'SUCCESS' : 'FAIL', // SUCCESS/FAIL
}
try {
let priceData = await queryPrice({ gas: subTask.gas })
@ -71,15 +71,15 @@ export default class InternalController extends BaseController {
record.hashList = hashList
task.txHash = hashList[0]
task.status = PayStatus.TRANSFERED
setImmediate(async () => {
await notify(task, record)
})
} else {
record.status = 10
task.status = PayStatus.TRANSFER_FAIL
}
await record.save()
await task.save()
setImmediate(async () => {
await notify(task, record)
})
return {}
}
}

View File

@ -20,7 +20,7 @@ export enum PayStatus {
FAIL = 99,
}
@dbconn()
@dbconn('pay')
@index({ outOrderId: 1 }, { unique: true, partialFilterExpression: { outOrderId: { $exists: true } } })
@modelOptions({
schemaOptions: { collection: 'pay_record', timestamps: true },

View File

@ -6,7 +6,7 @@ import { PayType } from './PayRecord'
/**
*
*/
@dbconn()
@dbconn('pay')
@index({ recordId: 1 }, { unique: true })
@modelOptions({ schemaOptions: { collection: 'pay_transfer_record', timestamps: true } })
export class TransferRecordClass extends BaseModule {

View File

@ -87,6 +87,7 @@ export class TransferQueue {
taskId: record.id,
source: 'pay',
data: datas,
max: 1,
cb: process.env.PAY_TRANSFER_CB_URL,
}
await pushTaskToChain(reqData)

View File

@ -87,6 +87,10 @@ export function createPageSign(plainText: string) {
export function checkSha1Sign(headers: any) {
const { appid, appId, timestamp, sign } = headers
// timestamp 5分钟内有效
if (parseInt(timestamp) < Date.now() - 1000 * 60 * 5) {
return false
}
let appIdToCheck = appId || appid || process.env.ALCHEMY_APPID
const expectedSign = sha1(appIdToCheck + process.env.ALCHEMY_APP_SECRET + timestamp)
return sign === expectedSign