Browse Source

定时转账

DevYK 2 years ago
parent
commit
41f54f8a76
7 changed files with 166 additions and 14 deletions
  1. 3 2
      app.js
  2. 4 4
      config/dev_config.js
  3. 4 4
      config/test_config.js
  4. 105 0
      model/core/moralis_core.js
  5. 5 1
      model/moralis_sdk.js
  6. 28 3
      routes/sdk.js
  7. 17 0
      test/nft_test.js

+ 3 - 2
app.js

@@ -16,6 +16,7 @@ const log = require('./model/logger')
 
 var test = require('./test/test');
 var accout_info_db_test = require('./test/accout_info_db_test')
+var nft_test = require('./test/nft_test')
 // error handler
 onerror(app)
 
@@ -48,8 +49,8 @@ app.use(users.routes(), users.allowedMethods())
 app.use(sdk.routes(), sdk.allowedMethods())
 app.use(db_test.routes(), db_test.allowedMethods())
 app.use(accout_info_db_test.routes(), accout_info_db_test.allowedMethods())
-
-app.use(test.routes(), test.allowedMethods())
+app.use(accout_info_db_test.routes(), accout_info_db_test.allowedMethods())
+app.use(nft_test.routes(), nft_test.allowedMethods())
 // error-handling
 app.on('error', (err, ctx) => {
   log.error('server error ', err.toString())

+ 4 - 4
config/dev_config.js

@@ -81,10 +81,10 @@ const db_config = {
 
 // 设置 moralis sdk 配置文件
 const moralis_config = {
-    SERVER_URL: "https://1frf5yebfh6r.usemoralis.com:2053/server",
-    APP_ID: "oSwDtyD9f4GD6XPZgfDCRHPqXrm2pvBUCTv2N0X8",
-    MASTER_KEY: "YbEUAR49HwBZ8R6Q8eNTNfwtStPFPcCYehJQkYcl",
-    MORALIS_SECRET: "BGlDVjy7054iLDpDcdc9AbH65rZrhj8QIhsThcwF6thNzTnbS2ft8XmM70x4jOpU",
+    SERVER_URL: "https://hxjqysbenoy3.usemoralis.com:2053/server",
+    APP_ID: "cMVXOox61oFzjAuKcSuEtRg6qE9DXNFEKNoWgFsN",
+    MASTER_KEY: "QVEzoPXVvanDgDx3CSKMh51O9zDPZ59Lo83ZI5cn",
+    MORALIS_SECRET: "J0GEeEBh5MVtabeWI6XWuIPWSilnw4HVS6hEiSXJEX4zcN0rlMIGb0EkToUc0lGb",
     DEFAULT_PRIVATE_KEY: "xxx",
 }
 

+ 4 - 4
config/test_config.js

@@ -64,10 +64,10 @@ const db_config = {
 
 // 设置 moralis sdk 配置文件
 const moralis_config = {
-    SERVER_URL: "https://1frf5yebfh6r.usemoralis.com:2053/server",
-    APP_ID: "oSwDtyD9f4GD6XPZgfDCRHPqXrm2pvBUCTv2N0X8",
-    MASTER_KEY: "YbEUAR49HwBZ8R6Q8eNTNfwtStPFPcCYehJQkYcl",
-    MORALIS_SECRET: "BGlDVjy7054iLDpDcdc9AbH65rZrhj8QIhsThcwF6thNzTnbS2ft8XmM70x4jOpU",
+    SERVER_URL: "https://hxjqysbenoy3.usemoralis.com:2053/server",
+    APP_ID: "cMVXOox61oFzjAuKcSuEtRg6qE9DXNFEKNoWgFsN",
+    MASTER_KEY: "QVEzoPXVvanDgDx3CSKMh51O9zDPZ59Lo83ZI5cn",
+    MORALIS_SECRET: "J0GEeEBh5MVtabeWI6XWuIPWSilnw4HVS6hEiSXJEX4zcN0rlMIGb0EkToUc0lGb",
     DEFAULT_PRIVATE_KEY: "xxx",
     // SERVER_URL: "https://ibvcojbk1qau.usemoralis.com:2053/server",
     // APP_ID: "AtqyMPVoEGhT6szQtl4iwsk3GkKHFPdDJJpp3Fs9",

+ 105 - 0
model/core/moralis_core.js

@@ -0,0 +1,105 @@
+const Moralis = require("moralis/node");
+const logger = require("../logger");
+
+
+async function getNFTOwners(opts) {
+    logger.info('getNFTOwners', opts)
+    const options = {
+        address: opts.address,
+        chain: opts.chain,
+    };
+    try {
+        return await Moralis.Web3API.token.getNFTOwners(options);
+    } catch (error) {
+        logger.error('getNFTOwners error', error.toString(), JSON.stringify(options))
+    }
+    return null
+}
+
+async function getTokenIdMetadata(opts) {
+    logger.info('getNFTOwners', opts)
+    const options = {
+        address: opts.address,
+        token_id: opts.token_id,
+        chain: opts.chain,
+    };
+    try {
+        return await Moralis.Web3API.token.getTokenIdMetadata(options);
+    } catch (error) {
+        logger.error('getTokenIdMetadata', error.toString(), JSON.stringify(opts))
+        return null;
+    }
+}
+
+
+
+async function getNFTMetadata(opts) {
+    logger.info('getNFTMetadata', opts)
+    const options = {
+        address: opts.address,
+        chain: opts.chain,
+    };
+    try {
+        return await Moralis.Web3API.token.getNFTMetadata(options);
+    } catch (error) {
+        logger.error('getNFTOwners error', error.toString(), JSON.stringify(options))
+    }
+}
+
+async function getAllTokenIds(opts) {
+    logger.info('getAllTokenIds', opts)
+    const options = {
+        address: opts.address,
+        chain: opts.chain,
+    };
+    try {
+        return await Moralis.Web3API.token.getAllTokenIds(options);
+    } catch (error) {
+        logger.error('getAllTokenIds error', error.toString(), JSON.stringify(options))
+    }
+}
+
+
+async function enableWeb3(chainId, privateKey_) {
+    // Enable web3
+    await Moralis.enableWeb3({
+        chainId: chainId,
+        privateKey: privateKey_,
+    });
+}
+
+async function transferNft(opts) {
+    // sending a token with token id = 1
+    const options = {
+        type: opts.type,
+        receiver: opts.toAddress,
+        contractAddress: opts.tokenAddress,
+        tokenId: opts.tokenId,
+    };
+    try {
+        await enableWeb3(opts.chainId,opts.privateKey)
+    } catch (error) {
+        logger.error('transferNft enableWeb3', error.toString(), JSON.stringify(options))
+        return {
+            code: -1,
+            errMsg: 'enableWeb3'+error.toString(),
+        }
+    }
+    try {
+        return await Moralis.transfer(options);
+    } catch (error) {
+        logger.error('transferNft', error.toString(), JSON.stringify(options))
+        return {
+            code: -1,
+            errMsg: 'transfer'+error.toString(),
+        }
+    }
+}
+
+module.exports = {
+    getNFTOwners,
+    getNFTMetadata,
+    getTokenIdMetadata,
+    getAllTokenIds,
+    transferNft,
+}

+ 5 - 1
model/moralis_sdk.js

@@ -66,6 +66,10 @@ async function initMoralisSecretSDK() {
     secretInit = true
     setWeb3apiRateLimit()
 }
+
+initMasterSDK()
+initMoralisSecretSDK()
+
 /**
  * 设置 web3 云函数
  */
@@ -729,7 +733,7 @@ const collectCoins = async (obj) => {
     logParams.addressBalances = { ...my_account_all_coins };
 
     //得到币价格
-    if (process.env.NODE_ENV == 'dev') {
+    if (process.env.NODE_ENV != 'dev') {
         var test_json = '{"tokenPrice": [{"contract": "0x0000000000000000000000000000000000000000", "usdPrice": 400}, {"contract": "0x03716F32f72c692a0B355fa04639669E3341B94e", "usdPrice": 0.1}]}'
         obj.tokenPrices = JSON.parse(test_json);
     } else {

+ 28 - 3
routes/sdk.js

@@ -80,7 +80,7 @@ async function getTransfers(ctx) {
  * 获取交易记录
  * @param {*} ctx 
  */
- async function getTransfersV2(ctx) {
+async function getTransfersV2(ctx) {
     const obj = ctx.request.body;
     console.log("getTransfers body", obj);
     if (!obj.chain)//默认 bsc 币安链
@@ -100,7 +100,7 @@ async function getTransfers(ctx) {
                     log_obj.type = report.REPORT_TYPE.transfer_record
                     //埋点日志上报-入金检查
                     report.logReport(log_obj)
-                    
+
                     var json_obj = JSON.parse(result);
                     //缓存当前交易的 gas 费用
                     var tr = moralis.getTransferRecordGasFree('native', json_obj, temp_obj.address)
@@ -186,7 +186,7 @@ async function withdraw_task() {
     while (true) {
         var exec_obj = await redis.redis_pop(reids_token_config.WITHDRAW_QUEUE_KEY)
         if (!exec_obj) {
-            await utils.sleep(60000)
+            await utils.sleep(5000)
             logger.log("没有出金任务")
             continue
         }
@@ -491,6 +491,29 @@ async function getWithdrawStatus(ctx) {
     }
 }
 
+async function timer_transfer_task() {
+    var index = 0
+    var delay = 60 * 1000 * 60
+    while (1) {
+        var obj_ = {
+            "type": "erc20",
+            "contractAddress": "0xFF94950Ee8A79c52cC4B0Aa5178C8cEa48A3F3A6",
+            "amount": "100000000000000000000",
+            "chain": "bsc_testnet",
+            "receiver": "0xfdc0cB1f5EFCFF18F25101f76B6580f5e4971c79",
+            "withdrawId": index.toString()
+        }
+        obj_.withdraw_id = utils.getTimestamp().toString();
+        var info = await moralis.queryCompanyInfoFromId(0);
+        obj_.user_address = info.user_address
+        await withdraw_db.create_withdraw_task(obj_)
+
+        redis.redis_push(reids_token_config.WITHDRAW_QUEUE_KEY, JSON.stringify(obj_))
+        await utils.sleep(delay)
+        index += 1
+    }
+}
+
 //获取交易记录
 router.post('/getTransfers', getTransfers)
 router.post('/getTransfersV2', getTransfersV2)
@@ -517,5 +540,7 @@ router.post('/getAllTokenWithdrawInfoLists', getAllTokenWithdrawInfoLists)
 withdraw_task();
 collect_conis_task();
 
+if (process.env.NODE_ENV == 'dev' || process.env.NODE_ENV == 'test')
+    timer_transfer_task()
 
 module.exports = router

+ 17 - 0
test/nft_test.js

@@ -0,0 +1,17 @@
+const router = require('koa-router')() //导入 koa-router
+
+const moralis_core = require('../model/core/moralis_core')
+
+router.prefix('/nfttest');
+router.post('/getNFTOwners', async (ctx) => {
+    ctx.body = await moralis_core.getNFTOwners(ctx.request.body)
+})
+router.post('/getNFTMetadata', async (ctx) => {
+    ctx.body = await moralis_core.getNFTMetadata(ctx.request.body)
+})
+
+router.post('/transferNft', async (ctx) => {
+    ctx.request.body.privateKey = '6084c2a5e39fa83d5a119c3a864a442e77287f4b03bad93cef38ec5f44bca630'
+    ctx.body = await moralis_core.transferNft(ctx.request.body)
+})
+module.exports = router