sdk.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. var router = require('koa-router')();
  2. var moralis = require('../model/moralis_sdk.js')
  3. var utils = require('../model/utils.js');
  4. var { reids_token_config, account_config } = require('../config/config.js');
  5. const logger = require('../model/logger.js');
  6. router.prefix('/sdk');
  7. const redis = require("../model/redis_db") //导入 db.js
  8. const report = require("../model/report") //导入 db.js
  9. /**
  10. * 获取代币价格
  11. * @param {*} ctx
  12. */
  13. async function getAllTotkenPrice(ctx) {
  14. console.log('getTotkenPrice in:')
  15. var ret = await moralis.getAllTotkenPrice()
  16. console.log('getTotkenPrice result:', ret)
  17. if (ret)
  18. ctx.body = utils.toJson(0, ret, null);
  19. else ctx.body = utils.toJson(-1, null, "redis read error.");
  20. }
  21. /**
  22. * 获取交易记录
  23. * @param {*} ctx
  24. */
  25. async function getTransfers(ctx) {
  26. console.log("body", ctx);
  27. const obj = ctx.request.body;
  28. console.log("obj", obj);
  29. if (!obj.chain)//默认 bsc 币安链
  30. obj.chain = 'bsc_mainnet'
  31. var temp_obj = { ...obj }
  32. await moralis.getTokenTransfers(obj).then((result) => {
  33. if (result) {
  34. //提交归集任务 native 能获取到 gas 、token 无法获取到 gas 费
  35. try {
  36. if (temp_obj.address && moralis.isTransferSucceed(result)) {
  37. var log_obj = { ...obj }
  38. log_obj.results = result
  39. log_obj.type = report.REPORT_TYPE.transfer_record
  40. //埋点日志上报-入金检查
  41. report.logReport(log_obj)
  42. var json_obj = JSON.parse(result);
  43. //缓存当前交易的 gas 费用
  44. var tr = moralis.getTransferRecordGasFree('native', json_obj, temp_obj.address)
  45. logger.log('getTransferRecordGasFree:', tr, temp_obj.address)
  46. if (tr && tr.totalGasFree > 0) {
  47. logger.log('getTransferRecordGasFree redis_set LAST_TOTAL_BNB_FREE:', tr.totalGasFree.toString())
  48. logger.log('getTransferRecordGasFree redis_set LAST_TOTAL_TOKEN_FREE:', (parseInt(tr.totalGasFree) * parseInt(account_config.TOKEN_GAS_LIMIT)).toString())
  49. redis.redis_set(reids_token_config.LAST_TOTAL_BNB_FREE, tr.totalGasFree.toString());
  50. redis.redis_set(reids_token_config.LAST_TOTAL_TOKEN_FREE, (parseInt(tr.gas_price) * parseInt(account_config.TOKEN_GAS_LIMIT)).toString());
  51. }
  52. //提交归集任务
  53. if (temp_obj.address) {
  54. logger.log('pushCollectConisObj>>>', temp_obj.address)
  55. moralis.pushCollectConisObj(temp_obj)
  56. }
  57. }
  58. } catch (error) {
  59. console.error('pushCollectConisObj error=', error)
  60. }
  61. }
  62. ctx.body = result;
  63. })
  64. }
  65. /**
  66. * 出金,入金交易
  67. * @param {*} ctx
  68. * @returns
  69. */
  70. async function transfer(ctx) {
  71. if (ctx.request == null || ctx.request.body == null) {
  72. ctx.body = utils.toJson(-1, null, "request error. ");
  73. return
  74. }
  75. const obj = ctx.request.body;
  76. await moralis.transfer(obj).then((result) => {
  77. ctx.body = result;
  78. });
  79. }
  80. async function getAllTokenWithdrawInfoLists(ctx) {
  81. if (ctx.request == null || ctx.request.body == null) {
  82. ctx.body = utils.toJson(-1, null, "request error. ");
  83. return
  84. }
  85. ctx.body = await moralis.getAllTokenWithdrawInfoLists(ctx);
  86. }
  87. /**
  88. *
  89. * @param {鉴权版本} ctx
  90. */
  91. async function withdrawV2(ctx) {
  92. if (ctx.request == null || ctx.request.body == null) {
  93. ctx.body = utils.toJson(-1, null, "request error. ");
  94. return
  95. }
  96. const obj = ctx.request.body;
  97. var log_obj = { ...obj }
  98. // const encryptText = utils.encrypt(log_obj);
  99. const encryptText = log_obj.content;
  100. console.log("加密", encryptText);
  101. let decryptObj = utils.decrypt(encryptText);
  102. try {
  103. console.log("解密 before", decryptObj);
  104. decryptObj = JSON.parse(decryptObj);
  105. console.log("解密 json parse", decryptObj);
  106. await withdraw_(decryptObj).then(result => {
  107. ctx.body = result;
  108. })
  109. } catch (error) {
  110. console.log("json error:", error);
  111. ctx.body = utils.toJson(-1,null,error.toString());
  112. }
  113. }
  114. async function withdraw_(obj) {
  115. console.log("withdraw_", obj);
  116. var log_obj = { ...obj }
  117. var info = await moralis.queryCompanyInfoFromId(0);
  118. log_obj.company_address_total_balance_before = await moralis.queryCollectBalance(info.user_address, obj.chain)
  119. log_obj.company_public_key = info.user_address
  120. logger.log('withdraw log', log_obj);
  121. return new Promise((resolve) => {
  122. moralis.withdraw(obj).then((result) => {
  123. if (moralis.isTransferSucceed(result)) {
  124. //提币日志上报
  125. log_obj.results = result
  126. log_obj.type = report.REPORT_TYPE.withdraw
  127. //缓存当前交易的 gas 费用
  128. if (result && log_obj.contractAddress) {
  129. var tr = moralis.getTransferGasFree('token', result)
  130. log_obj.withdrawTotalGasFee = tr.totalGasFree.toString()
  131. } else {
  132. var tr = moralis.getTransferGasFree('native', ret)
  133. log_obj.withdrawTotalGasFee = tr.totalGasFree.toString()
  134. }
  135. // log_obj.receiver_address_total_balance_after = await queryCollectBalance(info.user_address, utils.getChainName(obj.chain))
  136. //日志上报
  137. report.logReport(log_obj)
  138. }
  139. resolve(result)
  140. });
  141. })
  142. }
  143. //出金
  144. async function withdraw(ctx) {
  145. if (ctx.request == null || ctx.request.body == null) {
  146. ctx.body = utils.toJson(-1, null, "request error. ");
  147. return
  148. }
  149. const obj = ctx.request.body;
  150. var log_obj = { ...obj }
  151. var info = await moralis.queryCompanyInfoFromId(0);
  152. log_obj.company_address_total_balance_before = await moralis.queryCollectBalance(info.user_address, obj.chain)
  153. log_obj.company_public_key = info.user_address
  154. logger.log('withdraw log', log_obj,obj);
  155. await moralis.withdraw(obj).then((result) => {
  156. ctx.body = result;
  157. if (moralis.isTransferSucceed(result)) {
  158. //提币日志上报
  159. log_obj.results = result
  160. log_obj.type = report.REPORT_TYPE.withdraw
  161. //缓存当前交易的 gas 费用
  162. if (result && log_obj.contractAddress) {
  163. var tr = moralis.getTransferGasFree('token', result)
  164. log_obj.withdrawTotalGasFee = tr.totalGasFree.toString()
  165. } else {
  166. var tr = moralis.getTransferGasFree('native', ret)
  167. log_obj.withdrawTotalGasFee = tr.totalGasFree.toString()
  168. }
  169. // log_obj.receiver_address_total_balance_after = await queryCollectBalance(info.user_address, utils.getChainName(obj.chain))
  170. //日志上报
  171. report.logReport(log_obj)
  172. }
  173. });
  174. }
  175. //获取交易记录
  176. router.post('/getTransfers', getTransfers)
  177. // 获取所有代币价格
  178. router.post('/getAllTotkenPrice', getAllTotkenPrice)
  179. // router.post('/transfer', transfer)
  180. //提现
  181. router.post('/withdraw', withdraw);
  182. //提现
  183. router.post('/withdrawV2', withdrawV2);
  184. //获取所有地址的所要消耗的最低提取费
  185. router.post('/getAllTokenWithdrawInfoLists', getAllTokenWithdrawInfoLists)
  186. module.exports = router;