utils.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. 'use strict'
  2. var CryptoJS = require("crypto-js");
  3. require('dotenv').config()
  4. const logger = require('./logger')
  5. var moment = require('moment');
  6. const chinaTime = require('china-time');
  7. var { cryppt_config } = require('../config/config.js')
  8. function toJson(code_, obj_, errMsg_) {
  9. var code = code_
  10. var data = obj_
  11. var errMsg = errMsg_
  12. let jopt = { code, data, errMsg };
  13. return JSON.stringify(jopt)
  14. }
  15. function decryptJson(message, key) {
  16. }
  17. /**
  18. *
  19. * @param {*} crypt_key 密文
  20. * @param {*} message 待解密的内容 U2FsdGVkX18zHfDE3lO2yVxk2lMCEiwjrzYo1ZbHqfriFapZWXqLhczs9J0cN9EnvQR64GLRzYDgzMuAr9U1C0LZjA5mV4cSAZeBOrY8KNY09+BhTDetb2/43bIwiFR6
  21. */
  22. function decryptPrivityKey(message) {
  23. // var encrypted = 'Zc4v3uJgPY+BVg/IrDLA4aIk9ko/UrgjAtBTLqymdMAvmqdp1GttRjkBgNNNTyxA+3ThbIGlM0INeeHGicYVbLea4ymkty8gd30rZXQ4yYQ='; //python is base64 ECB
  24. // var key = '0IPmaec1o9FQCqGN'//key used in Python
  25. // var iv = 'Zh4A7bOY2ksp9oIn'
  26. var encrypted = message; //python is base64 ECB
  27. var key = process.env.DENET_CRYPT_KEY //key used in Python
  28. var iv = process.env.DENET_CRYPT_IV
  29. if (!key || !iv) {
  30. logger.error('decryptPrivityKey key or iv is empty?');
  31. return null;
  32. }
  33. logger.log('encrypted=', encrypted);
  34. // logger.log('decryptPrivityKey key= iv=', key, iv);
  35. key = CryptoJS.enc.Utf8.parse(key);
  36. // var decrypted = CryptoJS.AES.decrypt(encrypted, key, {mode:CryptoJS.mode.ECB});
  37. iv = CryptoJS.enc.Utf8.parse(iv)
  38. var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, mode: CryptoJS.mode.CBC });
  39. var de_pk = decrypted.toString(CryptoJS.enc.Utf8);
  40. // logger.log('decrypted==', de_pk);
  41. return de_pk
  42. }
  43. // console.log('decryptPrivityKey',decryptPrivityKey('8C9oepm9euh9UwPfqVf0QaP5qUjZsghT/rRlM3I1NemLACM8N4yx0wHgHnH5sZGM/ai5yg1MJnJMbfmApss/y5Chq8Ys+mZjIVrru2IWl/I='))
  44. // 密钥
  45. const SECRET_KEY = CryptoJS.enc.Utf8.parse(cryppt_config.WITHDRAW_KEY);
  46. // 密钥偏移量
  47. const SECRET_IV = CryptoJS.enc.Utf8.parse("68F37CFC40C330D9FAAC0A16D49C8AD5");
  48. /**
  49. * 加密方法
  50. * @param data
  51. * @returns {string}
  52. */
  53. function encrypt(data) {
  54. if (typeof data === "object") {
  55. try {
  56. data = JSON.stringify(data);
  57. } catch (error) {
  58. console.log("encrypt error:", error);
  59. }
  60. }
  61. const dataHex = CryptoJS.enc.Utf8.parse(data);
  62. const encrypted = CryptoJS.AES.encrypt(dataHex, SECRET_KEY, {
  63. mode: CryptoJS.mode.ECB,
  64. padding: CryptoJS.pad.Pkcs7
  65. });
  66. return encrypted.ciphertext.toString();
  67. }
  68. /**
  69. * 解密方法
  70. * @param data
  71. * @returns {string}
  72. */
  73. function decrypt(data) {
  74. // const key = CryptoJS.enc.Hex.parse(SECRET_KEY);
  75. const decrypt = CryptoJS.AES.decrypt(data, SECRET_KEY, {
  76. mode: CryptoJS.mode.ECB,
  77. padding: CryptoJS.pad.Pkcs7
  78. });
  79. return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  80. }
  81. const CHAIN_NAME = {
  82. eth: 'eth',
  83. bsc_testnet: 'bsc testnet',
  84. bsc_mainnet: 'bsc',
  85. czz: 'czz'
  86. }
  87. const CHAIN_ID = {
  88. eth: '0x1',
  89. bsc_testnet: '0x61',
  90. bsc_mainnet: '0x38',
  91. czz: '2019',
  92. }
  93. const CHAIN_ID_NAME = {
  94. 97: 'bsc_testnet',
  95. 56: 'bsc_mainnet',
  96. }
  97. const USE_SDK = {
  98. MORALIS: 'moralis',
  99. DENET: 'denet',
  100. }
  101. function getRedisKeyFromChain(chain) {
  102. switch (chain) {
  103. case CHAIN_NAME.bsc_mainnet:
  104. case CHAIN_NAME.bsc_testnet:
  105. case 'bsc_testnet':
  106. case 'bsc_mainnet':
  107. return '_BSC'
  108. case CHAIN_NAME.czz:
  109. return '_CZZ'
  110. default:
  111. return null
  112. }
  113. }
  114. function getChainName(key) {
  115. return CHAIN_NAME[key];
  116. }
  117. function getChainIdToName(key) {
  118. return CHAIN_ID_NAME[key];
  119. }
  120. function getChainId(key) {
  121. return CHAIN_ID[key];
  122. }
  123. function sleep(time) {
  124. return new Promise((resolve) => setTimeout(resolve, time));
  125. }
  126. function getTimestamp() {
  127. return new Date().getTime()
  128. }
  129. function getCurrentDate() {
  130. return chinaTime('YYYY-MM-DD HH:mm:ss');
  131. }
  132. function getCurrentDateFormat(format) {
  133. return chinaTime(format);
  134. }
  135. function getTimestampToDate(tm) {
  136. var now = new Date(tm),
  137. y = now.getFullYear(),
  138. m = now.getMonth() + 1,
  139. d = now.getDate();
  140. return y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d) + 'T' + now.toTimeString().substr(0, 8) + '.000Z';
  141. }
  142. /**
  143. * @description 科学计数法转为string
  144. * @param {string, number} param
  145. */
  146. function scientificNotationToString(param) {
  147. let strParam = String(param)
  148. let flag = /e/.test(strParam)
  149. if (!flag) return param
  150. // 指数符号 true: 正,false: 负
  151. let sysbol = true
  152. if (/e-/.test(strParam)) {
  153. sysbol = false
  154. }
  155. // 指数
  156. let index = Number(strParam.match(/\d+$/)[0])
  157. // 基数
  158. let basis = strParam.match(/^[\d\.]+/)[0].replace(/\./, '')
  159. if (sysbol) {
  160. return basis.padEnd(index + 1, 0)
  161. } else {
  162. return basis.padStart(index + basis.length, 0).replace(/^0/, '0.')
  163. }
  164. }
  165. module.exports = {
  166. toJson,
  167. decryptPrivityKey,
  168. getChainName,
  169. getChainId,
  170. CHAIN_NAME,
  171. CHAIN_ID,
  172. USE_SDK,
  173. sleep,
  174. encrypt,
  175. decrypt,
  176. getTimestamp,
  177. getChainIdToName,
  178. getCurrentDate,
  179. getCurrentDateFormat,
  180. scientificNotationToString,
  181. getTimestampToDate,
  182. getRedisKeyFromChain,
  183. }