diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..18566ec8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +.vscode \ No newline at end of file diff --git a/00_framework/core/.settings/org.eclipse.jdt.core.prefs b/00_framework/core/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 91ca62e2..00000000 --- a/00_framework/core/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,14 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/exchange-core/.classpath b/00_framework/exchange-core/.classpath deleted file mode 100644 index 01d47b78..00000000 --- a/00_framework/exchange-core/.classpath +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/00_framework/exchange/.classpath b/00_framework/exchange/.classpath deleted file mode 100644 index 87c8faa7..00000000 --- a/00_framework/exchange/.classpath +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/00_framework/market/.classpath b/00_framework/market/.classpath deleted file mode 100644 index 373c292f..00000000 --- a/00_framework/market/.classpath +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/00_framework/otc-api/.classpath b/00_framework/otc-api/.classpath deleted file mode 100644 index 87c8faa7..00000000 --- a/00_framework/otc-api/.classpath +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/00_framework/ucenter-api/.classpath b/00_framework/ucenter-api/.classpath deleted file mode 100644 index 87c8faa7..00000000 --- a/00_framework/ucenter-api/.classpath +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/00_framework/ucenter-api/.settings/org.eclipse.jdt.core.prefs b/00_framework/ucenter-api/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/00_framework/ucenter-api/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/wallet/.classpath b/00_framework/wallet/.classpath deleted file mode 100644 index 87c8faa7..00000000 --- a/00_framework/wallet/.classpath +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/00_framework/wallet/.settings/org.eclipse.jdt.core.prefs b/00_framework/wallet/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/00_framework/wallet/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/act/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/act/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/act/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/act/bin/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/act/bin/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/act/bin/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/ect/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/ect/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/ect/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/erc-token/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/erc-token/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/erc-token/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/eth-support/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/eth-support/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/eth-support/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/eth/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/eth/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/eth/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/rpc-common/.classpath b/01_wallet_rpc/rpc-common/.classpath deleted file mode 100644 index 5e8a55fe..00000000 --- a/01_wallet_rpc/rpc-common/.classpath +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/01_wallet_rpc/rpc-common/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/rpc-common/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/rpc-common/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/01_wallet_rpc/usdt/.classpath b/01_wallet_rpc/usdt/.classpath deleted file mode 100644 index a5d95095..00000000 --- a/01_wallet_rpc/usdt/.classpath +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/01_wallet_rpc/usdt/.settings/org.eclipse.jdt.core.prefs b/01_wallet_rpc/usdt/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b8947ec6..00000000 --- a/01_wallet_rpc/usdt/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/06_ExchangeRobot/README.md b/06_ExchangeRobot/README.md deleted file mode 100644 index 4750006f..00000000 --- a/06_ExchangeRobot/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 交易机器人 - -本项目是交易机器人相关项目,暂不开源 \ No newline at end of file diff --git a/04_Web_Admin/.babelrc b/app/admin/.babelrc similarity index 100% rename from 04_Web_Admin/.babelrc rename to app/admin/.babelrc diff --git a/04_Web_Admin/.gitignore b/app/admin/.gitignore similarity index 100% rename from 04_Web_Admin/.gitignore rename to app/admin/.gitignore diff --git a/04_Web_Admin/LICENSE b/app/admin/LICENSE similarity index 100% rename from 04_Web_Admin/LICENSE rename to app/admin/LICENSE diff --git a/04_Web_Admin/README.md b/app/admin/README.md similarity index 100% rename from 04_Web_Admin/README.md rename to app/admin/README.md diff --git a/04_Web_Admin/build/config.js b/app/admin/build/config.js similarity index 100% rename from 04_Web_Admin/build/config.js rename to app/admin/build/config.js diff --git a/04_Web_Admin/build/env.js b/app/admin/build/env.js similarity index 100% rename from 04_Web_Admin/build/env.js rename to app/admin/build/env.js diff --git a/04_Web_Admin/build/webpack.base.config.js b/app/admin/build/webpack.base.config.js similarity index 100% rename from 04_Web_Admin/build/webpack.base.config.js rename to app/admin/build/webpack.base.config.js diff --git a/04_Web_Admin/build/webpack.dev.config.js b/app/admin/build/webpack.dev.config.js similarity index 100% rename from 04_Web_Admin/build/webpack.dev.config.js rename to app/admin/build/webpack.dev.config.js diff --git a/04_Web_Admin/build/webpack.prod.config.js b/app/admin/build/webpack.prod.config.js similarity index 100% rename from 04_Web_Admin/build/webpack.prod.config.js rename to app/admin/build/webpack.prod.config.js diff --git a/04_Web_Admin/favicon.ico b/app/admin/favicon.ico similarity index 100% rename from 04_Web_Admin/favicon.ico rename to app/admin/favicon.ico diff --git a/04_Web_Admin/index.html b/app/admin/index.html similarity index 100% rename from 04_Web_Admin/index.html rename to app/admin/index.html diff --git a/04_Web_Admin/package-lock.json b/app/admin/package-lock.json similarity index 100% rename from 04_Web_Admin/package-lock.json rename to app/admin/package-lock.json diff --git a/04_Web_Admin/package.json b/app/admin/package.json similarity index 100% rename from 04_Web_Admin/package.json rename to app/admin/package.json diff --git a/04_Web_Admin/src/app.vue b/app/admin/src/app.vue similarity index 100% rename from 04_Web_Admin/src/app.vue rename to app/admin/src/app.vue diff --git a/04_Web_Admin/src/caculate/caculate.js b/app/admin/src/caculate/caculate.js similarity index 100% rename from 04_Web_Admin/src/caculate/caculate.js rename to app/admin/src/caculate/caculate.js diff --git a/04_Web_Admin/src/config/api.js b/app/admin/src/config/api.js similarity index 100% rename from 04_Web_Admin/src/config/api.js rename to app/admin/src/config/api.js diff --git a/04_Web_Admin/src/config/storage.js b/app/admin/src/config/storage.js similarity index 100% rename from 04_Web_Admin/src/config/storage.js rename to app/admin/src/config/storage.js diff --git a/04_Web_Admin/src/images/login.jpg b/app/admin/src/images/login.jpg similarity index 100% rename from 04_Web_Admin/src/images/login.jpg rename to app/admin/src/images/login.jpg diff --git a/04_Web_Admin/src/images/logo-min-light.png b/app/admin/src/images/logo-min-light.png similarity index 100% rename from 04_Web_Admin/src/images/logo-min-light.png rename to app/admin/src/images/logo-min-light.png diff --git a/04_Web_Admin/src/images/logo-min.png b/app/admin/src/images/logo-min.png similarity index 100% rename from 04_Web_Admin/src/images/logo-min.png rename to app/admin/src/images/logo-min.png diff --git a/04_Web_Admin/src/images/logo.png b/app/admin/src/images/logo.png similarity index 100% rename from 04_Web_Admin/src/images/logo.png rename to app/admin/src/images/logo.png diff --git a/04_Web_Admin/src/images/logo_light.png b/app/admin/src/images/logo_light.png similarity index 100% rename from 04_Web_Admin/src/images/logo_light.png rename to app/admin/src/images/logo_light.png diff --git a/04_Web_Admin/src/libs/table2excel.js b/app/admin/src/libs/table2excel.js similarity index 100% rename from 04_Web_Admin/src/libs/table2excel.js rename to app/admin/src/libs/table2excel.js diff --git a/04_Web_Admin/src/libs/util.js b/app/admin/src/libs/util.js similarity index 100% rename from 04_Web_Admin/src/libs/util.js rename to app/admin/src/libs/util.js diff --git a/04_Web_Admin/src/locale/index.js b/app/admin/src/locale/index.js similarity index 100% rename from 04_Web_Admin/src/locale/index.js rename to app/admin/src/locale/index.js diff --git a/04_Web_Admin/src/locale/locale.js b/app/admin/src/locale/locale.js similarity index 100% rename from 04_Web_Admin/src/locale/locale.js rename to app/admin/src/locale/locale.js diff --git a/04_Web_Admin/src/main.js b/app/admin/src/main.js similarity index 100% rename from 04_Web_Admin/src/main.js rename to app/admin/src/main.js diff --git a/04_Web_Admin/src/router/index.js b/app/admin/src/router/index.js similarity index 100% rename from 04_Web_Admin/src/router/index.js rename to app/admin/src/router/index.js diff --git a/04_Web_Admin/src/router/router.js b/app/admin/src/router/router.js similarity index 100% rename from 04_Web_Admin/src/router/router.js rename to app/admin/src/router/router.js diff --git a/04_Web_Admin/src/service/getData.js b/app/admin/src/service/getData.js similarity index 100% rename from 04_Web_Admin/src/service/getData.js rename to app/admin/src/service/getData.js diff --git a/04_Web_Admin/src/service/http.js b/app/admin/src/service/http.js similarity index 100% rename from 04_Web_Admin/src/service/http.js rename to app/admin/src/service/http.js diff --git a/04_Web_Admin/src/smeditor/ColorPicker.vue b/app/admin/src/smeditor/ColorPicker.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/ColorPicker.vue rename to app/admin/src/smeditor/ColorPicker.vue diff --git a/04_Web_Admin/src/smeditor/FontSizePicker.vue b/app/admin/src/smeditor/FontSizePicker.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/FontSizePicker.vue rename to app/admin/src/smeditor/FontSizePicker.vue diff --git a/04_Web_Admin/src/smeditor/Insert.vue b/app/admin/src/smeditor/Insert.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/Insert.vue rename to app/admin/src/smeditor/Insert.vue diff --git a/04_Web_Admin/src/smeditor/InsertLink.vue b/app/admin/src/smeditor/InsertLink.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/InsertLink.vue rename to app/admin/src/smeditor/InsertLink.vue diff --git a/04_Web_Admin/src/smeditor/InsertVideo.vue b/app/admin/src/smeditor/InsertVideo.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/InsertVideo.vue rename to app/admin/src/smeditor/InsertVideo.vue diff --git a/04_Web_Admin/src/smeditor/SMEditor.vue b/app/admin/src/smeditor/SMEditor.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/SMEditor.vue rename to app/admin/src/smeditor/SMEditor.vue diff --git a/04_Web_Admin/src/smeditor/TitlePicker.vue b/app/admin/src/smeditor/TitlePicker.vue similarity index 100% rename from 04_Web_Admin/src/smeditor/TitlePicker.vue rename to app/admin/src/smeditor/TitlePicker.vue diff --git a/04_Web_Admin/src/smeditor/icons.js b/app/admin/src/smeditor/icons.js similarity index 100% rename from 04_Web_Admin/src/smeditor/icons.js rename to app/admin/src/smeditor/icons.js diff --git a/04_Web_Admin/src/store/index.js b/app/admin/src/store/index.js similarity index 100% rename from 04_Web_Admin/src/store/index.js rename to app/admin/src/store/index.js diff --git a/04_Web_Admin/src/store/modules/app.js b/app/admin/src/store/modules/app.js similarity index 100% rename from 04_Web_Admin/src/store/modules/app.js rename to app/admin/src/store/modules/app.js diff --git a/04_Web_Admin/src/store/modules/user.js b/app/admin/src/store/modules/user.js similarity index 100% rename from 04_Web_Admin/src/store/modules/user.js rename to app/admin/src/store/modules/user.js diff --git a/04_Web_Admin/src/styles/common.less b/app/admin/src/styles/common.less similarity index 100% rename from 04_Web_Admin/src/styles/common.less rename to app/admin/src/styles/common.less diff --git a/04_Web_Admin/src/styles/fonts/ionicons.eot b/app/admin/src/styles/fonts/ionicons.eot similarity index 100% rename from 04_Web_Admin/src/styles/fonts/ionicons.eot rename to app/admin/src/styles/fonts/ionicons.eot diff --git a/04_Web_Admin/src/styles/fonts/ionicons.svg b/app/admin/src/styles/fonts/ionicons.svg similarity index 100% rename from 04_Web_Admin/src/styles/fonts/ionicons.svg rename to app/admin/src/styles/fonts/ionicons.svg diff --git a/04_Web_Admin/src/styles/fonts/ionicons.ttf b/app/admin/src/styles/fonts/ionicons.ttf similarity index 100% rename from 04_Web_Admin/src/styles/fonts/ionicons.ttf rename to app/admin/src/styles/fonts/ionicons.ttf diff --git a/04_Web_Admin/src/styles/fonts/ionicons.woff b/app/admin/src/styles/fonts/ionicons.woff similarity index 100% rename from 04_Web_Admin/src/styles/fonts/ionicons.woff rename to app/admin/src/styles/fonts/ionicons.woff diff --git a/04_Web_Admin/src/styles/loading.less b/app/admin/src/styles/loading.less similarity index 100% rename from 04_Web_Admin/src/styles/loading.less rename to app/admin/src/styles/loading.less diff --git a/04_Web_Admin/src/styles/login_bg.jpg b/app/admin/src/styles/login_bg.jpg similarity index 100% rename from 04_Web_Admin/src/styles/login_bg.jpg rename to app/admin/src/styles/login_bg.jpg diff --git a/04_Web_Admin/src/styles/reset-iview-style.less b/app/admin/src/styles/reset-iview-style.less similarity index 100% rename from 04_Web_Admin/src/styles/reset-iview-style.less rename to app/admin/src/styles/reset-iview-style.less diff --git a/04_Web_Admin/src/template/index.ejs b/app/admin/src/template/index.ejs similarity index 100% rename from 04_Web_Admin/src/template/index.ejs rename to app/admin/src/template/index.ejs diff --git a/04_Web_Admin/src/vendors/vendors.base.js b/app/admin/src/vendors/vendors.base.js similarity index 100% rename from 04_Web_Admin/src/vendors/vendors.base.js rename to app/admin/src/vendors/vendors.base.js diff --git a/04_Web_Admin/src/vendors/vendors.exten.js b/app/admin/src/vendors/vendors.exten.js similarity index 100% rename from 04_Web_Admin/src/vendors/vendors.exten.js rename to app/admin/src/vendors/vendors.exten.js diff --git a/04_Web_Admin/src/views/Main.vue b/app/admin/src/views/Main.vue similarity index 100% rename from 04_Web_Admin/src/views/Main.vue rename to app/admin/src/views/Main.vue diff --git a/04_Web_Admin/src/views/activity/Activity.vue b/app/admin/src/views/activity/Activity.vue similarity index 100% rename from 04_Web_Admin/src/views/activity/Activity.vue rename to app/admin/src/views/activity/Activity.vue diff --git a/04_Web_Admin/src/views/activity/AddActivity.vue b/app/admin/src/views/activity/AddActivity.vue similarity index 100% rename from 04_Web_Admin/src/views/activity/AddActivity.vue rename to app/admin/src/views/activity/AddActivity.vue diff --git a/04_Web_Admin/src/views/bond/BondManage.vue b/app/admin/src/views/bond/BondManage.vue similarity index 100% rename from 04_Web_Admin/src/views/bond/BondManage.vue rename to app/admin/src/views/bond/BondManage.vue diff --git a/04_Web_Admin/src/views/content/AddAdvertisement.vue b/app/admin/src/views/content/AddAdvertisement.vue similarity index 100% rename from 04_Web_Admin/src/views/content/AddAdvertisement.vue rename to app/admin/src/views/content/AddAdvertisement.vue diff --git a/04_Web_Admin/src/views/content/AddAnnouncement.vue b/app/admin/src/views/content/AddAnnouncement.vue similarity index 100% rename from 04_Web_Admin/src/views/content/AddAnnouncement.vue rename to app/admin/src/views/content/AddAnnouncement.vue diff --git a/04_Web_Admin/src/views/content/AddHelpManage.vue b/app/admin/src/views/content/AddHelpManage.vue similarity index 100% rename from 04_Web_Admin/src/views/content/AddHelpManage.vue rename to app/admin/src/views/content/AddHelpManage.vue diff --git a/04_Web_Admin/src/views/content/AnnounceManage.vue b/app/admin/src/views/content/AnnounceManage.vue similarity index 100% rename from 04_Web_Admin/src/views/content/AnnounceManage.vue rename to app/admin/src/views/content/AnnounceManage.vue diff --git a/04_Web_Admin/src/views/content/HelpManage.vue b/app/admin/src/views/content/HelpManage.vue similarity index 100% rename from 04_Web_Admin/src/views/content/HelpManage.vue rename to app/admin/src/views/content/HelpManage.vue diff --git a/04_Web_Admin/src/views/ctc/acceptor.vue b/app/admin/src/views/ctc/acceptor.vue similarity index 100% rename from 04_Web_Admin/src/views/ctc/acceptor.vue rename to app/admin/src/views/ctc/acceptor.vue diff --git a/04_Web_Admin/src/views/ctc/list.vue b/app/admin/src/views/ctc/list.vue similarity index 100% rename from 04_Web_Admin/src/views/ctc/list.vue rename to app/admin/src/views/ctc/list.vue diff --git a/04_Web_Admin/src/views/error-page/403.less b/app/admin/src/views/error-page/403.less similarity index 100% rename from 04_Web_Admin/src/views/error-page/403.less rename to app/admin/src/views/error-page/403.less diff --git a/04_Web_Admin/src/views/error-page/403.vue b/app/admin/src/views/error-page/403.vue similarity index 100% rename from 04_Web_Admin/src/views/error-page/403.vue rename to app/admin/src/views/error-page/403.vue diff --git a/04_Web_Admin/src/views/error-page/404.less b/app/admin/src/views/error-page/404.less similarity index 100% rename from 04_Web_Admin/src/views/error-page/404.less rename to app/admin/src/views/error-page/404.less diff --git a/04_Web_Admin/src/views/error-page/404.vue b/app/admin/src/views/error-page/404.vue similarity index 100% rename from 04_Web_Admin/src/views/error-page/404.vue rename to app/admin/src/views/error-page/404.vue diff --git a/04_Web_Admin/src/views/error-page/500.less b/app/admin/src/views/error-page/500.less similarity index 100% rename from 04_Web_Admin/src/views/error-page/500.less rename to app/admin/src/views/error-page/500.less diff --git a/04_Web_Admin/src/views/error-page/500.vue b/app/admin/src/views/error-page/500.vue similarity index 100% rename from 04_Web_Admin/src/views/error-page/500.vue rename to app/admin/src/views/error-page/500.vue diff --git a/04_Web_Admin/src/views/error-page/error-page.less b/app/admin/src/views/error-page/error-page.less similarity index 100% rename from 04_Web_Admin/src/views/error-page/error-page.less rename to app/admin/src/views/error-page/error-page.less diff --git a/04_Web_Admin/src/views/error-page/error-page.vue b/app/admin/src/views/error-page/error-page.vue similarity index 100% rename from 04_Web_Admin/src/views/error-page/error-page.vue rename to app/admin/src/views/error-page/error-page.vue diff --git a/04_Web_Admin/src/views/exchange/Order.vue b/app/admin/src/views/exchange/Order.vue similarity index 100% rename from 04_Web_Admin/src/views/exchange/Order.vue rename to app/admin/src/views/exchange/Order.vue diff --git a/04_Web_Admin/src/views/exchange/OrderDetail.vue b/app/admin/src/views/exchange/OrderDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/exchange/OrderDetail.vue rename to app/admin/src/views/exchange/OrderDetail.vue diff --git a/04_Web_Admin/src/views/exchange/Setting.vue b/app/admin/src/views/exchange/Setting.vue similarity index 100% rename from 04_Web_Admin/src/views/exchange/Setting.vue rename to app/admin/src/views/exchange/Setting.vue diff --git a/04_Web_Admin/src/views/finance/AuditDetail.vue b/app/admin/src/views/finance/AuditDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/AuditDetail.vue rename to app/admin/src/views/finance/AuditDetail.vue diff --git a/04_Web_Admin/src/views/finance/ChargeCoinDetail.vue b/app/admin/src/views/finance/ChargeCoinDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/ChargeCoinDetail.vue rename to app/admin/src/views/finance/ChargeCoinDetail.vue diff --git a/04_Web_Admin/src/views/finance/FeeManage.vue b/app/admin/src/views/finance/FeeManage.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/FeeManage.vue rename to app/admin/src/views/finance/FeeManage.vue diff --git a/04_Web_Admin/src/views/finance/FinanceStatistic.vue b/app/admin/src/views/finance/FinanceStatistic.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/FinanceStatistic.vue rename to app/admin/src/views/finance/FinanceStatistic.vue diff --git a/04_Web_Admin/src/views/finance/OtcDetail.vue b/app/admin/src/views/finance/OtcDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/OtcDetail.vue rename to app/admin/src/views/finance/OtcDetail.vue diff --git a/04_Web_Admin/src/views/finance/TradeDetail.vue b/app/admin/src/views/finance/TradeDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/TradeDetail.vue rename to app/admin/src/views/finance/TradeDetail.vue diff --git a/04_Web_Admin/src/views/finance/WithdrawDetail.vue b/app/admin/src/views/finance/WithdrawDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/WithdrawDetail.vue rename to app/admin/src/views/finance/WithdrawDetail.vue diff --git a/04_Web_Admin/src/views/finance/WithdrawalsExamine.vue b/app/admin/src/views/finance/WithdrawalsExamine.vue similarity index 100% rename from 04_Web_Admin/src/views/finance/WithdrawalsExamine.vue rename to app/admin/src/views/finance/WithdrawalsExamine.vue diff --git a/04_Web_Admin/src/views/home/components/countUp.vue b/app/admin/src/views/home/components/countUp.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/countUp.vue rename to app/admin/src/views/home/components/countUp.vue diff --git a/04_Web_Admin/src/views/home/components/dataSourcePie.vue b/app/admin/src/views/home/components/dataSourcePie.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/dataSourcePie.vue rename to app/admin/src/views/home/components/dataSourcePie.vue diff --git a/04_Web_Admin/src/views/home/components/inforCard.vue b/app/admin/src/views/home/components/inforCard.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/inforCard.vue rename to app/admin/src/views/home/components/inforCard.vue diff --git a/04_Web_Admin/src/views/home/components/map.vue b/app/admin/src/views/home/components/map.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/map.vue rename to app/admin/src/views/home/components/map.vue diff --git a/04_Web_Admin/src/views/home/components/mapDataTable.vue b/app/admin/src/views/home/components/mapDataTable.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/mapDataTable.vue rename to app/admin/src/views/home/components/mapDataTable.vue diff --git a/04_Web_Admin/src/views/home/components/serviceRequests.vue b/app/admin/src/views/home/components/serviceRequests.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/serviceRequests.vue rename to app/admin/src/views/home/components/serviceRequests.vue diff --git a/04_Web_Admin/src/views/home/components/styles/infor-card.less b/app/admin/src/views/home/components/styles/infor-card.less similarity index 100% rename from 04_Web_Admin/src/views/home/components/styles/infor-card.less rename to app/admin/src/views/home/components/styles/infor-card.less diff --git a/04_Web_Admin/src/views/home/components/styles/to-do-list-item.less b/app/admin/src/views/home/components/styles/to-do-list-item.less similarity index 100% rename from 04_Web_Admin/src/views/home/components/styles/to-do-list-item.less rename to app/admin/src/views/home/components/styles/to-do-list-item.less diff --git a/04_Web_Admin/src/views/home/components/toDoListItem.vue b/app/admin/src/views/home/components/toDoListItem.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/toDoListItem.vue rename to app/admin/src/views/home/components/toDoListItem.vue diff --git a/04_Web_Admin/src/views/home/components/userFlow.vue b/app/admin/src/views/home/components/userFlow.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/userFlow.vue rename to app/admin/src/views/home/components/userFlow.vue diff --git a/04_Web_Admin/src/views/home/components/visiteVolume.vue b/app/admin/src/views/home/components/visiteVolume.vue similarity index 100% rename from 04_Web_Admin/src/views/home/components/visiteVolume.vue rename to app/admin/src/views/home/components/visiteVolume.vue diff --git a/04_Web_Admin/src/views/home/home.less b/app/admin/src/views/home/home.less similarity index 100% rename from 04_Web_Admin/src/views/home/home.less rename to app/admin/src/views/home/home.less diff --git a/04_Web_Admin/src/views/home/home.vue b/app/admin/src/views/home/home.vue similarity index 100% rename from 04_Web_Admin/src/views/home/home.vue rename to app/admin/src/views/home/home.vue diff --git a/04_Web_Admin/src/views/home/map-data/china.json b/app/admin/src/views/home/map-data/china.json similarity index 100% rename from 04_Web_Admin/src/views/home/map-data/china.json rename to app/admin/src/views/home/map-data/china.json diff --git a/04_Web_Admin/src/views/home/map-data/get-city-value.js b/app/admin/src/views/home/map-data/get-city-value.js similarity index 100% rename from 04_Web_Admin/src/views/home/map-data/get-city-value.js rename to app/admin/src/views/home/map-data/get-city-value.js diff --git a/04_Web_Admin/src/views/home/map-data/get-geography-value.js b/app/admin/src/views/home/map-data/get-geography-value.js similarity index 100% rename from 04_Web_Admin/src/views/home/map-data/get-geography-value.js rename to app/admin/src/views/home/map-data/get-geography-value.js diff --git a/04_Web_Admin/src/views/home/map-data/get-style-json.js b/app/admin/src/views/home/map-data/get-style-json.js similarity index 100% rename from 04_Web_Admin/src/views/home/map-data/get-style-json.js rename to app/admin/src/views/home/map-data/get-style-json.js diff --git a/04_Web_Admin/src/views/invitation/InvitationRank.vue b/app/admin/src/views/invitation/InvitationRank.vue similarity index 100% rename from 04_Web_Admin/src/views/invitation/InvitationRank.vue rename to app/admin/src/views/invitation/InvitationRank.vue diff --git a/04_Web_Admin/src/views/invitation/InvitationRecord.vue b/app/admin/src/views/invitation/InvitationRecord.vue similarity index 100% rename from 04_Web_Admin/src/views/invitation/InvitationRecord.vue rename to app/admin/src/views/invitation/InvitationRecord.vue diff --git a/04_Web_Admin/src/views/invitation/SecondRecord.vue b/app/admin/src/views/invitation/SecondRecord.vue similarity index 100% rename from 04_Web_Admin/src/views/invitation/SecondRecord.vue rename to app/admin/src/views/invitation/SecondRecord.vue diff --git a/04_Web_Admin/src/views/login.less b/app/admin/src/views/login.less similarity index 100% rename from 04_Web_Admin/src/views/login.less rename to app/admin/src/views/login.less diff --git a/04_Web_Admin/src/views/login.vue b/app/admin/src/views/login.vue similarity index 100% rename from 04_Web_Admin/src/views/login.vue rename to app/admin/src/views/login.vue diff --git a/04_Web_Admin/src/views/main-components/breadcrumb-nav.vue b/app/admin/src/views/main-components/breadcrumb-nav.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/breadcrumb-nav.vue rename to app/admin/src/views/main-components/breadcrumb-nav.vue diff --git a/04_Web_Admin/src/views/main-components/fullscreen.vue b/app/admin/src/views/main-components/fullscreen.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/fullscreen.vue rename to app/admin/src/views/main-components/fullscreen.vue diff --git a/04_Web_Admin/src/views/main-components/lockscreen/components/locking-page.vue b/app/admin/src/views/main-components/lockscreen/components/locking-page.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/lockscreen/components/locking-page.vue rename to app/admin/src/views/main-components/lockscreen/components/locking-page.vue diff --git a/04_Web_Admin/src/views/main-components/lockscreen/components/unlock.vue b/app/admin/src/views/main-components/lockscreen/components/unlock.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/lockscreen/components/unlock.vue rename to app/admin/src/views/main-components/lockscreen/components/unlock.vue diff --git a/04_Web_Admin/src/views/main-components/lockscreen/lockscreen.vue b/app/admin/src/views/main-components/lockscreen/lockscreen.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/lockscreen/lockscreen.vue rename to app/admin/src/views/main-components/lockscreen/lockscreen.vue diff --git a/04_Web_Admin/src/views/main-components/lockscreen/styles/unlock.less b/app/admin/src/views/main-components/lockscreen/styles/unlock.less similarity index 100% rename from 04_Web_Admin/src/views/main-components/lockscreen/styles/unlock.less rename to app/admin/src/views/main-components/lockscreen/styles/unlock.less diff --git a/04_Web_Admin/src/views/main-components/message-tip.vue b/app/admin/src/views/main-components/message-tip.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/message-tip.vue rename to app/admin/src/views/main-components/message-tip.vue diff --git a/04_Web_Admin/src/views/main-components/shrinkable-menu/components/sidebarMenu.vue b/app/admin/src/views/main-components/shrinkable-menu/components/sidebarMenu.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/shrinkable-menu/components/sidebarMenu.vue rename to app/admin/src/views/main-components/shrinkable-menu/components/sidebarMenu.vue diff --git a/04_Web_Admin/src/views/main-components/shrinkable-menu/components/sidebarMenuShrink.vue b/app/admin/src/views/main-components/shrinkable-menu/components/sidebarMenuShrink.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/shrinkable-menu/components/sidebarMenuShrink.vue rename to app/admin/src/views/main-components/shrinkable-menu/components/sidebarMenuShrink.vue diff --git a/04_Web_Admin/src/views/main-components/shrinkable-menu/shrinkable-menu.vue b/app/admin/src/views/main-components/shrinkable-menu/shrinkable-menu.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/shrinkable-menu/shrinkable-menu.vue rename to app/admin/src/views/main-components/shrinkable-menu/shrinkable-menu.vue diff --git a/04_Web_Admin/src/views/main-components/shrinkable-menu/styles/menu.less b/app/admin/src/views/main-components/shrinkable-menu/styles/menu.less similarity index 100% rename from 04_Web_Admin/src/views/main-components/shrinkable-menu/styles/menu.less rename to app/admin/src/views/main-components/shrinkable-menu/styles/menu.less diff --git a/04_Web_Admin/src/views/main-components/tags-page-opened.vue b/app/admin/src/views/main-components/tags-page-opened.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/tags-page-opened.vue rename to app/admin/src/views/main-components/tags-page-opened.vue diff --git a/04_Web_Admin/src/views/main-components/theme-switch/theme-switch.vue b/app/admin/src/views/main-components/theme-switch/theme-switch.vue similarity index 100% rename from 04_Web_Admin/src/views/main-components/theme-switch/theme-switch.vue rename to app/admin/src/views/main-components/theme-switch/theme-switch.vue diff --git a/04_Web_Admin/src/views/main-components/theme-switch/theme/g.css b/app/admin/src/views/main-components/theme-switch/theme/g.css similarity index 100% rename from 04_Web_Admin/src/views/main-components/theme-switch/theme/g.css rename to app/admin/src/views/main-components/theme-switch/theme/g.css diff --git a/04_Web_Admin/src/views/main-components/theme-switch/theme/r.css b/app/admin/src/views/main-components/theme-switch/theme/r.css similarity index 100% rename from 04_Web_Admin/src/views/main-components/theme-switch/theme/r.css rename to app/admin/src/views/main-components/theme-switch/theme/r.css diff --git a/04_Web_Admin/src/views/main-components/theme-switch/theme/y.css b/app/admin/src/views/main-components/theme-switch/theme/y.css similarity index 100% rename from 04_Web_Admin/src/views/main-components/theme-switch/theme/y.css rename to app/admin/src/views/main-components/theme-switch/theme/y.css diff --git a/04_Web_Admin/src/views/main.less b/app/admin/src/views/main.less similarity index 100% rename from 04_Web_Admin/src/views/main.less rename to app/admin/src/views/main.less diff --git a/04_Web_Admin/src/views/member/Authenticate.vue b/app/admin/src/views/member/Authenticate.vue similarity index 100% rename from 04_Web_Admin/src/views/member/Authenticate.vue rename to app/admin/src/views/member/Authenticate.vue diff --git a/04_Web_Admin/src/views/member/AuthenticateDetail.vue b/app/admin/src/views/member/AuthenticateDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/member/AuthenticateDetail.vue rename to app/admin/src/views/member/AuthenticateDetail.vue diff --git a/04_Web_Admin/src/views/member/DrawList.vue b/app/admin/src/views/member/DrawList.vue similarity index 100% rename from 04_Web_Admin/src/views/member/DrawList.vue rename to app/admin/src/views/member/DrawList.vue diff --git a/04_Web_Admin/src/views/member/MemberAsset.vue b/app/admin/src/views/member/MemberAsset.vue similarity index 100% rename from 04_Web_Admin/src/views/member/MemberAsset.vue rename to app/admin/src/views/member/MemberAsset.vue diff --git a/04_Web_Admin/src/views/member/MemberDetail.vue b/app/admin/src/views/member/MemberDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/member/MemberDetail.vue rename to app/admin/src/views/member/MemberDetail.vue diff --git a/04_Web_Admin/src/views/member/Parnter.vue b/app/admin/src/views/member/Parnter.vue similarity index 100% rename from 04_Web_Admin/src/views/member/Parnter.vue rename to app/admin/src/views/member/Parnter.vue diff --git a/04_Web_Admin/src/views/member/RechargeList.vue b/app/admin/src/views/member/RechargeList.vue similarity index 100% rename from 04_Web_Admin/src/views/member/RechargeList.vue rename to app/admin/src/views/member/RechargeList.vue diff --git a/04_Web_Admin/src/views/member/memberManage.vue b/app/admin/src/views/member/memberManage.vue similarity index 100% rename from 04_Web_Admin/src/views/member/memberManage.vue rename to app/admin/src/views/member/memberManage.vue diff --git a/04_Web_Admin/src/views/otc/AdvertiseDetail.vue b/app/admin/src/views/otc/AdvertiseDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/AdvertiseDetail.vue rename to app/admin/src/views/otc/AdvertiseDetail.vue diff --git a/04_Web_Admin/src/views/otc/AppealDetail.vue b/app/admin/src/views/otc/AppealDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/AppealDetail.vue rename to app/admin/src/views/otc/AppealDetail.vue diff --git a/04_Web_Admin/src/views/otc/AppealManage.vue b/app/admin/src/views/otc/AppealManage.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/AppealManage.vue rename to app/admin/src/views/otc/AppealManage.vue diff --git a/04_Web_Admin/src/views/otc/BusinessAudit.vue b/app/admin/src/views/otc/BusinessAudit.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/BusinessAudit.vue rename to app/admin/src/views/otc/BusinessAudit.vue diff --git a/04_Web_Admin/src/views/otc/BusinessDetail.vue b/app/admin/src/views/otc/BusinessDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/BusinessDetail.vue rename to app/admin/src/views/otc/BusinessDetail.vue diff --git a/04_Web_Admin/src/views/otc/ExitBond.vue b/app/admin/src/views/otc/ExitBond.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/ExitBond.vue rename to app/admin/src/views/otc/ExitBond.vue diff --git a/04_Web_Admin/src/views/otc/ExitBondDetail.vue b/app/admin/src/views/otc/ExitBondDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/ExitBondDetail.vue rename to app/admin/src/views/otc/ExitBondDetail.vue diff --git a/04_Web_Admin/src/views/otc/adManage.vue b/app/admin/src/views/otc/adManage.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/adManage.vue rename to app/admin/src/views/otc/adManage.vue diff --git a/04_Web_Admin/src/views/otc/coinManage.vue b/app/admin/src/views/otc/coinManage.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/coinManage.vue rename to app/admin/src/views/otc/coinManage.vue diff --git a/04_Web_Admin/src/views/otc/orderManage.vue b/app/admin/src/views/otc/orderManage.vue similarity index 100% rename from 04_Web_Admin/src/views/otc/orderManage.vue rename to app/admin/src/views/otc/orderManage.vue diff --git a/04_Web_Admin/src/views/own-space/message.vue b/app/admin/src/views/own-space/message.vue similarity index 100% rename from 04_Web_Admin/src/views/own-space/message.vue rename to app/admin/src/views/own-space/message.vue diff --git a/04_Web_Admin/src/views/own-space/own-space.vue b/app/admin/src/views/own-space/own-space.vue similarity index 100% rename from 04_Web_Admin/src/views/own-space/own-space.vue rename to app/admin/src/views/own-space/own-space.vue diff --git a/04_Web_Admin/src/views/redenvelope/AddRedEnvelope.vue b/app/admin/src/views/redenvelope/AddRedEnvelope.vue similarity index 100% rename from 04_Web_Admin/src/views/redenvelope/AddRedEnvelope.vue rename to app/admin/src/views/redenvelope/AddRedEnvelope.vue diff --git a/04_Web_Admin/src/views/redenvelope/RedEnvelope.vue b/app/admin/src/views/redenvelope/RedEnvelope.vue similarity index 100% rename from 04_Web_Admin/src/views/redenvelope/RedEnvelope.vue rename to app/admin/src/views/redenvelope/RedEnvelope.vue diff --git a/04_Web_Admin/src/views/system/AccessLog.vue b/app/admin/src/views/system/AccessLog.vue similarity index 100% rename from 04_Web_Admin/src/views/system/AccessLog.vue rename to app/admin/src/views/system/AccessLog.vue diff --git a/04_Web_Admin/src/views/system/AddAuditEmployee.vue b/app/admin/src/views/system/AddAuditEmployee.vue similarity index 100% rename from 04_Web_Admin/src/views/system/AddAuditEmployee.vue rename to app/admin/src/views/system/AddAuditEmployee.vue diff --git a/04_Web_Admin/src/views/system/AppReversion.vue b/app/admin/src/views/system/AppReversion.vue similarity index 100% rename from 04_Web_Admin/src/views/system/AppReversion.vue rename to app/admin/src/views/system/AppReversion.vue diff --git a/04_Web_Admin/src/views/system/Coin.vue b/app/admin/src/views/system/Coin.vue similarity index 100% rename from 04_Web_Admin/src/views/system/Coin.vue rename to app/admin/src/views/system/Coin.vue diff --git a/04_Web_Admin/src/views/system/CoinTransferDetail.vue b/app/admin/src/views/system/CoinTransferDetail.vue similarity index 100% rename from 04_Web_Admin/src/views/system/CoinTransferDetail.vue rename to app/admin/src/views/system/CoinTransferDetail.vue diff --git a/04_Web_Admin/src/views/system/Department.vue b/app/admin/src/views/system/Department.vue similarity index 100% rename from 04_Web_Admin/src/views/system/Department.vue rename to app/admin/src/views/system/Department.vue diff --git a/04_Web_Admin/src/views/system/Dictionary.vue b/app/admin/src/views/system/Dictionary.vue similarity index 100% rename from 04_Web_Admin/src/views/system/Dictionary.vue rename to app/admin/src/views/system/Dictionary.vue diff --git a/04_Web_Admin/src/views/system/Employee.vue b/app/admin/src/views/system/Employee.vue similarity index 100% rename from 04_Web_Admin/src/views/system/Employee.vue rename to app/admin/src/views/system/Employee.vue diff --git a/04_Web_Admin/src/views/system/Permission.vue b/app/admin/src/views/system/Permission.vue similarity index 100% rename from 04_Web_Admin/src/views/system/Permission.vue rename to app/admin/src/views/system/Permission.vue diff --git a/04_Web_Admin/src/views/system/Role.vue b/app/admin/src/views/system/Role.vue similarity index 100% rename from 04_Web_Admin/src/views/system/Role.vue rename to app/admin/src/views/system/Role.vue diff --git a/04_Web_Admin/src/views/user/PersonalCenter.vue b/app/admin/src/views/user/PersonalCenter.vue similarity index 100% rename from 04_Web_Admin/src/views/user/PersonalCenter.vue rename to app/admin/src/views/user/PersonalCenter.vue diff --git "a/04_Web_Admin/\345\256\211\350\243\205\346\211\213\345\206\214.txt" "b/app/admin/\345\256\211\350\243\205\346\211\213\345\206\214.txt" similarity index 100% rename from "04_Web_Admin/\345\256\211\350\243\205\346\211\213\345\206\214.txt" rename to "app/admin/\345\256\211\350\243\205\346\211\213\345\206\214.txt" diff --git a/02_App_Android/.keep b/app/android/.keep similarity index 100% rename from 02_App_Android/.keep rename to app/android/.keep diff --git a/02_App_Android/README.md b/app/android/README.md similarity index 100% rename from 02_App_Android/README.md rename to app/android/README.md diff --git a/03_APP_IOS/.keep b/app/iOS/.keep similarity index 100% rename from 03_APP_IOS/.keep rename to app/iOS/.keep diff --git a/03_APP_IOS/README.md b/app/iOS/README.md similarity index 100% rename from 03_APP_IOS/README.md rename to app/iOS/README.md diff --git a/05_Web_Front/.gitignore b/app/web/.gitignore similarity index 100% rename from 05_Web_Front/.gitignore rename to app/web/.gitignore diff --git a/05_Web_Front/LICENSE b/app/web/LICENSE similarity index 100% rename from 05_Web_Front/LICENSE rename to app/web/LICENSE diff --git a/05_Web_Front/README.md b/app/web/README.md similarity index 100% rename from 05_Web_Front/README.md rename to app/web/README.md diff --git a/05_Web_Front/build/build.js b/app/web/build/build.js similarity index 100% rename from 05_Web_Front/build/build.js rename to app/web/build/build.js diff --git a/05_Web_Front/build/check-versions.js b/app/web/build/check-versions.js similarity index 100% rename from 05_Web_Front/build/check-versions.js rename to app/web/build/check-versions.js diff --git a/05_Web_Front/build/logo.png b/app/web/build/logo.png similarity index 100% rename from 05_Web_Front/build/logo.png rename to app/web/build/logo.png diff --git a/05_Web_Front/build/utils.js b/app/web/build/utils.js similarity index 100% rename from 05_Web_Front/build/utils.js rename to app/web/build/utils.js diff --git a/05_Web_Front/build/vue-loader.conf.js b/app/web/build/vue-loader.conf.js similarity index 100% rename from 05_Web_Front/build/vue-loader.conf.js rename to app/web/build/vue-loader.conf.js diff --git a/05_Web_Front/build/webpack.base.conf.js b/app/web/build/webpack.base.conf.js similarity index 100% rename from 05_Web_Front/build/webpack.base.conf.js rename to app/web/build/webpack.base.conf.js diff --git a/05_Web_Front/build/webpack.dev.conf.js b/app/web/build/webpack.dev.conf.js similarity index 100% rename from 05_Web_Front/build/webpack.dev.conf.js rename to app/web/build/webpack.dev.conf.js diff --git a/05_Web_Front/build/webpack.prod.conf.js b/app/web/build/webpack.prod.conf.js similarity index 100% rename from 05_Web_Front/build/webpack.prod.conf.js rename to app/web/build/webpack.prod.conf.js diff --git a/05_Web_Front/config/dev.env.js b/app/web/config/dev.env.js similarity index 100% rename from 05_Web_Front/config/dev.env.js rename to app/web/config/dev.env.js diff --git a/05_Web_Front/config/index.js b/app/web/config/index.js similarity index 100% rename from 05_Web_Front/config/index.js rename to app/web/config/index.js diff --git a/05_Web_Front/config/prod.env.js b/app/web/config/prod.env.js similarity index 100% rename from 05_Web_Front/config/prod.env.js rename to app/web/config/prod.env.js diff --git a/05_Web_Front/config/test.env.js b/app/web/config/test.env.js similarity index 100% rename from 05_Web_Front/config/test.env.js rename to app/web/config/test.env.js diff --git a/05_Web_Front/favicon.ico b/app/web/favicon.ico similarity index 100% rename from 05_Web_Front/favicon.ico rename to app/web/favicon.ico diff --git a/05_Web_Front/index.html b/app/web/index.html similarity index 100% rename from 05_Web_Front/index.html rename to app/web/index.html diff --git a/05_Web_Front/package-lock.json b/app/web/package-lock.json similarity index 100% rename from 05_Web_Front/package-lock.json rename to app/web/package-lock.json diff --git a/05_Web_Front/package.json b/app/web/package.json similarity index 100% rename from 05_Web_Front/package.json rename to app/web/package.json diff --git a/05_Web_Front/postcss.config.js b/app/web/postcss.config.js similarity index 100% rename from 05_Web_Front/postcss.config.js rename to app/web/postcss.config.js diff --git a/05_Web_Front/src/App.vue b/app/web/src/App.vue similarity index 100% rename from 05_Web_Front/src/App.vue rename to app/web/src/App.vue diff --git a/05_Web_Front/src/assets/audio/notice.wav b/app/web/src/assets/audio/notice.wav similarity index 100% rename from 05_Web_Front/src/assets/audio/notice.wav rename to app/web/src/assets/audio/notice.wav diff --git a/05_Web_Front/src/assets/css/exchange.css b/app/web/src/assets/css/exchange.css similarity index 100% rename from 05_Web_Front/src/assets/css/exchange.css rename to app/web/src/assets/css/exchange.css diff --git a/05_Web_Front/src/assets/css/fonts/ionicons.ttf b/app/web/src/assets/css/fonts/ionicons.ttf similarity index 100% rename from 05_Web_Front/src/assets/css/fonts/ionicons.ttf rename to app/web/src/assets/css/fonts/ionicons.ttf diff --git a/05_Web_Front/src/assets/css/theme.less b/app/web/src/assets/css/theme.less similarity index 100% rename from 05_Web_Front/src/assets/css/theme.less rename to app/web/src/assets/css/theme.less diff --git a/05_Web_Front/src/assets/fonts/mui.ttf b/app/web/src/assets/fonts/mui.ttf similarity index 100% rename from 05_Web_Front/src/assets/fonts/mui.ttf rename to app/web/src/assets/fonts/mui.ttf diff --git a/05_Web_Front/src/assets/icons/iconfont.css b/app/web/src/assets/icons/iconfont.css similarity index 100% rename from 05_Web_Front/src/assets/icons/iconfont.css rename to app/web/src/assets/icons/iconfont.css diff --git a/05_Web_Front/src/assets/icons/iconfont.eot b/app/web/src/assets/icons/iconfont.eot similarity index 100% rename from 05_Web_Front/src/assets/icons/iconfont.eot rename to app/web/src/assets/icons/iconfont.eot diff --git a/05_Web_Front/src/assets/icons/iconfont.svg b/app/web/src/assets/icons/iconfont.svg similarity index 100% rename from 05_Web_Front/src/assets/icons/iconfont.svg rename to app/web/src/assets/icons/iconfont.svg diff --git a/05_Web_Front/src/assets/icons/iconfont.ttf b/app/web/src/assets/icons/iconfont.ttf similarity index 100% rename from 05_Web_Front/src/assets/icons/iconfont.ttf rename to app/web/src/assets/icons/iconfont.ttf diff --git a/05_Web_Front/src/assets/icons/iconfont.woff b/app/web/src/assets/icons/iconfont.woff similarity index 100% rename from 05_Web_Front/src/assets/icons/iconfont.woff rename to app/web/src/assets/icons/iconfont.woff diff --git a/05_Web_Front/src/assets/icons/iconfont.woff2 b/app/web/src/assets/icons/iconfont.woff2 similarity index 100% rename from 05_Web_Front/src/assets/icons/iconfont.woff2 rename to app/web/src/assets/icons/iconfont.woff2 diff --git a/05_Web_Front/src/assets/images/HandCardImg.png b/app/web/src/assets/images/HandCardImg.png similarity index 100% rename from 05_Web_Front/src/assets/images/HandCardImg.png rename to app/web/src/assets/images/HandCardImg.png diff --git a/05_Web_Front/src/assets/images/activity-bg.jpg b/app/web/src/assets/images/activity-bg.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/activity-bg.jpg rename to app/web/src/assets/images/activity-bg.jpg diff --git a/05_Web_Front/src/assets/images/activity_mobile.jpg b/app/web/src/assets/images/activity_mobile.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/activity_mobile.jpg rename to app/web/src/assets/images/activity_mobile.jpg diff --git a/05_Web_Front/src/assets/images/alipay.png b/app/web/src/assets/images/alipay.png similarity index 100% rename from 05_Web_Front/src/assets/images/alipay.png rename to app/web/src/assets/images/alipay.png diff --git a/05_Web_Front/src/assets/images/andraio.png b/app/web/src/assets/images/andraio.png similarity index 100% rename from 05_Web_Front/src/assets/images/andraio.png rename to app/web/src/assets/images/andraio.png diff --git a/05_Web_Front/src/assets/images/app-download.jpg b/app/web/src/assets/images/app-download.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/app-download.jpg rename to app/web/src/assets/images/app-download.jpg diff --git a/05_Web_Front/src/assets/images/app-download.png b/app/web/src/assets/images/app-download.png similarity index 100% rename from 05_Web_Front/src/assets/images/app-download.png rename to app/web/src/assets/images/app-download.png diff --git a/05_Web_Front/src/assets/images/appdownload.png b/app/web/src/assets/images/appdownload.png similarity index 100% rename from 05_Web_Front/src/assets/images/appdownload.png rename to app/web/src/assets/images/appdownload.png diff --git a/05_Web_Front/src/assets/images/applogo.png b/app/web/src/assets/images/applogo.png similarity index 100% rename from 05_Web_Front/src/assets/images/applogo.png rename to app/web/src/assets/images/applogo.png diff --git a/05_Web_Front/src/assets/images/backCardImg.png b/app/web/src/assets/images/backCardImg.png similarity index 100% rename from 05_Web_Front/src/assets/images/backCardImg.png rename to app/web/src/assets/images/backCardImg.png diff --git a/05_Web_Front/src/assets/images/bannerbg.png b/app/web/src/assets/images/bannerbg.png similarity index 100% rename from 05_Web_Front/src/assets/images/bannerbg.png rename to app/web/src/assets/images/bannerbg.png diff --git a/05_Web_Front/src/assets/images/bannerbg2.png b/app/web/src/assets/images/bannerbg2.png similarity index 100% rename from 05_Web_Front/src/assets/images/bannerbg2.png rename to app/web/src/assets/images/bannerbg2.png diff --git a/05_Web_Front/src/assets/images/biyongqrcode.png b/app/web/src/assets/images/biyongqrcode.png similarity index 100% rename from 05_Web_Front/src/assets/images/biyongqrcode.png rename to app/web/src/assets/images/biyongqrcode.png diff --git a/05_Web_Front/src/assets/images/bizhong_logo.png b/app/web/src/assets/images/bizhong_logo.png similarity index 100% rename from 05_Web_Front/src/assets/images/bizhong_logo.png rename to app/web/src/assets/images/bizhong_logo.png diff --git a/05_Web_Front/src/assets/images/business_fee.png b/app/web/src/assets/images/business_fee.png similarity index 100% rename from 05_Web_Front/src/assets/images/business_fee.png rename to app/web/src/assets/images/business_fee.png diff --git a/05_Web_Front/src/assets/images/business_service.png b/app/web/src/assets/images/business_service.png similarity index 100% rename from 05_Web_Front/src/assets/images/business_service.png rename to app/web/src/assets/images/business_service.png diff --git a/05_Web_Front/src/assets/images/business_show.png b/app/web/src/assets/images/business_show.png similarity index 100% rename from 05_Web_Front/src/assets/images/business_show.png rename to app/web/src/assets/images/business_show.png diff --git a/05_Web_Front/src/assets/images/business_v.png b/app/web/src/assets/images/business_v.png similarity index 100% rename from 05_Web_Front/src/assets/images/business_v.png rename to app/web/src/assets/images/business_v.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_fenhong.png b/app/web/src/assets/images/bzb/bzb_fenhong.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_fenhong.png rename to app/web/src/assets/images/bzb/bzb_fenhong.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_gengduo.png b/app/web/src/assets/images/bzb/bzb_gengduo.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_gengduo.png rename to app/web/src/assets/images/bzb/bzb_gengduo.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_juece.png b/app/web/src/assets/images/bzb/bzb_juece.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_juece.png rename to app/web/src/assets/images/bzb/bzb_juece.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_rengou.png b/app/web/src/assets/images/bzb/bzb_rengou.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_rengou.png rename to app/web/src/assets/images/bzb/bzb_rengou.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_shangbi.png b/app/web/src/assets/images/bzb/bzb_shangbi.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_shangbi.png rename to app/web/src/assets/images/bzb/bzb_shangbi.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_toupiao.png b/app/web/src/assets/images/bzb/bzb_toupiao.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_toupiao.png rename to app/web/src/assets/images/bzb/bzb_toupiao.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_zhekou.png b/app/web/src/assets/images/bzb/bzb_zhekou.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_zhekou.png rename to app/web/src/assets/images/bzb/bzb_zhekou.png diff --git a/05_Web_Front/src/assets/images/bzb/bzb_zhiqing.png b/app/web/src/assets/images/bzb/bzb_zhiqing.png similarity index 100% rename from 05_Web_Front/src/assets/images/bzb/bzb_zhiqing.png rename to app/web/src/assets/images/bzb/bzb_zhiqing.png diff --git a/05_Web_Front/src/assets/images/completed.png b/app/web/src/assets/images/completed.png similarity index 100% rename from 05_Web_Front/src/assets/images/completed.png rename to app/web/src/assets/images/completed.png diff --git a/05_Web_Front/src/assets/images/copycode.png b/app/web/src/assets/images/copycode.png similarity index 100% rename from 05_Web_Front/src/assets/images/copycode.png rename to app/web/src/assets/images/copycode.png diff --git a/05_Web_Front/src/assets/images/ctc-bg.jpg b/app/web/src/assets/images/ctc-bg.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/ctc-bg.jpg rename to app/web/src/assets/images/ctc-bg.jpg diff --git a/05_Web_Front/src/assets/images/downloadlogo.png b/app/web/src/assets/images/downloadlogo.png similarity index 100% rename from 05_Web_Front/src/assets/images/downloadlogo.png rename to app/web/src/assets/images/downloadlogo.png diff --git a/05_Web_Front/src/assets/images/emptydata.png b/app/web/src/assets/images/emptydata.png similarity index 100% rename from 05_Web_Front/src/assets/images/emptydata.png rename to app/web/src/assets/images/emptydata.png diff --git a/05_Web_Front/src/assets/images/exchange/light-switch.png b/app/web/src/assets/images/exchange/light-switch.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/light-switch.png rename to app/web/src/assets/images/exchange/light-switch.png diff --git a/05_Web_Front/src/assets/images/exchange/mark-question.png b/app/web/src/assets/images/exchange/mark-question.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/mark-question.png rename to app/web/src/assets/images/exchange/mark-question.png diff --git a/05_Web_Front/src/assets/images/exchange/plate_all.png b/app/web/src/assets/images/exchange/plate_all.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/plate_all.png rename to app/web/src/assets/images/exchange/plate_all.png diff --git a/05_Web_Front/src/assets/images/exchange/plate_all_active.png b/app/web/src/assets/images/exchange/plate_all_active.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/plate_all_active.png rename to app/web/src/assets/images/exchange/plate_all_active.png diff --git a/05_Web_Front/src/assets/images/exchange/plate_green.png b/app/web/src/assets/images/exchange/plate_green.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/plate_green.png rename to app/web/src/assets/images/exchange/plate_green.png diff --git a/05_Web_Front/src/assets/images/exchange/plate_green_active.png b/app/web/src/assets/images/exchange/plate_green_active.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/plate_green_active.png rename to app/web/src/assets/images/exchange/plate_green_active.png diff --git a/05_Web_Front/src/assets/images/exchange/plate_red.png b/app/web/src/assets/images/exchange/plate_red.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/plate_red.png rename to app/web/src/assets/images/exchange/plate_red.png diff --git a/05_Web_Front/src/assets/images/exchange/plate_red_active.png b/app/web/src/assets/images/exchange/plate_red_active.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/plate_red_active.png rename to app/web/src/assets/images/exchange/plate_red_active.png diff --git a/05_Web_Front/src/assets/images/exchange/star-block.png b/app/web/src/assets/images/exchange/star-block.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/star-block.png rename to app/web/src/assets/images/exchange/star-block.png diff --git a/05_Web_Front/src/assets/images/exchange/star.png b/app/web/src/assets/images/exchange/star.png similarity index 100% rename from 05_Web_Front/src/assets/images/exchange/star.png rename to app/web/src/assets/images/exchange/star.png diff --git a/05_Web_Front/src/assets/images/feature_choose.png b/app/web/src/assets/images/feature_choose.png similarity index 100% rename from 05_Web_Front/src/assets/images/feature_choose.png rename to app/web/src/assets/images/feature_choose.png diff --git a/05_Web_Front/src/assets/images/feature_experience.png b/app/web/src/assets/images/feature_experience.png similarity index 100% rename from 05_Web_Front/src/assets/images/feature_experience.png rename to app/web/src/assets/images/feature_experience.png diff --git a/05_Web_Front/src/assets/images/feature_fast.png b/app/web/src/assets/images/feature_fast.png similarity index 100% rename from 05_Web_Front/src/assets/images/feature_fast.png rename to app/web/src/assets/images/feature_fast.png diff --git a/05_Web_Front/src/assets/images/feature_global.png b/app/web/src/assets/images/feature_global.png similarity index 100% rename from 05_Web_Front/src/assets/images/feature_global.png rename to app/web/src/assets/images/feature_global.png diff --git a/05_Web_Front/src/assets/images/feature_safe.png b/app/web/src/assets/images/feature_safe.png similarity index 100% rename from 05_Web_Front/src/assets/images/feature_safe.png rename to app/web/src/assets/images/feature_safe.png diff --git a/05_Web_Front/src/assets/images/fiat.png b/app/web/src/assets/images/fiat.png similarity index 100% rename from 05_Web_Front/src/assets/images/fiat.png rename to app/web/src/assets/images/fiat.png diff --git a/05_Web_Front/src/assets/images/frontCardImg.png b/app/web/src/assets/images/frontCardImg.png similarity index 100% rename from 05_Web_Front/src/assets/images/frontCardImg.png rename to app/web/src/assets/images/frontCardImg.png diff --git a/05_Web_Front/src/assets/images/help_banner.jpg b/app/web/src/assets/images/help_banner.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/help_banner.jpg rename to app/web/src/assets/images/help_banner.jpg diff --git a/05_Web_Front/src/assets/images/hot.png b/app/web/src/assets/images/hot.png similarity index 100% rename from 05_Web_Front/src/assets/images/hot.png rename to app/web/src/assets/images/hot.png diff --git a/05_Web_Front/src/assets/images/icon-tel.png b/app/web/src/assets/images/icon-tel.png similarity index 100% rename from 05_Web_Front/src/assets/images/icon-tel.png rename to app/web/src/assets/images/icon-tel.png diff --git a/05_Web_Front/src/assets/images/icon-top.png b/app/web/src/assets/images/icon-top.png similarity index 100% rename from 05_Web_Front/src/assets/images/icon-top.png rename to app/web/src/assets/images/icon-top.png diff --git a/05_Web_Front/src/assets/images/icon-top1.png b/app/web/src/assets/images/icon-top1.png similarity index 100% rename from 05_Web_Front/src/assets/images/icon-top1.png rename to app/web/src/assets/images/icon-top1.png diff --git a/05_Web_Front/src/assets/images/instant.png b/app/web/src/assets/images/instant.png similarity index 100% rename from 05_Web_Front/src/assets/images/instant.png rename to app/web/src/assets/images/instant.png diff --git a/05_Web_Front/src/assets/images/ios.png b/app/web/src/assets/images/ios.png similarity index 100% rename from 05_Web_Front/src/assets/images/ios.png rename to app/web/src/assets/images/ios.png diff --git a/05_Web_Front/src/assets/images/laba.png b/app/web/src/assets/images/laba.png similarity index 100% rename from 05_Web_Front/src/assets/images/laba.png rename to app/web/src/assets/images/laba.png diff --git a/05_Web_Front/src/assets/images/lang-en.png b/app/web/src/assets/images/lang-en.png similarity index 100% rename from 05_Web_Front/src/assets/images/lang-en.png rename to app/web/src/assets/images/lang-en.png diff --git a/05_Web_Front/src/assets/images/lang-zh.png b/app/web/src/assets/images/lang-zh.png similarity index 100% rename from 05_Web_Front/src/assets/images/lang-zh.png rename to app/web/src/assets/images/lang-zh.png diff --git a/05_Web_Front/src/assets/images/lightning-bg-en.png b/app/web/src/assets/images/lightning-bg-en.png similarity index 100% rename from 05_Web_Front/src/assets/images/lightning-bg-en.png rename to app/web/src/assets/images/lightning-bg-en.png diff --git a/05_Web_Front/src/assets/images/lightning-bg.png b/app/web/src/assets/images/lightning-bg.png similarity index 100% rename from 05_Web_Front/src/assets/images/lightning-bg.png rename to app/web/src/assets/images/lightning-bg.png diff --git a/05_Web_Front/src/assets/images/lightning-bg2-en.png b/app/web/src/assets/images/lightning-bg2-en.png similarity index 100% rename from 05_Web_Front/src/assets/images/lightning-bg2-en.png rename to app/web/src/assets/images/lightning-bg2-en.png diff --git a/05_Web_Front/src/assets/images/lightning-bg2.png b/app/web/src/assets/images/lightning-bg2.png similarity index 100% rename from 05_Web_Front/src/assets/images/lightning-bg2.png rename to app/web/src/assets/images/lightning-bg2.png diff --git a/05_Web_Front/src/assets/images/login_bg.png b/app/web/src/assets/images/login_bg.png similarity index 100% rename from 05_Web_Front/src/assets/images/login_bg.png rename to app/web/src/assets/images/login_bg.png diff --git a/05_Web_Front/src/assets/images/logo-bottom.png b/app/web/src/assets/images/logo-bottom.png similarity index 100% rename from 05_Web_Front/src/assets/images/logo-bottom.png rename to app/web/src/assets/images/logo-bottom.png diff --git a/05_Web_Front/src/assets/images/logo.png b/app/web/src/assets/images/logo.png similarity index 100% rename from 05_Web_Front/src/assets/images/logo.png rename to app/web/src/assets/images/logo.png diff --git a/05_Web_Front/src/assets/images/logout1.png b/app/web/src/assets/images/logout1.png similarity index 100% rename from 05_Web_Front/src/assets/images/logout1.png rename to app/web/src/assets/images/logout1.png diff --git a/05_Web_Front/src/assets/images/new_1.png b/app/web/src/assets/images/new_1.png similarity index 100% rename from 05_Web_Front/src/assets/images/new_1.png rename to app/web/src/assets/images/new_1.png diff --git a/05_Web_Front/src/assets/images/new_1cny.png b/app/web/src/assets/images/new_1cny.png similarity index 100% rename from 05_Web_Front/src/assets/images/new_1cny.png rename to app/web/src/assets/images/new_1cny.png diff --git a/05_Web_Front/src/assets/images/new_1usd.png b/app/web/src/assets/images/new_1usd.png similarity index 100% rename from 05_Web_Front/src/assets/images/new_1usd.png rename to app/web/src/assets/images/new_1usd.png diff --git a/05_Web_Front/src/assets/images/new_2.png b/app/web/src/assets/images/new_2.png similarity index 100% rename from 05_Web_Front/src/assets/images/new_2.png rename to app/web/src/assets/images/new_2.png diff --git a/05_Web_Front/src/assets/images/new_3.png b/app/web/src/assets/images/new_3.png similarity index 100% rename from 05_Web_Front/src/assets/images/new_3.png rename to app/web/src/assets/images/new_3.png diff --git a/05_Web_Front/src/assets/images/new_4.png b/app/web/src/assets/images/new_4.png similarity index 100% rename from 05_Web_Front/src/assets/images/new_4.png rename to app/web/src/assets/images/new_4.png diff --git a/05_Web_Front/src/assets/images/otc_bg.jpg b/app/web/src/assets/images/otc_bg.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/otc_bg.jpg rename to app/web/src/assets/images/otc_bg.jpg diff --git a/05_Web_Front/src/assets/images/page.png b/app/web/src/assets/images/page.png similarity index 100% rename from 05_Web_Front/src/assets/images/page.png rename to app/web/src/assets/images/page.png diff --git a/05_Web_Front/src/assets/images/page_active.png b/app/web/src/assets/images/page_active.png similarity index 100% rename from 05_Web_Front/src/assets/images/page_active.png rename to app/web/src/assets/images/page_active.png diff --git a/05_Web_Front/src/assets/images/phone_img.png b/app/web/src/assets/images/phone_img.png similarity index 100% rename from 05_Web_Front/src/assets/images/phone_img.png rename to app/web/src/assets/images/phone_img.png diff --git a/05_Web_Front/src/assets/images/platedanbao.png b/app/web/src/assets/images/platedanbao.png similarity index 100% rename from 05_Web_Front/src/assets/images/platedanbao.png rename to app/web/src/assets/images/platedanbao.png diff --git a/05_Web_Front/src/assets/images/poundage.png b/app/web/src/assets/images/poundage.png similarity index 100% rename from 05_Web_Front/src/assets/images/poundage.png rename to app/web/src/assets/images/poundage.png diff --git a/05_Web_Front/src/assets/images/price.png b/app/web/src/assets/images/price.png similarity index 100% rename from 05_Web_Front/src/assets/images/price.png rename to app/web/src/assets/images/price.png diff --git a/05_Web_Front/src/assets/images/promotion/invitebg1.jpg b/app/web/src/assets/images/promotion/invitebg1.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/promotion/invitebg1.jpg rename to app/web/src/assets/images/promotion/invitebg1.jpg diff --git a/05_Web_Front/src/assets/images/promotion/promotionbg1.jpg b/app/web/src/assets/images/promotion/promotionbg1.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/promotion/promotionbg1.jpg rename to app/web/src/assets/images/promotion/promotionbg1.jpg diff --git a/05_Web_Front/src/assets/images/redenvelope.png b/app/web/src/assets/images/redenvelope.png similarity index 100% rename from 05_Web_Front/src/assets/images/redenvelope.png rename to app/web/src/assets/images/redenvelope.png diff --git a/05_Web_Front/src/assets/images/reg-bg.png b/app/web/src/assets/images/reg-bg.png similarity index 100% rename from 05_Web_Front/src/assets/images/reg-bg.png rename to app/web/src/assets/images/reg-bg.png diff --git a/05_Web_Front/src/assets/images/reg-bg1.png b/app/web/src/assets/images/reg-bg1.png similarity index 100% rename from 05_Web_Front/src/assets/images/reg-bg1.png rename to app/web/src/assets/images/reg-bg1.png diff --git a/05_Web_Front/src/assets/images/small_logo.png b/app/web/src/assets/images/small_logo.png similarity index 100% rename from 05_Web_Front/src/assets/images/small_logo.png rename to app/web/src/assets/images/small_logo.png diff --git a/05_Web_Front/src/assets/images/star_no_collection.png b/app/web/src/assets/images/star_no_collection.png similarity index 100% rename from 05_Web_Front/src/assets/images/star_no_collection.png rename to app/web/src/assets/images/star_no_collection.png diff --git a/05_Web_Front/src/assets/images/telegramqrcode.jpg b/app/web/src/assets/images/telegramqrcode.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/telegramqrcode.jpg rename to app/web/src/assets/images/telegramqrcode.jpg diff --git a/05_Web_Front/src/assets/images/text.png b/app/web/src/assets/images/text.png similarity index 100% rename from 05_Web_Front/src/assets/images/text.png rename to app/web/src/assets/images/text.png diff --git a/05_Web_Front/src/assets/images/to_del.png b/app/web/src/assets/images/to_del.png similarity index 100% rename from 05_Web_Front/src/assets/images/to_del.png rename to app/web/src/assets/images/to_del.png diff --git a/05_Web_Front/src/assets/images/upload.png b/app/web/src/assets/images/upload.png similarity index 100% rename from 05_Web_Front/src/assets/images/upload.png rename to app/web/src/assets/images/upload.png diff --git a/05_Web_Front/src/assets/images/upload_placeholder.png b/app/web/src/assets/images/upload_placeholder.png similarity index 100% rename from 05_Web_Front/src/assets/images/upload_placeholder.png rename to app/web/src/assets/images/upload_placeholder.png diff --git a/05_Web_Front/src/assets/images/wechatqrcode.jpg b/app/web/src/assets/images/wechatqrcode.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/wechatqrcode.jpg rename to app/web/src/assets/images/wechatqrcode.jpg diff --git a/05_Web_Front/src/assets/images/wechats.png b/app/web/src/assets/images/wechats.png similarity index 100% rename from 05_Web_Front/src/assets/images/wechats.png rename to app/web/src/assets/images/wechats.png diff --git a/05_Web_Front/src/assets/images/weiboqrcode.jpg b/app/web/src/assets/images/weiboqrcode.jpg similarity index 100% rename from 05_Web_Front/src/assets/images/weiboqrcode.jpg rename to app/web/src/assets/images/weiboqrcode.jpg diff --git a/05_Web_Front/src/assets/img/1.png b/app/web/src/assets/img/1.png similarity index 100% rename from 05_Web_Front/src/assets/img/1.png rename to app/web/src/assets/img/1.png diff --git a/05_Web_Front/src/assets/img/2.png b/app/web/src/assets/img/2.png similarity index 100% rename from 05_Web_Front/src/assets/img/2.png rename to app/web/src/assets/img/2.png diff --git a/05_Web_Front/src/assets/img/accomplish.png b/app/web/src/assets/img/accomplish.png similarity index 100% rename from 05_Web_Front/src/assets/img/accomplish.png rename to app/web/src/assets/img/accomplish.png diff --git a/05_Web_Front/src/assets/img/alipay.png b/app/web/src/assets/img/alipay.png similarity index 100% rename from 05_Web_Front/src/assets/img/alipay.png rename to app/web/src/assets/img/alipay.png diff --git a/05_Web_Front/src/assets/img/bankcard.png b/app/web/src/assets/img/bankcard.png similarity index 100% rename from 05_Web_Front/src/assets/img/bankcard.png rename to app/web/src/assets/img/bankcard.png diff --git a/05_Web_Front/src/assets/img/btc.png b/app/web/src/assets/img/btc.png similarity index 100% rename from 05_Web_Front/src/assets/img/btc.png rename to app/web/src/assets/img/btc.png diff --git a/05_Web_Front/src/assets/img/m1.png b/app/web/src/assets/img/m1.png similarity index 100% rename from 05_Web_Front/src/assets/img/m1.png rename to app/web/src/assets/img/m1.png diff --git a/05_Web_Front/src/assets/img/m2.png b/app/web/src/assets/img/m2.png similarity index 100% rename from 05_Web_Front/src/assets/img/m2.png rename to app/web/src/assets/img/m2.png diff --git a/05_Web_Front/src/assets/img/m3.png b/app/web/src/assets/img/m3.png similarity index 100% rename from 05_Web_Front/src/assets/img/m3.png rename to app/web/src/assets/img/m3.png diff --git a/05_Web_Front/src/assets/img/noicon.png b/app/web/src/assets/img/noicon.png similarity index 100% rename from 05_Web_Front/src/assets/img/noicon.png rename to app/web/src/assets/img/noicon.png diff --git a/05_Web_Front/src/assets/img/overicon.png b/app/web/src/assets/img/overicon.png similarity index 100% rename from 05_Web_Front/src/assets/img/overicon.png rename to app/web/src/assets/img/overicon.png diff --git a/05_Web_Front/src/assets/img/renzheng.png b/app/web/src/assets/img/renzheng.png similarity index 100% rename from 05_Web_Front/src/assets/img/renzheng.png rename to app/web/src/assets/img/renzheng.png diff --git a/05_Web_Front/src/assets/img/t1-1.png b/app/web/src/assets/img/t1-1.png similarity index 100% rename from 05_Web_Front/src/assets/img/t1-1.png rename to app/web/src/assets/img/t1-1.png diff --git a/05_Web_Front/src/assets/img/t1-2.png b/app/web/src/assets/img/t1-2.png similarity index 100% rename from 05_Web_Front/src/assets/img/t1-2.png rename to app/web/src/assets/img/t1-2.png diff --git a/05_Web_Front/src/assets/img/t2-1.png b/app/web/src/assets/img/t2-1.png similarity index 100% rename from 05_Web_Front/src/assets/img/t2-1.png rename to app/web/src/assets/img/t2-1.png diff --git a/05_Web_Front/src/assets/img/t2-2.png b/app/web/src/assets/img/t2-2.png similarity index 100% rename from 05_Web_Front/src/assets/img/t2-2.png rename to app/web/src/assets/img/t2-2.png diff --git a/05_Web_Front/src/assets/img/t3-1.png b/app/web/src/assets/img/t3-1.png similarity index 100% rename from 05_Web_Front/src/assets/img/t3-1.png rename to app/web/src/assets/img/t3-1.png diff --git a/05_Web_Front/src/assets/img/t3-2.png b/app/web/src/assets/img/t3-2.png similarity index 100% rename from 05_Web_Front/src/assets/img/t3-2.png rename to app/web/src/assets/img/t3-2.png diff --git a/05_Web_Front/src/assets/img/usdt.png b/app/web/src/assets/img/usdt.png similarity index 100% rename from 05_Web_Front/src/assets/img/usdt.png rename to app/web/src/assets/img/usdt.png diff --git a/05_Web_Front/src/assets/img/wechat.png b/app/web/src/assets/img/wechat.png similarity index 100% rename from 05_Web_Front/src/assets/img/wechat.png rename to app/web/src/assets/img/wechat.png diff --git a/05_Web_Front/src/assets/js/charting_library/charting_library.min.js b/app/web/src/assets/js/charting_library/charting_library.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/charting_library.min.js rename to app/web/src/assets/js/charting_library/charting_library.min.js diff --git a/05_Web_Front/src/assets/js/charting_library/datafeed/bitrade.js b/app/web/src/assets/js/charting_library/datafeed/bitrade.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/datafeed/bitrade.js rename to app/web/src/assets/js/charting_library/datafeed/bitrade.js diff --git a/05_Web_Front/src/assets/js/charting_library/datafeed/udf/datafeed.js b/app/web/src/assets/js/charting_library/datafeed/udf/datafeed.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/datafeed/udf/datafeed.js rename to app/web/src/assets/js/charting_library/datafeed/udf/datafeed.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/2.1241f4b3f95dd7677a3c.js b/app/web/src/assets/js/charting_library/static/bundles/2.1241f4b3f95dd7677a3c.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/2.1241f4b3f95dd7677a3c.js rename to app/web/src/assets/js/charting_library/static/bundles/2.1241f4b3f95dd7677a3c.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/common.css b/app/web/src/assets/js/charting_library/static/bundles/common.css similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/common.css rename to app/web/src/assets/js/charting_library/static/bundles/common.css diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/common_day.css b/app/web/src/assets/js/charting_library/static/bundles/common_day.css similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/common_day.css rename to app/web/src/assets/js/charting_library/static/bundles/common_day.css diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/crosshair.6c091f7d5427d0c5e6d9dc3a90eb2b20.cur b/app/web/src/assets/js/charting_library/static/bundles/crosshair.6c091f7d5427d0c5e6d9dc3a90eb2b20.cur similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/crosshair.6c091f7d5427d0c5e6d9dc3a90eb2b20.cur rename to app/web/src/assets/js/charting_library/static/bundles/crosshair.6c091f7d5427d0c5e6d9dc3a90eb2b20.cur diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/dot.ed68e83c16f77203e73dbc4c3a7c7fa1.cur b/app/web/src/assets/js/charting_library/static/bundles/dot.ed68e83c16f77203e73dbc4c3a7c7fa1.cur similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/dot.ed68e83c16f77203e73dbc4c3a7c7fa1.cur rename to app/web/src/assets/js/charting_library/static/bundles/dot.ed68e83c16f77203e73dbc4c3a7c7fa1.cur diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/eraser.0579d40b812fa2c3ffe72e5803a6e14c.cur b/app/web/src/assets/js/charting_library/static/bundles/eraser.0579d40b812fa2c3ffe72e5803a6e14c.cur similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/eraser.0579d40b812fa2c3ffe72e5803a6e14c.cur rename to app/web/src/assets/js/charting_library/static/bundles/eraser.0579d40b812fa2c3ffe72e5803a6e14c.cur diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/grab.bc156522a6b55a60be9fae15c14b66c5.cur b/app/web/src/assets/js/charting_library/static/bundles/grab.bc156522a6b55a60be9fae15c14b66c5.cur similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/grab.bc156522a6b55a60be9fae15c14b66c5.cur rename to app/web/src/assets/js/charting_library/static/bundles/grab.bc156522a6b55a60be9fae15c14b66c5.cur diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/grabbing.1c0862a8a8c0fb02885557bc97fdafe7.cur b/app/web/src/assets/js/charting_library/static/bundles/grabbing.1c0862a8a8c0fb02885557bc97fdafe7.cur similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/grabbing.1c0862a8a8c0fb02885557bc97fdafe7.cur rename to app/web/src/assets/js/charting_library/static/bundles/grabbing.1c0862a8a8c0fb02885557bc97fdafe7.cur diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/ie-fallback-logos.01acaeb21cf903de7d89.js b/app/web/src/assets/js/charting_library/static/bundles/ie-fallback-logos.01acaeb21cf903de7d89.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/ie-fallback-logos.01acaeb21cf903de7d89.js rename to app/web/src/assets/js/charting_library/static/bundles/ie-fallback-logos.01acaeb21cf903de7d89.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/library.2e4e86e4539a260f4a7b69dd55f2595b.css b/app/web/src/assets/js/charting_library/static/bundles/library.2e4e86e4539a260f4a7b69dd55f2595b.css similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/library.2e4e86e4539a260f4a7b69dd55f2595b.css rename to app/web/src/assets/js/charting_library/static/bundles/library.2e4e86e4539a260f4a7b69dd55f2595b.css diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/library.52f448f933885e5e0fed.js b/app/web/src/assets/js/charting_library/static/bundles/library.52f448f933885e5e0fed.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/library.52f448f933885e5e0fed.js rename to app/web/src/assets/js/charting_library/static/bundles/library.52f448f933885e5e0fed.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/objecttreedialog.b80d27d173fb6f8bb0a3.js b/app/web/src/assets/js/charting_library/static/bundles/objecttreedialog.b80d27d173fb6f8bb0a3.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/objecttreedialog.b80d27d173fb6f8bb0a3.js rename to app/web/src/assets/js/charting_library/static/bundles/objecttreedialog.b80d27d173fb6f8bb0a3.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/vendors.4d073557b52d805561e631f4420fc97f.css b/app/web/src/assets/js/charting_library/static/bundles/vendors.4d073557b52d805561e631f4420fc97f.css similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/vendors.4d073557b52d805561e631f4420fc97f.css rename to app/web/src/assets/js/charting_library/static/bundles/vendors.4d073557b52d805561e631f4420fc97f.css diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/vendors.8c445fe91dc494c5dec6.js b/app/web/src/assets/js/charting_library/static/bundles/vendors.8c445fe91dc494c5dec6.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/vendors.8c445fe91dc494c5dec6.js rename to app/web/src/assets/js/charting_library/static/bundles/vendors.8c445fe91dc494c5dec6.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/bundles/zoom.e21f24dd632c7069139bc47ae89c54b5.cur b/app/web/src/assets/js/charting_library/static/bundles/zoom.e21f24dd632c7069139bc47ae89c54b5.cur similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/bundles/zoom.e21f24dd632c7069139bc47ae89c54b5.cur rename to app/web/src/assets/js/charting_library/static/bundles/zoom.e21f24dd632c7069139bc47ae89c54b5.cur diff --git a/05_Web_Front/src/assets/js/charting_library/static/fonts/fontawesome-webfont.svg b/app/web/src/assets/js/charting_library/static/fonts/fontawesome-webfont.svg similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/fonts/fontawesome-webfont.svg rename to app/web/src/assets/js/charting_library/static/fonts/fontawesome-webfont.svg diff --git a/05_Web_Front/src/assets/js/charting_library/static/fonts/fontawesome-webfont.ttf b/app/web/src/assets/js/charting_library/static/fonts/fontawesome-webfont.ttf similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/fonts/fontawesome-webfont.ttf rename to app/web/src/assets/js/charting_library/static/fonts/fontawesome-webfont.ttf diff --git a/05_Web_Front/src/assets/js/charting_library/static/fonts/fontawesome-webfont.woff b/app/web/src/assets/js/charting_library/static/fonts/fontawesome-webfont.woff similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/fonts/fontawesome-webfont.woff rename to app/web/src/assets/js/charting_library/static/fonts/fontawesome-webfont.woff diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/balloon.png b/app/web/src/assets/js/charting_library/static/images/balloon.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/balloon.png rename to app/web/src/assets/js/charting_library/static/images/balloon.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/bar-loader.gif b/app/web/src/assets/js/charting_library/static/images/bar-loader.gif similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/bar-loader.gif rename to app/web/src/assets/js/charting_library/static/images/bar-loader.gif diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/button-bg.png b/app/web/src/assets/js/charting_library/static/images/button-bg.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/button-bg.png rename to app/web/src/assets/js/charting_library/static/images/button-bg.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright-faded.png b/app/web/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright-faded.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright-faded.png rename to app/web/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright-faded.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright.png b/app/web/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright.png rename to app/web/src/assets/js/charting_library/static/images/charting_library/logo-widget-copyright.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/controlll.png b/app/web/src/assets/js/charting_library/static/images/controlll.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/controlll.png rename to app/web/src/assets/js/charting_library/static/images/controlll.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/delayed.png b/app/web/src/assets/js/charting_library/static/images/delayed.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/delayed.png rename to app/web/src/assets/js/charting_library/static/images/delayed.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/dialogs/checkbox.png b/app/web/src/assets/js/charting_library/static/images/dialogs/checkbox.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/dialogs/checkbox.png rename to app/web/src/assets/js/charting_library/static/images/dialogs/checkbox.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/dialogs/close-flat.png b/app/web/src/assets/js/charting_library/static/images/dialogs/close-flat.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/dialogs/close-flat.png rename to app/web/src/assets/js/charting_library/static/images/dialogs/close-flat.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/dialogs/large-slider-handle.png b/app/web/src/assets/js/charting_library/static/images/dialogs/large-slider-handle.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/dialogs/large-slider-handle.png rename to app/web/src/assets/js/charting_library/static/images/dialogs/large-slider-handle.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/dialogs/linewidth-slider.png b/app/web/src/assets/js/charting_library/static/images/dialogs/linewidth-slider.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/dialogs/linewidth-slider.png rename to app/web/src/assets/js/charting_library/static/images/dialogs/linewidth-slider.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/dialogs/opacity-slider.png b/app/web/src/assets/js/charting_library/static/images/dialogs/opacity-slider.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/dialogs/opacity-slider.png rename to app/web/src/assets/js/charting_library/static/images/dialogs/opacity-slider.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/icons.png b/app/web/src/assets/js/charting_library/static/images/icons.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/icons.png rename to app/web/src/assets/js/charting_library/static/images/icons.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/prediction-clock-black.png b/app/web/src/assets/js/charting_library/static/images/prediction-clock-black.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/prediction-clock-black.png rename to app/web/src/assets/js/charting_library/static/images/prediction-clock-black.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/prediction-clock-white.png b/app/web/src/assets/js/charting_library/static/images/prediction-clock-white.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/prediction-clock-white.png rename to app/web/src/assets/js/charting_library/static/images/prediction-clock-white.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/prediction-failure-white.png b/app/web/src/assets/js/charting_library/static/images/prediction-failure-white.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/prediction-failure-white.png rename to app/web/src/assets/js/charting_library/static/images/prediction-failure-white.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/prediction-success-white.png b/app/web/src/assets/js/charting_library/static/images/prediction-success-white.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/prediction-success-white.png rename to app/web/src/assets/js/charting_library/static/images/prediction-success-white.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/save-load-separator-inv.png b/app/web/src/assets/js/charting_library/static/images/save-load-separator-inv.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/save-load-separator-inv.png rename to app/web/src/assets/js/charting_library/static/images/save-load-separator-inv.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/select-bg.png b/app/web/src/assets/js/charting_library/static/images/select-bg.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/select-bg.png rename to app/web/src/assets/js/charting_library/static/images/select-bg.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/sidetoolbar/instruments.png b/app/web/src/assets/js/charting_library/static/images/sidetoolbar/instruments.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/sidetoolbar/instruments.png rename to app/web/src/assets/js/charting_library/static/images/sidetoolbar/instruments.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/sidetoolbar/toolgroup.png b/app/web/src/assets/js/charting_library/static/images/sidetoolbar/toolgroup.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/sidetoolbar/toolgroup.png rename to app/web/src/assets/js/charting_library/static/images/sidetoolbar/toolgroup.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/bucket2.svg b/app/web/src/assets/js/charting_library/static/images/svg/chart/bucket2.svg similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/bucket2.svg rename to app/web/src/assets/js/charting_library/static/images/svg/chart/bucket2.svg diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/font.svg b/app/web/src/assets/js/charting_library/static/images/svg/chart/font.svg similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/font.svg rename to app/web/src/assets/js/charting_library/static/images/svg/chart/font.svg diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/large-slider-handle.svg b/app/web/src/assets/js/charting_library/static/images/svg/chart/large-slider-handle.svg similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/large-slider-handle.svg rename to app/web/src/assets/js/charting_library/static/images/svg/chart/large-slider-handle.svg diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/pencil2.svg b/app/web/src/assets/js/charting_library/static/images/svg/chart/pencil2.svg similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/svg/chart/pencil2.svg rename to app/web/src/assets/js/charting_library/static/images/svg/chart/pencil2.svg diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/svg/question-mark-rounded.svg b/app/web/src/assets/js/charting_library/static/images/svg/question-mark-rounded.svg similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/svg/question-mark-rounded.svg rename to app/web/src/assets/js/charting_library/static/images/svg/question-mark-rounded.svg diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/ticker-icons.png b/app/web/src/assets/js/charting_library/static/images/ticker-icons.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/ticker-icons.png rename to app/web/src/assets/js/charting_library/static/images/ticker-icons.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-bg-gradient.png b/app/web/src/assets/js/charting_library/static/images/tvcolorpicker-bg-gradient.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-bg-gradient.png rename to app/web/src/assets/js/charting_library/static/images/tvcolorpicker-bg-gradient.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-bg.png b/app/web/src/assets/js/charting_library/static/images/tvcolorpicker-bg.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-bg.png rename to app/web/src/assets/js/charting_library/static/images/tvcolorpicker-bg.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-check.png b/app/web/src/assets/js/charting_library/static/images/tvcolorpicker-check.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-check.png rename to app/web/src/assets/js/charting_library/static/images/tvcolorpicker-check.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-sprite.png b/app/web/src/assets/js/charting_library/static/images/tvcolorpicker-sprite.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/tvcolorpicker-sprite.png rename to app/web/src/assets/js/charting_library/static/images/tvcolorpicker-sprite.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/images/warning-icon.png b/app/web/src/assets/js/charting_library/static/images/warning-icon.png similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/images/warning-icon.png rename to app/web/src/assets/js/charting_library/static/images/warning-icon.png diff --git a/05_Web_Front/src/assets/js/charting_library/static/js/external/spin.min.js b/app/web/src/assets/js/charting_library/static/js/external/spin.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/js/external/spin.min.js rename to app/web/src/assets/js/charting_library/static/js/external/spin.min.js diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/ar.json b/app/web/src/assets/js/charting_library/static/localization/translations/ar.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/ar.json rename to app/web/src/assets/js/charting_library/static/localization/translations/ar.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/cs.json b/app/web/src/assets/js/charting_library/static/localization/translations/cs.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/cs.json rename to app/web/src/assets/js/charting_library/static/localization/translations/cs.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/da_DK.json b/app/web/src/assets/js/charting_library/static/localization/translations/da_DK.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/da_DK.json rename to app/web/src/assets/js/charting_library/static/localization/translations/da_DK.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/de.json b/app/web/src/assets/js/charting_library/static/localization/translations/de.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/de.json rename to app/web/src/assets/js/charting_library/static/localization/translations/de.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/el.json b/app/web/src/assets/js/charting_library/static/localization/translations/el.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/el.json rename to app/web/src/assets/js/charting_library/static/localization/translations/el.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/en.json b/app/web/src/assets/js/charting_library/static/localization/translations/en.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/en.json rename to app/web/src/assets/js/charting_library/static/localization/translations/en.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/es.json b/app/web/src/assets/js/charting_library/static/localization/translations/es.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/es.json rename to app/web/src/assets/js/charting_library/static/localization/translations/es.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/et_EE.json b/app/web/src/assets/js/charting_library/static/localization/translations/et_EE.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/et_EE.json rename to app/web/src/assets/js/charting_library/static/localization/translations/et_EE.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/fa.json b/app/web/src/assets/js/charting_library/static/localization/translations/fa.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/fa.json rename to app/web/src/assets/js/charting_library/static/localization/translations/fa.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/fr.json b/app/web/src/assets/js/charting_library/static/localization/translations/fr.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/fr.json rename to app/web/src/assets/js/charting_library/static/localization/translations/fr.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/he_IL.json b/app/web/src/assets/js/charting_library/static/localization/translations/he_IL.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/he_IL.json rename to app/web/src/assets/js/charting_library/static/localization/translations/he_IL.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/hu_HU.json b/app/web/src/assets/js/charting_library/static/localization/translations/hu_HU.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/hu_HU.json rename to app/web/src/assets/js/charting_library/static/localization/translations/hu_HU.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/id_ID.json b/app/web/src/assets/js/charting_library/static/localization/translations/id_ID.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/id_ID.json rename to app/web/src/assets/js/charting_library/static/localization/translations/id_ID.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/it.json b/app/web/src/assets/js/charting_library/static/localization/translations/it.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/it.json rename to app/web/src/assets/js/charting_library/static/localization/translations/it.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/ja.json b/app/web/src/assets/js/charting_library/static/localization/translations/ja.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/ja.json rename to app/web/src/assets/js/charting_library/static/localization/translations/ja.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/ko.json b/app/web/src/assets/js/charting_library/static/localization/translations/ko.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/ko.json rename to app/web/src/assets/js/charting_library/static/localization/translations/ko.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/market-quotes-translations.json b/app/web/src/assets/js/charting_library/static/localization/translations/market-quotes-translations.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/market-quotes-translations.json rename to app/web/src/assets/js/charting_library/static/localization/translations/market-quotes-translations.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/ms_MY.json b/app/web/src/assets/js/charting_library/static/localization/translations/ms_MY.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/ms_MY.json rename to app/web/src/assets/js/charting_library/static/localization/translations/ms_MY.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/nl_NL.json b/app/web/src/assets/js/charting_library/static/localization/translations/nl_NL.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/nl_NL.json rename to app/web/src/assets/js/charting_library/static/localization/translations/nl_NL.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/pl.json b/app/web/src/assets/js/charting_library/static/localization/translations/pl.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/pl.json rename to app/web/src/assets/js/charting_library/static/localization/translations/pl.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/pt.json b/app/web/src/assets/js/charting_library/static/localization/translations/pt.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/pt.json rename to app/web/src/assets/js/charting_library/static/localization/translations/pt.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/ro.json b/app/web/src/assets/js/charting_library/static/localization/translations/ro.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/ro.json rename to app/web/src/assets/js/charting_library/static/localization/translations/ro.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/ru.json b/app/web/src/assets/js/charting_library/static/localization/translations/ru.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/ru.json rename to app/web/src/assets/js/charting_library/static/localization/translations/ru.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/sk_SK.json b/app/web/src/assets/js/charting_library/static/localization/translations/sk_SK.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/sk_SK.json rename to app/web/src/assets/js/charting_library/static/localization/translations/sk_SK.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/sv.json b/app/web/src/assets/js/charting_library/static/localization/translations/sv.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/sv.json rename to app/web/src/assets/js/charting_library/static/localization/translations/sv.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/th.json b/app/web/src/assets/js/charting_library/static/localization/translations/th.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/th.json rename to app/web/src/assets/js/charting_library/static/localization/translations/th.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/tr.json b/app/web/src/assets/js/charting_library/static/localization/translations/tr.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/tr.json rename to app/web/src/assets/js/charting_library/static/localization/translations/tr.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/vi.json b/app/web/src/assets/js/charting_library/static/localization/translations/vi.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/vi.json rename to app/web/src/assets/js/charting_library/static/localization/translations/vi.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/zh.json b/app/web/src/assets/js/charting_library/static/localization/translations/zh.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/zh.json rename to app/web/src/assets/js/charting_library/static/localization/translations/zh.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/localization/translations/zh_TW.json b/app/web/src/assets/js/charting_library/static/localization/translations/zh_TW.json similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/localization/translations/zh_TW.json rename to app/web/src/assets/js/charting_library/static/localization/translations/zh_TW.json diff --git a/05_Web_Front/src/assets/js/charting_library/static/tv-chart.fe3192321931572c06b8.html b/app/web/src/assets/js/charting_library/static/tv-chart.fe3192321931572c06b8.html similarity index 100% rename from 05_Web_Front/src/assets/js/charting_library/static/tv-chart.fe3192321931572c06b8.html rename to app/web/src/assets/js/charting_library/static/tv-chart.fe3192321931572c06b8.html diff --git a/05_Web_Front/src/assets/js/exchange.js b/app/web/src/assets/js/exchange.js similarity index 100% rename from 05_Web_Front/src/assets/js/exchange.js rename to app/web/src/assets/js/exchange.js diff --git a/05_Web_Front/src/assets/js/gt.js b/app/web/src/assets/js/gt.js similarity index 100% rename from 05_Web_Front/src/assets/js/gt.js rename to app/web/src/assets/js/gt.js diff --git a/05_Web_Front/src/assets/js/index.js b/app/web/src/assets/js/index.js similarity index 100% rename from 05_Web_Front/src/assets/js/index.js rename to app/web/src/assets/js/index.js diff --git a/05_Web_Front/src/assets/js/jquery-2.0.3.min.js b/app/web/src/assets/js/jquery-2.0.3.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/jquery-2.0.3.min.js rename to app/web/src/assets/js/jquery-2.0.3.min.js diff --git a/05_Web_Front/src/assets/js/jquery.base64Upload.js b/app/web/src/assets/js/jquery.base64Upload.js similarity index 100% rename from 05_Web_Front/src/assets/js/jquery.base64Upload.js rename to app/web/src/assets/js/jquery.base64Upload.js diff --git a/05_Web_Front/src/assets/js/jquery.fullPage.min.js b/app/web/src/assets/js/jquery.fullPage.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/jquery.fullPage.min.js rename to app/web/src/assets/js/jquery.fullPage.min.js diff --git a/05_Web_Front/src/assets/js/jquery.min.js b/app/web/src/assets/js/jquery.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/jquery.min.js rename to app/web/src/assets/js/jquery.min.js diff --git a/05_Web_Front/src/assets/js/jquery.peity.min.js b/app/web/src/assets/js/jquery.peity.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/jquery.peity.min.js rename to app/web/src/assets/js/jquery.peity.min.js diff --git a/05_Web_Front/src/assets/js/jquery.qrcode.min.js b/app/web/src/assets/js/jquery.qrcode.min.js similarity index 100% rename from 05_Web_Front/src/assets/js/jquery.qrcode.min.js rename to app/web/src/assets/js/jquery.qrcode.min.js diff --git a/05_Web_Front/src/assets/js/tools.js b/app/web/src/assets/js/tools.js similarity index 100% rename from 05_Web_Front/src/assets/js/tools.js rename to app/web/src/assets/js/tools.js diff --git a/05_Web_Front/src/assets/js/util.js b/app/web/src/assets/js/util.js similarity index 100% rename from 05_Web_Front/src/assets/js/util.js rename to app/web/src/assets/js/util.js diff --git a/05_Web_Front/src/assets/lang/en.js b/app/web/src/assets/lang/en.js similarity index 100% rename from 05_Web_Front/src/assets/lang/en.js rename to app/web/src/assets/lang/en.js diff --git a/05_Web_Front/src/assets/lang/zh.js b/app/web/src/assets/lang/zh.js similarity index 100% rename from 05_Web_Front/src/assets/lang/zh.js rename to app/web/src/assets/lang/zh.js diff --git a/05_Web_Front/src/components/cms/Noticeindex.vue b/app/web/src/components/cms/Noticeindex.vue similarity index 100% rename from 05_Web_Front/src/components/cms/Noticeindex.vue rename to app/web/src/components/cms/Noticeindex.vue diff --git a/05_Web_Front/src/components/exchange/BZCountDown.vue b/app/web/src/components/exchange/BZCountDown.vue similarity index 100% rename from 05_Web_Front/src/components/exchange/BZCountDown.vue rename to app/web/src/components/exchange/BZCountDown.vue diff --git a/05_Web_Front/src/components/exchange/DepthGraph.vue b/app/web/src/components/exchange/DepthGraph.vue similarity index 100% rename from 05_Web_Front/src/components/exchange/DepthGraph.vue rename to app/web/src/components/exchange/DepthGraph.vue diff --git a/05_Web_Front/src/components/exchange/SvgLine.vue b/app/web/src/components/exchange/SvgLine.vue similarity index 100% rename from 05_Web_Front/src/components/exchange/SvgLine.vue rename to app/web/src/components/exchange/SvgLine.vue diff --git a/05_Web_Front/src/components/exchange/expand.vue b/app/web/src/components/exchange/expand.vue similarity index 100% rename from 05_Web_Front/src/components/exchange/expand.vue rename to app/web/src/components/exchange/expand.vue diff --git a/05_Web_Front/src/components/otc/Chatline.vue b/app/web/src/components/otc/Chatline.vue similarity index 100% rename from 05_Web_Front/src/components/otc/Chatline.vue rename to app/web/src/components/otc/Chatline.vue diff --git a/05_Web_Front/src/components/otc/MyAd.vue b/app/web/src/components/otc/MyAd.vue similarity index 100% rename from 05_Web_Front/src/components/otc/MyAd.vue rename to app/web/src/components/otc/MyAd.vue diff --git a/05_Web_Front/src/components/otc/carousel.vue b/app/web/src/components/otc/carousel.vue similarity index 100% rename from 05_Web_Front/src/components/otc/carousel.vue rename to app/web/src/components/otc/carousel.vue diff --git a/05_Web_Front/src/components/uc/Account.vue b/app/web/src/components/uc/Account.vue similarity index 100% rename from 05_Web_Front/src/components/uc/Account.vue rename to app/web/src/components/uc/Account.vue diff --git a/05_Web_Front/src/components/uc/EntrustCurrent.vue b/app/web/src/components/uc/EntrustCurrent.vue similarity index 100% rename from 05_Web_Front/src/components/uc/EntrustCurrent.vue rename to app/web/src/components/uc/EntrustCurrent.vue diff --git a/05_Web_Front/src/components/uc/EntrustHistory.vue b/app/web/src/components/uc/EntrustHistory.vue similarity index 100% rename from 05_Web_Front/src/components/uc/EntrustHistory.vue rename to app/web/src/components/uc/EntrustHistory.vue diff --git a/05_Web_Front/src/components/uc/InnovationMinings.vue b/app/web/src/components/uc/InnovationMinings.vue similarity index 100% rename from 05_Web_Front/src/components/uc/InnovationMinings.vue rename to app/web/src/components/uc/InnovationMinings.vue diff --git a/05_Web_Front/src/components/uc/InnovationOrders.vue b/app/web/src/components/uc/InnovationOrders.vue similarity index 100% rename from 05_Web_Front/src/components/uc/InnovationOrders.vue rename to app/web/src/components/uc/InnovationOrders.vue diff --git a/05_Web_Front/src/components/uc/InvitingMin.vue b/app/web/src/components/uc/InvitingMin.vue similarity index 100% rename from 05_Web_Front/src/components/uc/InvitingMin.vue rename to app/web/src/components/uc/InvitingMin.vue diff --git a/05_Web_Front/src/components/uc/MinTrade.vue b/app/web/src/components/uc/MinTrade.vue similarity index 100% rename from 05_Web_Front/src/components/uc/MinTrade.vue rename to app/web/src/components/uc/MinTrade.vue diff --git a/05_Web_Front/src/components/uc/MoneyIndex.vue b/app/web/src/components/uc/MoneyIndex.vue similarity index 100% rename from 05_Web_Front/src/components/uc/MoneyIndex.vue rename to app/web/src/components/uc/MoneyIndex.vue diff --git a/05_Web_Front/src/components/uc/MyPromotion.vue b/app/web/src/components/uc/MyPromotion.vue similarity index 100% rename from 05_Web_Front/src/components/uc/MyPromotion.vue rename to app/web/src/components/uc/MyPromotion.vue diff --git a/05_Web_Front/src/components/uc/PayDividends.vue b/app/web/src/components/uc/PayDividends.vue similarity index 100% rename from 05_Web_Front/src/components/uc/PayDividends.vue rename to app/web/src/components/uc/PayDividends.vue diff --git a/05_Web_Front/src/components/uc/PromotionMyCards.vue b/app/web/src/components/uc/PromotionMyCards.vue similarity index 100% rename from 05_Web_Front/src/components/uc/PromotionMyCards.vue rename to app/web/src/components/uc/PromotionMyCards.vue diff --git a/05_Web_Front/src/components/uc/Recharge.vue b/app/web/src/components/uc/Recharge.vue similarity index 100% rename from 05_Web_Front/src/components/uc/Recharge.vue rename to app/web/src/components/uc/Recharge.vue diff --git a/05_Web_Front/src/components/uc/Record.vue b/app/web/src/components/uc/Record.vue similarity index 100% rename from 05_Web_Front/src/components/uc/Record.vue rename to app/web/src/components/uc/Record.vue diff --git a/05_Web_Front/src/components/uc/Safe.vue b/app/web/src/components/uc/Safe.vue similarity index 100% rename from 05_Web_Front/src/components/uc/Safe.vue rename to app/web/src/components/uc/Safe.vue diff --git a/05_Web_Front/src/components/uc/TradeExpand.vue b/app/web/src/components/uc/TradeExpand.vue similarity index 100% rename from 05_Web_Front/src/components/uc/TradeExpand.vue rename to app/web/src/components/uc/TradeExpand.vue diff --git a/05_Web_Front/src/components/uc/Withdraw.vue b/app/web/src/components/uc/Withdraw.vue similarity index 100% rename from 05_Web_Front/src/components/uc/Withdraw.vue rename to app/web/src/components/uc/Withdraw.vue diff --git a/05_Web_Front/src/components/uc/WithdrawAddress.vue b/app/web/src/components/uc/WithdrawAddress.vue similarity index 100% rename from 05_Web_Front/src/components/uc/WithdrawAddress.vue rename to app/web/src/components/uc/WithdrawAddress.vue diff --git a/05_Web_Front/src/components/uc/myorder.vue b/app/web/src/components/uc/myorder.vue similarity index 100% rename from 05_Web_Front/src/components/uc/myorder.vue rename to app/web/src/components/uc/myorder.vue diff --git a/05_Web_Front/src/config/api.js b/app/web/src/config/api.js similarity index 100% rename from 05_Web_Front/src/config/api.js rename to app/web/src/config/api.js diff --git a/05_Web_Front/src/config/routes.js b/app/web/src/config/routes.js similarity index 100% rename from 05_Web_Front/src/config/routes.js rename to app/web/src/config/routes.js diff --git a/05_Web_Front/src/config/store.js b/app/web/src/config/store.js similarity index 100% rename from 05_Web_Front/src/config/store.js rename to app/web/src/config/store.js diff --git a/05_Web_Front/src/main.js b/app/web/src/main.js similarity index 100% rename from 05_Web_Front/src/main.js rename to app/web/src/main.js diff --git a/05_Web_Front/src/pages/activity/Activity.vue b/app/web/src/pages/activity/Activity.vue similarity index 100% rename from 05_Web_Front/src/pages/activity/Activity.vue rename to app/web/src/pages/activity/Activity.vue diff --git a/05_Web_Front/src/pages/activity/ActivityDetail.vue b/app/web/src/pages/activity/ActivityDetail.vue similarity index 100% rename from 05_Web_Front/src/pages/activity/ActivityDetail.vue rename to app/web/src/pages/activity/ActivityDetail.vue diff --git a/05_Web_Front/src/pages/activity/Bzb.vue b/app/web/src/pages/activity/Bzb.vue similarity index 100% rename from 05_Web_Front/src/pages/activity/Bzb.vue rename to app/web/src/pages/activity/Bzb.vue diff --git a/05_Web_Front/src/pages/activity/Partner.vue b/app/web/src/pages/activity/Partner.vue similarity index 100% rename from 05_Web_Front/src/pages/activity/Partner.vue rename to app/web/src/pages/activity/Partner.vue diff --git a/05_Web_Front/src/pages/cms/AboutUs.vue b/app/web/src/pages/cms/AboutUs.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/AboutUs.vue rename to app/web/src/pages/cms/AboutUs.vue diff --git a/05_Web_Front/src/pages/cms/Help.vue b/app/web/src/pages/cms/Help.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/Help.vue rename to app/web/src/pages/cms/Help.vue diff --git a/05_Web_Front/src/pages/cms/HelpDetail.vue b/app/web/src/pages/cms/HelpDetail.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/HelpDetail.vue rename to app/web/src/pages/cms/HelpDetail.vue diff --git a/05_Web_Front/src/pages/cms/HelpList.vue b/app/web/src/pages/cms/HelpList.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/HelpList.vue rename to app/web/src/pages/cms/HelpList.vue diff --git a/05_Web_Front/src/pages/cms/Notice.vue b/app/web/src/pages/cms/Notice.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/Notice.vue rename to app/web/src/pages/cms/Notice.vue diff --git a/05_Web_Front/src/pages/cms/NoticeItem.vue b/app/web/src/pages/cms/NoticeItem.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/NoticeItem.vue rename to app/web/src/pages/cms/NoticeItem.vue diff --git a/05_Web_Front/src/pages/cms/WhitePaper.vue b/app/web/src/pages/cms/WhitePaper.vue similarity index 100% rename from 05_Web_Front/src/pages/cms/WhitePaper.vue rename to app/web/src/pages/cms/WhitePaper.vue diff --git a/05_Web_Front/src/pages/ctc/Ctc.vue b/app/web/src/pages/ctc/Ctc.vue similarity index 100% rename from 05_Web_Front/src/pages/ctc/Ctc.vue rename to app/web/src/pages/ctc/Ctc.vue diff --git a/05_Web_Front/src/pages/envelope/Envelope.vue b/app/web/src/pages/envelope/Envelope.vue similarity index 100% rename from 05_Web_Front/src/pages/envelope/Envelope.vue rename to app/web/src/pages/envelope/Envelope.vue diff --git a/05_Web_Front/src/pages/exchange/Exchange.vue b/app/web/src/pages/exchange/Exchange.vue similarity index 100% rename from 05_Web_Front/src/pages/exchange/Exchange.vue rename to app/web/src/pages/exchange/Exchange.vue diff --git a/05_Web_Front/src/pages/index/Index.vue b/app/web/src/pages/index/Index.vue similarity index 100% rename from 05_Web_Front/src/pages/index/Index.vue rename to app/web/src/pages/index/Index.vue diff --git a/05_Web_Front/src/pages/invite/Invite.vue b/app/web/src/pages/invite/Invite.vue similarity index 100% rename from 05_Web_Front/src/pages/invite/Invite.vue rename to app/web/src/pages/invite/Invite.vue diff --git a/05_Web_Front/src/pages/otc/AdPublish.vue b/app/web/src/pages/otc/AdPublish.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/AdPublish.vue rename to app/web/src/pages/otc/AdPublish.vue diff --git a/05_Web_Front/src/pages/otc/Chat.vue b/app/web/src/pages/otc/Chat.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/Chat.vue rename to app/web/src/pages/otc/Chat.vue diff --git a/05_Web_Front/src/pages/otc/CheckUser.vue b/app/web/src/pages/otc/CheckUser.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/CheckUser.vue rename to app/web/src/pages/otc/CheckUser.vue diff --git a/05_Web_Front/src/pages/otc/Main.vue b/app/web/src/pages/otc/Main.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/Main.vue rename to app/web/src/pages/otc/Main.vue diff --git a/05_Web_Front/src/pages/otc/Trade.vue b/app/web/src/pages/otc/Trade.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/Trade.vue rename to app/web/src/pages/otc/Trade.vue diff --git a/05_Web_Front/src/pages/otc/TradeInfo.vue b/app/web/src/pages/otc/TradeInfo.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/TradeInfo.vue rename to app/web/src/pages/otc/TradeInfo.vue diff --git a/05_Web_Front/src/pages/otc/index.vue b/app/web/src/pages/otc/index.vue similarity index 100% rename from 05_Web_Front/src/pages/otc/index.vue rename to app/web/src/pages/otc/index.vue diff --git a/05_Web_Front/src/pages/uc/AppDownload.vue b/app/web/src/pages/uc/AppDownload.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/AppDownload.vue rename to app/web/src/pages/uc/AppDownload.vue diff --git a/05_Web_Front/src/pages/uc/FindPwd.vue b/app/web/src/pages/uc/FindPwd.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/FindPwd.vue rename to app/web/src/pages/uc/FindPwd.vue diff --git a/05_Web_Front/src/pages/uc/IdentBusiness.vue b/app/web/src/pages/uc/IdentBusiness.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/IdentBusiness.vue rename to app/web/src/pages/uc/IdentBusiness.vue diff --git a/05_Web_Front/src/pages/uc/Login.vue b/app/web/src/pages/uc/Login.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/Login.vue rename to app/web/src/pages/uc/Login.vue diff --git a/05_Web_Front/src/pages/uc/MemberCenter.vue b/app/web/src/pages/uc/MemberCenter.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/MemberCenter.vue rename to app/web/src/pages/uc/MemberCenter.vue diff --git a/05_Web_Front/src/pages/uc/MobileRegister.vue b/app/web/src/pages/uc/MobileRegister.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/MobileRegister.vue rename to app/web/src/pages/uc/MobileRegister.vue diff --git a/05_Web_Front/src/pages/uc/Register.vue b/app/web/src/pages/uc/Register.vue similarity index 100% rename from 05_Web_Front/src/pages/uc/Register.vue rename to app/web/src/pages/uc/Register.vue diff --git a/05_Web_Front/test/e2e/custom-assertions/elementCount.js b/app/web/test/e2e/custom-assertions/elementCount.js similarity index 100% rename from 05_Web_Front/test/e2e/custom-assertions/elementCount.js rename to app/web/test/e2e/custom-assertions/elementCount.js diff --git a/05_Web_Front/test/e2e/nightwatch.conf.js b/app/web/test/e2e/nightwatch.conf.js similarity index 100% rename from 05_Web_Front/test/e2e/nightwatch.conf.js rename to app/web/test/e2e/nightwatch.conf.js diff --git a/05_Web_Front/test/e2e/runner.js b/app/web/test/e2e/runner.js similarity index 100% rename from 05_Web_Front/test/e2e/runner.js rename to app/web/test/e2e/runner.js diff --git a/05_Web_Front/test/e2e/specs/test.js b/app/web/test/e2e/specs/test.js similarity index 100% rename from 05_Web_Front/test/e2e/specs/test.js rename to app/web/test/e2e/specs/test.js diff --git a/05_Web_Front/test/unit/.eslintrc b/app/web/test/unit/.eslintrc similarity index 100% rename from 05_Web_Front/test/unit/.eslintrc rename to app/web/test/unit/.eslintrc diff --git a/05_Web_Front/test/unit/jest.conf.js b/app/web/test/unit/jest.conf.js similarity index 100% rename from 05_Web_Front/test/unit/jest.conf.js rename to app/web/test/unit/jest.conf.js diff --git a/05_Web_Front/test/unit/setup.js b/app/web/test/unit/setup.js similarity index 100% rename from 05_Web_Front/test/unit/setup.js rename to app/web/test/unit/setup.js diff --git a/05_Web_Front/test/unit/specs/HelloWorld.spec.js b/app/web/test/unit/specs/HelloWorld.spec.js similarity index 100% rename from 05_Web_Front/test/unit/specs/HelloWorld.spec.js rename to app/web/test/unit/specs/HelloWorld.spec.js diff --git a/06_ExchangeRobot/.keep "b/docs/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/.keep" similarity index 100% rename from 06_ExchangeRobot/.keep rename to "docs/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/.keep" diff --git "a/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" "b/docs/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" similarity index 100% rename from "09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" rename to "docs/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" diff --git "a/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" "b/docs/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" similarity index 100% rename from "09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" rename to "docs/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" diff --git "a/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" "b/docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" similarity index 100% rename from "09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" rename to "docs/09_DOC/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" diff --git "a/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" "b/docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" similarity index 100% rename from "09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" rename to "docs/09_DOC/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" diff --git "a/09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/.keep" "b/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/.keep" similarity index 100% rename from "09_DOC/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/.keep" rename to "docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/.keep" diff --git "a/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" "b/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" new file mode 100644 index 00000000..63172772 --- /dev/null +++ "b/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/default.conf" @@ -0,0 +1,82 @@ +server { + listen 8801; #不用80端口可绕过备案 + server_name localhost; + + #charset koi8-r; + #access_log /var/log/nginx/host.access.log main; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + server_name locahost; + location /market { + client_max_body_size 5m; + proxy_pass http://localhost:6004; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Scheme $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + location /exchange { + client_max_body_size 5m; + proxy_pass http://localhost:6003; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + location /uc { + client_max_body_size 5m; + proxy_pass http://localhost:6001; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + location /admin { + client_max_body_size 5m; + proxy_pass http://localhost:6010; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + location /chat { + client_max_body_size 5m; + proxy_pass http://localhost:6008; + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Real-IP $remote_addr; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} + diff --git "a/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" "b/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" new file mode 100644 index 00000000..9e71c6f0 --- /dev/null +++ "b/docs/Nginx\351\205\215\347\275\256\346\226\207\344\273\266/https\351\205\215\347\275\256\346\226\207\344\273\266/nginx.conf" @@ -0,0 +1,217 @@ + +#user nobody; +worker_processes 2; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +pid logs/nginx.pid; + + +events { + worker_connections 1024; +} + + +#监听socket端口 +stream{ + upstream market_server{ + hash $remote_addr consistent; + server 49.234.13.106:28901; + } + server { + listen 28901; + proxy_pass market_server; + } + + upstream otc_heart_server{ + hash $remote_addr consistent; + server 49.234.13.106:28902; + } + server { + listen 28902; + proxy_pass otc_heart_server; + } +} + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + server { + listen 80; + server_name api.xxxx.com; + rewrite ^(.*)$ https://$host$1 permanent; + location / { + add_header 'Access-Control-Allow-Origin' '*' always; + proxy_pass http://111.111.111.111:8801; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Scheme $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + break; + } + } + + server { + listen 80; + server_name www.xxxx.com; + + #charset koi8-r; + + #access_log logs/host.access.log main; + + rewrite ^(.*)$ https://$host$1 permanent; + + location / { + root html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + location ~ .*.(eot|ttf|ttc|otf|eot|woff|woff2|svg)(.*) { + add_header Access-Control-Allow-Origin http://www.xxxx.com; + } + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } + + server { + listen 80; + server_name xxxx.com; + rewrite ^(.*)$ https://$host$1 permanent; + #charset koi8-r; + + #access_log logs/host.access.log main; + + location / { + root html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + location ~ .*.(eot|ttf|ttc|otf|eot|woff|woff2|svg)(.*) { + add_header Access-Control-Allow-Origin http://www.xxxx.com; + } + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } + + server { + listen 443 ssl; + server_name www.xxxx.com; + ssl on; + ssl_certificate /usr/local/nginx/ssl/1_www.xxxx.com_bundle.crt; + ssl_certificate_key /usr/local/nginx/ssl/2_www.xxxx.com.key; + ssl_session_cache shared:SSL:1m; + ssl_session_timeout 5m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL; + ssl_prefer_server_ciphers on; + location / { + root html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + } + + server { + listen 443 ssl; + server_name xxxx.com; + ssl on; + ssl_certificate /usr/local/nginx/ssl/1_www.xxxx.com_bundle.crt; + ssl_certificate_key /usr/local/nginx/ssl/2_www.xxxx.com.key; + ssl_session_cache shared:SSL:1m; + ssl_session_timeout 5m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL; + ssl_prefer_server_ciphers on; + location / { + root html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + } + + server { + listen 443 ssl; + server_name api.xxxx.com; + ssl on; + ssl_certificate /usr/local/nginx/ssl/1_api.xxxx.com_bundle.crt; + ssl_certificate_key /usr/local/nginx/ssl/2_api.xxxx.com.key; + ssl_session_cache shared:SSL:1m; + ssl_session_timeout 5m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL; + ssl_prefer_server_ciphers on; + location / { + proxy_pass http://49.234.13.106:8801; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Scheme $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + break; + } + } + + # another virtual host using mix of IP-, name-, and port-based configuration + # + #server { + # listen 8000; + # listen somename:8080; + # server_name somename alias another.alias; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + +} diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" new file mode 100644 index 00000000..503168c8 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/01_\351\246\226\351\241\265.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" new file mode 100644 index 00000000..5da9f4a6 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/02_\345\270\201\345\270\201\344\272\244\346\230\223.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" new file mode 100644 index 00000000..eb110a9b Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/03_\346\263\225\345\270\201\344\272\244\346\230\223CTC.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" new file mode 100644 index 00000000..240b0c02 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" new file mode 100644 index 00000000..a6e6453c Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/05_\345\205\254\345\221\212.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" new file mode 100644 index 00000000..05366f34 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\256\345\212\251\344\270\255\345\277\203.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" new file mode 100644 index 00000000..12c61f80 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\216\250\345\271\277\345\220\210\344\274\231\344\272\272.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" new file mode 100644 index 00000000..a8f4e303 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\205\254\345\221\212\350\257\246\346\203\205.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" new file mode 100644 index 00000000..3cf37ec2 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\345\210\233\346\226\260\345\256\236\351\252\214\345\256\244\350\257\246\346\203\205.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" new file mode 100644 index 00000000..ff91a456 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\346\263\250\345\206\214.png" differ diff --git "a/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" new file mode 100644 index 00000000..30e51355 Binary files /dev/null and "b/docs/PC\347\253\257\350\277\220\350\241\214\346\210\252\345\233\276/\347\231\273\345\275\225.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" new file mode 100644 index 00000000..17fb71ea Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/00_\351\246\226\351\241\265/QQ\346\210\252\345\233\27620200325105611.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" new file mode 100644 index 00000000..93414f5d Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105658.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" new file mode 100644 index 00000000..44c62d48 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105734.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" new file mode 100644 index 00000000..2ad58d05 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105758.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" new file mode 100644 index 00000000..83039ff2 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105823.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" new file mode 100644 index 00000000..ce2b3d2a Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/01_\344\274\232\345\221\230\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105841.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" new file mode 100644 index 00000000..3a242be2 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105858.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" new file mode 100644 index 00000000..25a3f234 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105914.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" new file mode 100644 index 00000000..7d399cdb Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/02_\351\202\200\350\257\267\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105926.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" new file mode 100644 index 00000000..b7214d7b Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325105949.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" new file mode 100644 index 00000000..24290d0a Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/03_CTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110013.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" new file mode 100644 index 00000000..4e829ee1 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110038.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" new file mode 100644 index 00000000..7417a400 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110052.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" new file mode 100644 index 00000000..8e1b589a Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110105.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" new file mode 100644 index 00000000..321c5856 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110111.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" new file mode 100644 index 00000000..33790430 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110122.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" new file mode 100644 index 00000000..adfabad5 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/04_\345\206\205\345\256\271\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110127.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" new file mode 100644 index 00000000..99779964 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110135.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" new file mode 100644 index 00000000..4871da32 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110221.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" new file mode 100644 index 00000000..a2f8d151 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110236.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" new file mode 100644 index 00000000..be0a9b13 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110244.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" new file mode 100644 index 00000000..f72fe7d4 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110258.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" new file mode 100644 index 00000000..78fec9c4 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110304.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" new file mode 100644 index 00000000..4b3fc60b Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110329.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" new file mode 100644 index 00000000..a12f7191 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/05_\350\264\242\345\212\241\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110336.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" new file mode 100644 index 00000000..842ad620 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110345.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" new file mode 100644 index 00000000..ea356d30 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110355.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" new file mode 100644 index 00000000..1fcd6b12 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110415.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" new file mode 100644 index 00000000..7238b347 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110421.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" new file mode 100644 index 00000000..471b2c33 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110436.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" new file mode 100644 index 00000000..3e524a9b Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110446.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" new file mode 100644 index 00000000..3a9820ee Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/06_\345\270\201\345\270\201\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110503.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" new file mode 100644 index 00000000..79518a57 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110515.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" new file mode 100644 index 00000000..96c62a6e Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110528.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" new file mode 100644 index 00000000..7d0889df Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/07_\346\264\273\345\212\250\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110549.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" new file mode 100644 index 00000000..5ad19d88 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110559.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" new file mode 100644 index 00000000..2c4d4823 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110624.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" new file mode 100644 index 00000000..bd358d75 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110633.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" new file mode 100644 index 00000000..1b1e994e Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/08_\347\272\242\345\214\205\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110641.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" new file mode 100644 index 00000000..0d112261 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110647.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" new file mode 100644 index 00000000..34eefcf2 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110658.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" new file mode 100644 index 00000000..6711b2f8 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110711.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" new file mode 100644 index 00000000..73fa487a Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110717.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" new file mode 100644 index 00000000..ee7260ee Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110730.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" new file mode 100644 index 00000000..7b76c956 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110735.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" new file mode 100644 index 00000000..601d7b09 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110744.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" new file mode 100644 index 00000000..50419d52 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110756.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" new file mode 100644 index 00000000..37f20a1f Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110804.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" new file mode 100644 index 00000000..36105ad6 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110825.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" new file mode 100644 index 00000000..485cf599 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110837.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" new file mode 100644 index 00000000..3133929b Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110845.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" new file mode 100644 index 00000000..0cf3c854 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/09_\347\263\273\347\273\237\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110850.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" new file mode 100644 index 00000000..42201921 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110856.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" new file mode 100644 index 00000000..267e83eb Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/10_\344\277\235\350\257\201\351\207\221\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110901.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" new file mode 100644 index 00000000..b4c8e01a Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110907.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" new file mode 100644 index 00000000..9e9edaeb Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110919.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" new file mode 100644 index 00000000..3d847555 Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110925.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" new file mode 100644 index 00000000..3e7daced Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110930.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" new file mode 100644 index 00000000..5583099f Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110935.png" differ diff --git "a/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" new file mode 100644 index 00000000..bf25f82b Binary files /dev/null and "b/docs/\347\256\241\347\220\206\345\220\216\345\217\260\350\277\220\350\241\214\346\210\252\345\233\276/11_OTC\347\256\241\347\220\206/QQ\346\210\252\345\233\27620200325110939.png" differ diff --git a/00_framework/exchange-api/.classpath b/framework/admin/.classpath similarity index 58% rename from 00_framework/exchange-api/.classpath rename to framework/admin/.classpath index 87c8faa7..e14e6aa7 100644 --- a/00_framework/exchange-api/.classpath +++ b/framework/admin/.classpath @@ -9,16 +9,19 @@ + + + @@ -38,5 +41,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/admin/.gitignore b/framework/admin/.gitignore similarity index 100% rename from 00_framework/admin/.gitignore rename to framework/admin/.gitignore diff --git a/00_framework/admin/.project b/framework/admin/.project similarity index 64% rename from 00_framework/admin/.project rename to framework/admin/.project index 15234ef5..bccdc443 100644 --- a/00_framework/admin/.project +++ b/framework/admin/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866779 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/admin/.settings/org.eclipse.core.resources.prefs b/framework/admin/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/admin/.settings/org.eclipse.core.resources.prefs rename to framework/admin/.settings/org.eclipse.core.resources.prefs diff --git a/framework/admin/.settings/org.eclipse.jdt.apt.core.prefs b/framework/admin/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/admin/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/admin/.settings/org.eclipse.jdt.core.prefs b/framework/admin/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/admin/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/admin/.settings/org.eclipse.m2e.core.prefs b/framework/admin/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/admin/.settings/org.eclipse.m2e.core.prefs rename to framework/admin/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/admin/pom.xml b/framework/admin/pom.xml similarity index 100% rename from 00_framework/admin/pom.xml rename to framework/admin/pom.xml diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/ForkJoin/ForkJoinWork.java b/framework/admin/src/main/java/com/bizzan/bitrade/ForkJoin/ForkJoinWork.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/ForkJoin/ForkJoinWork.java rename to framework/admin/src/main/java/com/bizzan/bitrade/ForkJoin/ForkJoinWork.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/WebApplication.java b/framework/admin/src/main/java/com/bizzan/bitrade/WebApplication.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/WebApplication.java rename to framework/admin/src/main/java/com/bizzan/bitrade/WebApplication.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/MongoConfig.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/MongoConfig.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/MongoConfig.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/MongoConfig.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/config/ShiroConfig.java b/framework/admin/src/main/java/com/bizzan/bitrade/config/ShiroConfig.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/config/ShiroConfig.java rename to framework/admin/src/main/java/com/bizzan/bitrade/config/ShiroConfig.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/ActivityController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/ActivityController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/ActivityController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/ActivityController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/MemberSignRecordControler.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/MemberSignRecordControler.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/MemberSignRecordControler.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/MemberSignRecordControler.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/SignController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/SignController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/SignController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/activity/SignController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/authno/AuthExchangeCoinController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/authno/AuthExchangeCoinController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/authno/AuthExchangeCoinController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/authno/AuthExchangeCoinController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessAuthController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessAuthController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessAuthController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessAuthController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessCancelApplyController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessCancelApplyController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessCancelApplyController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/businessAuth/BusinessCancelApplyController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/AdvertiseController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/AdvertiseController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/AdvertiseController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/AdvertiseController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/HelpController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/HelpController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/HelpController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/cms/HelpController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/code/SmsProviderController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/code/SmsProviderController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/code/SmsProviderController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/code/SmsProviderController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/BaseAdminController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/common/BaseAdminController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/BaseAdminController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/common/BaseAdminController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/GlobalController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/common/GlobalController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/GlobalController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/common/GlobalController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/IndexController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/common/IndexController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/IndexController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/common/IndexController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/UploadController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/common/UploadController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/common/UploadController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/common/UploadController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcAcceptorController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcAcceptorController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcAcceptorController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcAcceptorController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcOrderController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcOrderController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcOrderController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/ctc/AdminCtcOrderController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeCoinController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeCoinController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeCoinController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeCoinController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeInitPlateController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeInitPlateController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeInitPlateController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeInitPlateController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderDetailController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderDetailController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderDetailController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderDetailController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderMineDetailController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderMineDetailController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderMineDetailController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/ExchangeOrderMineDetailController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/HTLExchangeInitPlateController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/HTLExchangeInitPlateController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/HTLExchangeInitPlateController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/exchange/HTLExchangeInitPlateController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/ExchangeTransactionController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/ExchangeTransactionController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/ExchangeTransactionController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/ExchangeTransactionController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/FinanceStatisticsController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/FinanceStatisticsController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/FinanceStatisticsController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/FinanceStatisticsController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberDepositRecordController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberDepositRecordController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberDepositRecordController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberDepositRecordController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberTransactionController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberTransactionController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberTransactionController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/MemberTransactionController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/WithdrawRecordController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/WithdrawRecordController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/WithdrawRecordController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/finance/WithdrawRecordController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/index/IndexController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/index/IndexController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/index/IndexController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/index/IndexController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/InviteManagementController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/InviteManagementController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/InviteManagementController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/InviteManagementController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletRechargeController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletRechargeController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletRechargeController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletRechargeController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletWithdrawController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletWithdrawController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletWithdrawController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/LegalWalletWithdrawController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberApplicationController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberApplicationController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberApplicationController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberApplicationController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberLevelController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberLevelController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberLevelController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberLevelController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberWalletController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberWalletController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberWalletController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/member/MemberWalletController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAdvertiseController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAdvertiseController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAdvertiseController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAdvertiseController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAppealController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAppealController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAppealController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminAppealController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOrderController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOrderController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOrderController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOrderController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOtcCoinController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOtcCoinController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOtcCoinController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/otc/AdminOtcCoinController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/MemberPromotionController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/MemberPromotionController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/MemberPromotionController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/MemberPromotionController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardPromotionController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardPromotionController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardPromotionController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardPromotionController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardRecordController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardRecordController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardRecordController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/promotion/RewardRecordController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/redenvelope/RedEnvelopeController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/redenvelope/RedEnvelopeController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/redenvelope/RedEnvelopeController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/redenvelope/RedEnvelopeController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AccessLogController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AccessLogController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AccessLogController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AccessLogController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AnnouncementController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AnnouncementController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AnnouncementController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AnnouncementController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AppRevisionController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AppRevisionController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AppRevisionController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/AppRevisionController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/CoinController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/CoinController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/CoinController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/CoinController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DataDictionaryController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DataDictionaryController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DataDictionaryController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DataDictionaryController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DepartmentController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DepartmentController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DepartmentController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DepartmentController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DividendController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DividendController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DividendController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/DividendController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/EmployeeController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/EmployeeController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/EmployeeController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/EmployeeController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/GoogleVerificationController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/GoogleVerificationController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/GoogleVerificationController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/GoogleVerificationController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberApplicationConfigController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberApplicationConfigController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberApplicationConfigController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberApplicationConfigController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberBonusController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberBonusController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberBonusController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/MemberBonusController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/PermissionController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/PermissionController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/PermissionController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/PermissionController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RewardActivityRecordController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RewardActivityRecordController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RewardActivityRecordController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RewardActivityRecordController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RoleController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RoleController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RoleController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/RoleController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/StatisticsController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/StatisticsController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/StatisticsController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/StatisticsController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/TransferAddressController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/TransferAddressController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/TransferAddressController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/TransferAddressController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/WebsiteInformationController.java b/framework/admin/src/main/java/com/bizzan/bitrade/controller/system/WebsiteInformationController.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/controller/system/WebsiteInformationController.java rename to framework/admin/src/main/java/com/bizzan/bitrade/controller/system/WebsiteInformationController.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/core/AdminMyControllerAdvice.java b/framework/admin/src/main/java/com/bizzan/bitrade/core/AdminMyControllerAdvice.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/core/AdminMyControllerAdvice.java rename to framework/admin/src/main/java/com/bizzan/bitrade/core/AdminMyControllerAdvice.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/core/AdminRealm.java b/framework/admin/src/main/java/com/bizzan/bitrade/core/AdminRealm.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/core/AdminRealm.java rename to framework/admin/src/main/java/com/bizzan/bitrade/core/AdminRealm.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/core/CustomDateConverter.java b/framework/admin/src/main/java/com/bizzan/bitrade/core/CustomDateConverter.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/core/CustomDateConverter.java rename to framework/admin/src/main/java/com/bizzan/bitrade/core/CustomDateConverter.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/event/OrderEvent.java b/framework/admin/src/main/java/com/bizzan/bitrade/event/OrderEvent.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/event/OrderEvent.java rename to framework/admin/src/main/java/com/bizzan/bitrade/event/OrderEvent.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/interceptor/LogInterceptor.java b/framework/admin/src/main/java/com/bizzan/bitrade/interceptor/LogInterceptor.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/interceptor/LogInterceptor.java rename to framework/admin/src/main/java/com/bizzan/bitrade/interceptor/LogInterceptor.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/interceptor/OutExcelInterceptor.java b/framework/admin/src/main/java/com/bizzan/bitrade/interceptor/OutExcelInterceptor.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/interceptor/OutExcelInterceptor.java rename to framework/admin/src/main/java/com/bizzan/bitrade/interceptor/OutExcelInterceptor.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/interceptor/SessionInterceptor.java b/framework/admin/src/main/java/com/bizzan/bitrade/interceptor/SessionInterceptor.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/interceptor/SessionInterceptor.java rename to framework/admin/src/main/java/com/bizzan/bitrade/interceptor/SessionInterceptor.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCoinRPCJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCoinRPCJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCoinRPCJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCoinRPCJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCtcOrderJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCtcOrderJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCtcOrderJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/CheckCtcOrderJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckDepositJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/CheckDepositJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckDepositJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/CheckDepositJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckMemberApplicationJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/CheckMemberApplicationJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckMemberApplicationJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/CheckMemberApplicationJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckRedEnvelopeJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/CheckRedEnvelopeJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckRedEnvelopeJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/CheckRedEnvelopeJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckWithdrawJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/CheckWithdrawJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/CheckWithdrawJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/CheckWithdrawJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/DumpHistoryJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/DumpHistoryJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/DumpHistoryJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/DumpHistoryJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/MemberStatisticsJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/MemberStatisticsJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/MemberStatisticsJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/MemberStatisticsJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/MiningsJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/MiningsJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/MiningsJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/MiningsJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/job/SystemAdvertiseJob.java b/framework/admin/src/main/java/com/bizzan/bitrade/job/SystemAdvertiseJob.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/job/SystemAdvertiseJob.java rename to framework/admin/src/main/java/com/bizzan/bitrade/job/SystemAdvertiseJob.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/MemberPromotionScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/MemberPromotionScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/MemberPromotionScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/MemberPromotionScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/RewardRecordScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/RewardRecordScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/RewardRecordScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/RewardRecordScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/create/AppRevisionCreate.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/create/AppRevisionCreate.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/create/AppRevisionCreate.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/create/AppRevisionCreate.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/create/DataDictionaryCreate.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/create/DataDictionaryCreate.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/create/DataDictionaryCreate.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/create/DataDictionaryCreate.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/create/SignCreate.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/create/SignCreate.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/create/SignCreate.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/create/SignCreate.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AccountScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AccountScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AccountScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AccountScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppRevisionScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppRevisionScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppRevisionScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppRevisionScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppealScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppealScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppealScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/AppealScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeCoinScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeCoinScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeCoinScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeCoinScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeOrderScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeOrderScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeOrderScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeOrderScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeTradeScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeTradeScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeTradeScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/ExchangeTradeScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletRechargeScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletRechargeScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletRechargeScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletRechargeScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletWithdrawScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletWithdrawScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletWithdrawScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/LegalWalletWithdrawScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberApplicationScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberApplicationScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberApplicationScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberApplicationScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberDepositScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberDepositScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberDepositScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberDepositScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberSignRecordScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberSignRecordScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberSignRecordScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberSignRecordScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberTransactionScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberTransactionScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberTransactionScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberTransactionScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberWalletScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberWalletScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberWalletScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/MemberWalletScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OrderScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OrderScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OrderScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OrderScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderExcelScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderExcelScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderExcelScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderExcelScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderTopScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderTopScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderTopScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/OtcOrderTopScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SignScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SignScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SignScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SignScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SysAdvertiseScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SysAdvertiseScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SysAdvertiseScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/SysAdvertiseScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/TransferAddressScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/TransferAddressScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/TransferAddressScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/TransferAddressScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/WithdrawRecordScreen.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/screen/WithdrawRecordScreen.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/screen/WithdrawRecordScreen.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/screen/WithdrawRecordScreen.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/update/AppRevisionUpdate.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/update/AppRevisionUpdate.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/update/AppRevisionUpdate.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/update/AppRevisionUpdate.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/update/DataDictionaryUpdate.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/update/DataDictionaryUpdate.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/update/DataDictionaryUpdate.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/update/DataDictionaryUpdate.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/update/SignUpdate.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/update/SignUpdate.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/update/SignUpdate.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/update/SignUpdate.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberSignRecordVO.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberSignRecordVO.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberSignRecordVO.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberSignRecordVO.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberTransaction2ESVO.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberTransaction2ESVO.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberTransaction2ESVO.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/vo/MemberTransaction2ESVO.java diff --git a/00_framework/admin/src/main/java/com/bizzan/bitrade/model/vo/SignVO.java b/framework/admin/src/main/java/com/bizzan/bitrade/model/vo/SignVO.java similarity index 100% rename from 00_framework/admin/src/main/java/com/bizzan/bitrade/model/vo/SignVO.java rename to framework/admin/src/main/java/com/bizzan/bitrade/model/vo/SignVO.java diff --git a/00_framework/admin/src/main/resources/dev/application.properties b/framework/admin/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/admin/src/main/resources/dev/application.properties rename to framework/admin/src/main/resources/dev/application.properties diff --git a/00_framework/admin/src/main/resources/dev/ehcache-shiro.xml b/framework/admin/src/main/resources/dev/ehcache-shiro.xml similarity index 100% rename from 00_framework/admin/src/main/resources/dev/ehcache-shiro.xml rename to framework/admin/src/main/resources/dev/ehcache-shiro.xml diff --git a/00_framework/admin/src/main/resources/dev/i18n/messages_en_US.properties b/framework/admin/src/main/resources/dev/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/admin/src/main/resources/dev/i18n/messages_en_US.properties rename to framework/admin/src/main/resources/dev/i18n/messages_en_US.properties diff --git a/00_framework/admin/src/main/resources/dev/i18n/messages_zh_CN.properties b/framework/admin/src/main/resources/dev/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/admin/src/main/resources/dev/i18n/messages_zh_CN.properties rename to framework/admin/src/main/resources/dev/i18n/messages_zh_CN.properties diff --git a/00_framework/admin/src/main/resources/dev/logback-spring.xml b/framework/admin/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/admin/src/main/resources/dev/logback-spring.xml rename to framework/admin/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/admin/src/main/resources/dev/templates/coinCheck.ftl b/framework/admin/src/main/resources/dev/templates/coinCheck.ftl similarity index 100% rename from 00_framework/admin/src/main/resources/dev/templates/coinCheck.ftl rename to framework/admin/src/main/resources/dev/templates/coinCheck.ftl diff --git a/00_framework/admin/src/main/resources/dev/templates/simpleMessage.ftl b/framework/admin/src/main/resources/dev/templates/simpleMessage.ftl similarity index 100% rename from 00_framework/admin/src/main/resources/dev/templates/simpleMessage.ftl rename to framework/admin/src/main/resources/dev/templates/simpleMessage.ftl diff --git a/00_framework/admin/src/main/resources/prod/application.properties b/framework/admin/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/admin/src/main/resources/prod/application.properties rename to framework/admin/src/main/resources/prod/application.properties diff --git a/00_framework/admin/src/main/resources/prod/ehcache-shiro.xml b/framework/admin/src/main/resources/prod/ehcache-shiro.xml similarity index 100% rename from 00_framework/admin/src/main/resources/prod/ehcache-shiro.xml rename to framework/admin/src/main/resources/prod/ehcache-shiro.xml diff --git a/00_framework/admin/src/main/resources/prod/i18n/messages_en_US.properties b/framework/admin/src/main/resources/prod/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/admin/src/main/resources/prod/i18n/messages_en_US.properties rename to framework/admin/src/main/resources/prod/i18n/messages_en_US.properties diff --git a/00_framework/admin/src/main/resources/prod/i18n/messages_zh_CN.properties b/framework/admin/src/main/resources/prod/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/admin/src/main/resources/prod/i18n/messages_zh_CN.properties rename to framework/admin/src/main/resources/prod/i18n/messages_zh_CN.properties diff --git a/00_framework/admin/src/main/resources/prod/logback-spring.xml b/framework/admin/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/admin/src/main/resources/prod/logback-spring.xml rename to framework/admin/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/admin/src/main/resources/sql/admin_permission_201803161820.sql b/framework/admin/src/main/resources/sql/admin_permission_201803161820.sql similarity index 100% rename from 00_framework/admin/src/main/resources/sql/admin_permission_201803161820.sql rename to framework/admin/src/main/resources/sql/admin_permission_201803161820.sql diff --git a/00_framework/admin/src/main/resources/test/application.properties b/framework/admin/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/admin/src/main/resources/test/application.properties rename to framework/admin/src/main/resources/test/application.properties diff --git a/00_framework/admin/src/main/resources/test/ehcache-shiro.xml b/framework/admin/src/main/resources/test/ehcache-shiro.xml similarity index 100% rename from 00_framework/admin/src/main/resources/test/ehcache-shiro.xml rename to framework/admin/src/main/resources/test/ehcache-shiro.xml diff --git a/00_framework/admin/src/main/resources/test/i18n/messages_en_US.properties b/framework/admin/src/main/resources/test/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/admin/src/main/resources/test/i18n/messages_en_US.properties rename to framework/admin/src/main/resources/test/i18n/messages_en_US.properties diff --git a/00_framework/admin/src/main/resources/test/i18n/messages_zh_CN.properties b/framework/admin/src/main/resources/test/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/admin/src/main/resources/test/i18n/messages_zh_CN.properties rename to framework/admin/src/main/resources/test/i18n/messages_zh_CN.properties diff --git a/00_framework/admin/src/main/resources/test/logback-spring.xml b/framework/admin/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/admin/src/main/resources/test/logback-spring.xml rename to framework/admin/src/main/resources/test/logback-spring.xml diff --git a/00_framework/admin/src/test/java/com/bizzan/bitrade/DividendControllerTest.java b/framework/admin/src/test/java/com/bizzan/bitrade/DividendControllerTest.java similarity index 100% rename from 00_framework/admin/src/test/java/com/bizzan/bitrade/DividendControllerTest.java rename to framework/admin/src/test/java/com/bizzan/bitrade/DividendControllerTest.java diff --git a/00_framework/admin/src/test/java/com/bizzan/bitrade/WebApplicationTest.java b/framework/admin/src/test/java/com/bizzan/bitrade/WebApplicationTest.java similarity index 100% rename from 00_framework/admin/src/test/java/com/bizzan/bitrade/WebApplicationTest.java rename to framework/admin/src/test/java/com/bizzan/bitrade/WebApplicationTest.java diff --git a/framework/bitrade-job/.classpath b/framework/bitrade-job/.classpath new file mode 100644 index 00000000..e14e6aa7 --- /dev/null +++ b/framework/bitrade-job/.classpath @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/bitrade-job/.gitignore b/framework/bitrade-job/.gitignore similarity index 100% rename from 00_framework/bitrade-job/.gitignore rename to framework/bitrade-job/.gitignore diff --git a/00_framework/bitrade-job/.project b/framework/bitrade-job/.project similarity index 64% rename from 00_framework/bitrade-job/.project rename to framework/bitrade-job/.project index a7501d40..83422716 100644 --- a/00_framework/bitrade-job/.project +++ b/framework/bitrade-job/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866782 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/bitrade-job/.settings/org.eclipse.core.resources.prefs b/framework/bitrade-job/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/bitrade-job/.settings/org.eclipse.core.resources.prefs rename to framework/bitrade-job/.settings/org.eclipse.core.resources.prefs diff --git a/framework/bitrade-job/.settings/org.eclipse.jdt.apt.core.prefs b/framework/bitrade-job/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/bitrade-job/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/bitrade-job/.settings/org.eclipse.jdt.core.prefs b/framework/bitrade-job/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/bitrade-job/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/bitrade-job/.settings/org.eclipse.m2e.core.prefs b/framework/bitrade-job/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/bitrade-job/.settings/org.eclipse.m2e.core.prefs rename to framework/bitrade-job/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/bitrade-job/pom.xml b/framework/bitrade-job/pom.xml similarity index 100% rename from 00_framework/bitrade-job/pom.xml rename to framework/bitrade-job/pom.xml diff --git a/00_framework/bitrade-job/src/main/java/com/bizzan/bitrade/JobApplication.java b/framework/bitrade-job/src/main/java/com/bizzan/bitrade/JobApplication.java similarity index 100% rename from 00_framework/bitrade-job/src/main/java/com/bizzan/bitrade/JobApplication.java rename to framework/bitrade-job/src/main/java/com/bizzan/bitrade/JobApplication.java diff --git a/00_framework/bitrade-job/src/main/resources/dev/application.properties b/framework/bitrade-job/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/dev/application.properties rename to framework/bitrade-job/src/main/resources/dev/application.properties diff --git a/00_framework/bitrade-job/src/main/resources/dev/i18n/messages_en_US.properties b/framework/bitrade-job/src/main/resources/dev/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/dev/i18n/messages_en_US.properties rename to framework/bitrade-job/src/main/resources/dev/i18n/messages_en_US.properties diff --git a/00_framework/bitrade-job/src/main/resources/dev/i18n/messages_zh_CN.properties b/framework/bitrade-job/src/main/resources/dev/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/dev/i18n/messages_zh_CN.properties rename to framework/bitrade-job/src/main/resources/dev/i18n/messages_zh_CN.properties diff --git a/00_framework/bitrade-job/src/main/resources/dev/logback-spring.xml b/framework/bitrade-job/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/dev/logback-spring.xml rename to framework/bitrade-job/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/bitrade-job/src/main/resources/prod/application.properties b/framework/bitrade-job/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/prod/application.properties rename to framework/bitrade-job/src/main/resources/prod/application.properties diff --git a/00_framework/bitrade-job/src/main/resources/prod/i18n/messages_en_US.properties b/framework/bitrade-job/src/main/resources/prod/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/prod/i18n/messages_en_US.properties rename to framework/bitrade-job/src/main/resources/prod/i18n/messages_en_US.properties diff --git a/00_framework/bitrade-job/src/main/resources/prod/i18n/messages_zh_CN.properties b/framework/bitrade-job/src/main/resources/prod/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/prod/i18n/messages_zh_CN.properties rename to framework/bitrade-job/src/main/resources/prod/i18n/messages_zh_CN.properties diff --git a/00_framework/bitrade-job/src/main/resources/prod/logback-spring.xml b/framework/bitrade-job/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/prod/logback-spring.xml rename to framework/bitrade-job/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/bitrade-job/src/main/resources/test/application.properties b/framework/bitrade-job/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/test/application.properties rename to framework/bitrade-job/src/main/resources/test/application.properties diff --git a/00_framework/bitrade-job/src/main/resources/test/i18n/messages_en_US.properties b/framework/bitrade-job/src/main/resources/test/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/test/i18n/messages_en_US.properties rename to framework/bitrade-job/src/main/resources/test/i18n/messages_en_US.properties diff --git a/00_framework/bitrade-job/src/main/resources/test/i18n/messages_zh_CN.properties b/framework/bitrade-job/src/main/resources/test/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/test/i18n/messages_zh_CN.properties rename to framework/bitrade-job/src/main/resources/test/i18n/messages_zh_CN.properties diff --git a/00_framework/bitrade-job/src/main/resources/test/logback-spring.xml b/framework/bitrade-job/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/bitrade-job/src/main/resources/test/logback-spring.xml rename to framework/bitrade-job/src/main/resources/test/logback-spring.xml diff --git a/framework/chat/.classpath b/framework/chat/.classpath new file mode 100644 index 00000000..e14e6aa7 --- /dev/null +++ b/framework/chat/.classpath @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/chat/.gitignore b/framework/chat/.gitignore similarity index 100% rename from 00_framework/chat/.gitignore rename to framework/chat/.gitignore diff --git a/framework/chat/.project b/framework/chat/.project new file mode 100644 index 00000000..df8d0702 --- /dev/null +++ b/framework/chat/.project @@ -0,0 +1,34 @@ + + + chat + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866786 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/00_framework/chat/.settings/org.eclipse.core.resources.prefs b/framework/chat/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/chat/.settings/org.eclipse.core.resources.prefs rename to framework/chat/.settings/org.eclipse.core.resources.prefs diff --git a/framework/chat/.settings/org.eclipse.jdt.apt.core.prefs b/framework/chat/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/chat/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/chat/.settings/org.eclipse.jdt.core.prefs b/framework/chat/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/chat/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/chat/.settings/org.eclipse.m2e.core.prefs b/framework/chat/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/chat/.settings/org.eclipse.m2e.core.prefs rename to framework/chat/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/chat/lib/apns-http2-core-1.3.jar b/framework/chat/lib/apns-http2-core-1.3.jar similarity index 100% rename from 00_framework/chat/lib/apns-http2-core-1.3.jar rename to framework/chat/lib/apns-http2-core-1.3.jar diff --git a/00_framework/chat/lib/aqmd-netty-2.0.1.jar b/framework/chat/lib/aqmd-netty-2.0.1.jar similarity index 100% rename from 00_framework/chat/lib/aqmd-netty-2.0.1.jar rename to framework/chat/lib/aqmd-netty-2.0.1.jar diff --git a/00_framework/chat/lib/aqmd-netty-api-2.0.1.jar b/framework/chat/lib/aqmd-netty-api-2.0.1.jar similarity index 100% rename from 00_framework/chat/lib/aqmd-netty-api-2.0.1.jar rename to framework/chat/lib/aqmd-netty-api-2.0.1.jar diff --git a/00_framework/chat/lib/aqmd-netty-core-2.0.1.jar b/framework/chat/lib/aqmd-netty-core-2.0.1.jar similarity index 100% rename from 00_framework/chat/lib/aqmd-netty-core-2.0.1.jar rename to framework/chat/lib/aqmd-netty-core-2.0.1.jar diff --git a/00_framework/chat/pom.xml b/framework/chat/pom.xml similarity index 100% rename from 00_framework/chat/pom.xml rename to framework/chat/pom.xml diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/ChatApplication.java b/framework/chat/src/main/java/com/bizzan/bitrade/ChatApplication.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/ChatApplication.java rename to framework/chat/src/main/java/com/bizzan/bitrade/ChatApplication.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/config/ApnsConfig.java b/framework/chat/src/main/java/com/bizzan/bitrade/config/ApnsConfig.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/config/ApnsConfig.java rename to framework/chat/src/main/java/com/bizzan/bitrade/config/ApnsConfig.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java b/framework/chat/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java rename to framework/chat/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java b/framework/chat/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java rename to framework/chat/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java b/framework/chat/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java rename to framework/chat/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/controller/HistoryMessageController.java b/framework/chat/src/main/java/com/bizzan/bitrade/controller/HistoryMessageController.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/controller/HistoryMessageController.java rename to framework/chat/src/main/java/com/bizzan/bitrade/controller/HistoryMessageController.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/controller/WebSocketController.java b/framework/chat/src/main/java/com/bizzan/bitrade/controller/WebSocketController.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/controller/WebSocketController.java rename to framework/chat/src/main/java/com/bizzan/bitrade/controller/WebSocketController.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/BaseMessage.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/BaseMessage.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/BaseMessage.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/BaseMessage.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/ChatMessageRecord.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/ChatMessageRecord.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/ChatMessageRecord.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/ChatMessageRecord.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/ConfirmResult.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/ConfirmResult.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/ConfirmResult.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/ConfirmResult.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryChatMessage.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryChatMessage.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryChatMessage.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryChatMessage.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryMessagePage.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryMessagePage.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryMessagePage.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/HistoryMessagePage.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/MessageTypeEnum.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/MessageTypeEnum.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/MessageTypeEnum.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/MessageTypeEnum.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/entity/RealTimeChatMessage.java b/framework/chat/src/main/java/com/bizzan/bitrade/entity/RealTimeChatMessage.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/entity/RealTimeChatMessage.java rename to framework/chat/src/main/java/com/bizzan/bitrade/entity/RealTimeChatMessage.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/handler/ApnsHandler.java b/framework/chat/src/main/java/com/bizzan/bitrade/handler/ApnsHandler.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/handler/ApnsHandler.java rename to framework/chat/src/main/java/com/bizzan/bitrade/handler/ApnsHandler.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/handler/ChatMessageHandler.java b/framework/chat/src/main/java/com/bizzan/bitrade/handler/ChatMessageHandler.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/handler/ChatMessageHandler.java rename to framework/chat/src/main/java/com/bizzan/bitrade/handler/ChatMessageHandler.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/handler/MessageHandler.java b/framework/chat/src/main/java/com/bizzan/bitrade/handler/MessageHandler.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/handler/MessageHandler.java rename to framework/chat/src/main/java/com/bizzan/bitrade/handler/MessageHandler.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java b/framework/chat/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java rename to framework/chat/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java b/framework/chat/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java rename to framework/chat/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java diff --git a/00_framework/chat/src/main/java/com/bizzan/bitrade/utils/DateUtils.java b/framework/chat/src/main/java/com/bizzan/bitrade/utils/DateUtils.java similarity index 100% rename from 00_framework/chat/src/main/java/com/bizzan/bitrade/utils/DateUtils.java rename to framework/chat/src/main/java/com/bizzan/bitrade/utils/DateUtils.java diff --git a/00_framework/chat/src/main/resources/dev/application.properties b/framework/chat/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/chat/src/main/resources/dev/application.properties rename to framework/chat/src/main/resources/dev/application.properties diff --git a/00_framework/chat/src/main/resources/dev/ehcache.xml b/framework/chat/src/main/resources/dev/ehcache.xml similarity index 100% rename from 00_framework/chat/src/main/resources/dev/ehcache.xml rename to framework/chat/src/main/resources/dev/ehcache.xml diff --git a/00_framework/chat/src/main/resources/dev/logback-spring.xml b/framework/chat/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/chat/src/main/resources/dev/logback-spring.xml rename to framework/chat/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/chat/src/main/resources/prod/application.properties b/framework/chat/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/chat/src/main/resources/prod/application.properties rename to framework/chat/src/main/resources/prod/application.properties diff --git a/00_framework/chat/src/main/resources/prod/ehcache.xml b/framework/chat/src/main/resources/prod/ehcache.xml similarity index 100% rename from 00_framework/chat/src/main/resources/prod/ehcache.xml rename to framework/chat/src/main/resources/prod/ehcache.xml diff --git a/00_framework/chat/src/main/resources/prod/logback-spring.xml b/framework/chat/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/chat/src/main/resources/prod/logback-spring.xml rename to framework/chat/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/chat/src/main/resources/test/application.properties b/framework/chat/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/chat/src/main/resources/test/application.properties rename to framework/chat/src/main/resources/test/application.properties diff --git a/00_framework/chat/src/main/resources/test/ehcache.xml b/framework/chat/src/main/resources/test/ehcache.xml similarity index 100% rename from 00_framework/chat/src/main/resources/test/ehcache.xml rename to framework/chat/src/main/resources/test/ehcache.xml diff --git a/00_framework/chat/src/main/resources/test/logback-spring.xml b/framework/chat/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/chat/src/main/resources/test/logback-spring.xml rename to framework/chat/src/main/resources/test/logback-spring.xml diff --git a/00_framework/chat/src/test/java/com/bizzan/bitrade/AppTest.java b/framework/chat/src/test/java/com/bizzan/bitrade/AppTest.java similarity index 100% rename from 00_framework/chat/src/test/java/com/bizzan/bitrade/AppTest.java rename to framework/chat/src/test/java/com/bizzan/bitrade/AppTest.java diff --git a/00_framework/core/.classpath b/framework/cloud/.classpath similarity index 70% rename from 00_framework/core/.classpath rename to framework/cloud/.classpath index d40bdbed..a97cb0eb 100644 --- a/00_framework/core/.classpath +++ b/framework/cloud/.classpath @@ -9,35 +9,48 @@ + - + - + - - + - - + + + - + + + + + + + + + + + + + diff --git a/00_framework/cloud/.gitignore b/framework/cloud/.gitignore similarity index 100% rename from 00_framework/cloud/.gitignore rename to framework/cloud/.gitignore diff --git a/00_framework/cloud/.project b/framework/cloud/.project similarity index 64% rename from 00_framework/cloud/.project rename to framework/cloud/.project index dec912bc..bb687c03 100644 --- a/00_framework/cloud/.project +++ b/framework/cloud/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866788 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/cloud/.settings/org.eclipse.core.resources.prefs b/framework/cloud/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/cloud/.settings/org.eclipse.core.resources.prefs rename to framework/cloud/.settings/org.eclipse.core.resources.prefs diff --git a/framework/cloud/.settings/org.eclipse.jdt.apt.core.prefs b/framework/cloud/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..d4313d4b --- /dev/null +++ b/framework/cloud/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/framework/cloud/.settings/org.eclipse.jdt.core.prefs b/framework/cloud/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..7508c454 --- /dev/null +++ b/framework/cloud/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/cloud/.settings/org.eclipse.m2e.core.prefs b/framework/cloud/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/cloud/.settings/org.eclipse.m2e.core.prefs rename to framework/cloud/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/cloud/pom.xml b/framework/cloud/pom.xml similarity index 100% rename from 00_framework/cloud/pom.xml rename to framework/cloud/pom.xml diff --git a/00_framework/cloud/src/main/java/com/bizzan/bitrade/CloudApplication.java b/framework/cloud/src/main/java/com/bizzan/bitrade/CloudApplication.java similarity index 100% rename from 00_framework/cloud/src/main/java/com/bizzan/bitrade/CloudApplication.java rename to framework/cloud/src/main/java/com/bizzan/bitrade/CloudApplication.java diff --git a/00_framework/cloud/src/main/java/com/bizzan/bitrade/listenConfig/EurekaStateListener.java b/framework/cloud/src/main/java/com/bizzan/bitrade/listenConfig/EurekaStateListener.java similarity index 100% rename from 00_framework/cloud/src/main/java/com/bizzan/bitrade/listenConfig/EurekaStateListener.java rename to framework/cloud/src/main/java/com/bizzan/bitrade/listenConfig/EurekaStateListener.java diff --git a/00_framework/cloud/src/main/resources/application.properties b/framework/cloud/src/main/resources/application.properties similarity index 100% rename from 00_framework/cloud/src/main/resources/application.properties rename to framework/cloud/src/main/resources/application.properties diff --git a/00_framework/cloud/src/main/resources/logback-spring.xml b/framework/cloud/src/main/resources/logback-spring.xml similarity index 100% rename from 00_framework/cloud/src/main/resources/logback-spring.xml rename to framework/cloud/src/main/resources/logback-spring.xml diff --git a/00_framework/cloud/src/main/resources/templates/simpleMessage.ftl b/framework/cloud/src/main/resources/templates/simpleMessage.ftl similarity index 100% rename from 00_framework/cloud/src/main/resources/templates/simpleMessage.ftl rename to framework/cloud/src/main/resources/templates/simpleMessage.ftl diff --git a/framework/core/.classpath b/framework/core/.classpath new file mode 100644 index 00000000..83cd224a --- /dev/null +++ b/framework/core/.classpath @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/core/.gitignore b/framework/core/.gitignore similarity index 100% rename from 00_framework/core/.gitignore rename to framework/core/.gitignore diff --git a/00_framework/core/.project b/framework/core/.project similarity index 64% rename from 00_framework/core/.project rename to framework/core/.project index 1a645073..9511aa32 100644 --- a/00_framework/core/.project +++ b/framework/core/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866789 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/framework/core/.settings/org.eclipse.core.resources.prefs b/framework/core/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e7a9ee63 --- /dev/null +++ b/framework/core/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding//target/generated-sources/java=UTF-8 +encoding/=UTF-8 diff --git a/framework/core/.settings/org.eclipse.jdt.apt.core.prefs b/framework/core/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/core/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/core/.settings/org.eclipse.jdt.core.prefs b/framework/core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..b232eeb7 --- /dev/null +++ b/framework/core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,28 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/core/.settings/org.eclipse.m2e.core.prefs b/framework/core/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/core/.settings/org.eclipse.m2e.core.prefs rename to framework/core/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/core/lib/spark-core-2.6.0.jar b/framework/core/lib/spark-core-2.6.0.jar similarity index 100% rename from 00_framework/core/lib/spark-core-2.6.0.jar rename to framework/core/lib/spark-core-2.6.0.jar diff --git a/00_framework/core/pom.xml b/framework/core/pom.xml similarity index 100% rename from 00_framework/core/pom.xml rename to framework/core/pom.xml diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/ability/CreateAbility.java b/framework/core/src/main/java/com/bizzan/bitrade/ability/CreateAbility.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/ability/CreateAbility.java rename to framework/core/src/main/java/com/bizzan/bitrade/ability/CreateAbility.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/ability/ScreenAbility.java b/framework/core/src/main/java/com/bizzan/bitrade/ability/ScreenAbility.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/ability/ScreenAbility.java rename to framework/core/src/main/java/com/bizzan/bitrade/ability/ScreenAbility.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/ability/UpdateAbility.java b/framework/core/src/main/java/com/bizzan/bitrade/ability/UpdateAbility.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/ability/UpdateAbility.java rename to framework/core/src/main/java/com/bizzan/bitrade/ability/UpdateAbility.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/annotation/AccessLog.java b/framework/core/src/main/java/com/bizzan/bitrade/annotation/AccessLog.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/annotation/AccessLog.java rename to framework/core/src/main/java/com/bizzan/bitrade/annotation/AccessLog.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/annotation/Excel.java b/framework/core/src/main/java/com/bizzan/bitrade/annotation/Excel.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/annotation/Excel.java rename to framework/core/src/main/java/com/bizzan/bitrade/annotation/Excel.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/annotation/ExcelSheet.java b/framework/core/src/main/java/com/bizzan/bitrade/annotation/ExcelSheet.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/annotation/ExcelSheet.java rename to framework/core/src/main/java/com/bizzan/bitrade/annotation/ExcelSheet.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/annotation/IgnoreExcel.java b/framework/core/src/main/java/com/bizzan/bitrade/annotation/IgnoreExcel.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/annotation/IgnoreExcel.java rename to framework/core/src/main/java/com/bizzan/bitrade/annotation/IgnoreExcel.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/config/ESConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/config/ESConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/config/ESConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/config/ESConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/config/JDBCConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/config/JDBCConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/config/JDBCConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/config/JDBCConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/config/QueryDslConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/config/QueryDslConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/config/QueryDslConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/config/QueryDslConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/config/QuizConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/config/QuizConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/config/QuizConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/config/QuizConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/config/SmsProviderConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/config/SmsProviderConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/config/SmsProviderConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/config/SmsProviderConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/config/SystemConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/config/SystemConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/config/SystemConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/config/SystemConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/ActivityRewardType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/ActivityRewardType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/ActivityRewardType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/ActivityRewardType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdminModule.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AdminModule.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdminModule.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AdminModule.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseControlStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseControlStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseControlStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseControlStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseLevel.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseLevel.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseLevel.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseLevel.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AdvertiseType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AnnouncementClassification.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AnnouncementClassification.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AnnouncementClassification.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AnnouncementClassification.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AppealStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AppealStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AppealStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AppealStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/AuditStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/AuditStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/AuditStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/AuditStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/BooleanEnum.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/BooleanEnum.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/BooleanEnum.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/BooleanEnum.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/BusinessStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/BusinessStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/BusinessStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/BusinessStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/CertifiedBusinessStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/CertifiedBusinessStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/CertifiedBusinessStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/CertifiedBusinessStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/CommonStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/CommonStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/CommonStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/CommonStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/Currency.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/Currency.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/Currency.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/Currency.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/DepositStatusEnum.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/DepositStatusEnum.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/DepositStatusEnum.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/DepositStatusEnum.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/LegalWalletState.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/LegalWalletState.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/LegalWalletState.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/LegalWalletState.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/MemberLevelEnum.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/MemberLevelEnum.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/MemberLevelEnum.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/MemberLevelEnum.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/MemberRegisterType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/MemberRegisterType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/MemberRegisterType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/MemberRegisterType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/NettyCommand.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/NettyCommand.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/NettyCommand.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/NettyCommand.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/OrderStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/OrderStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/OrderStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/OrderStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/PageModel.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/PageModel.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/PageModel.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/PageModel.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/PayMode.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/PayMode.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/PayMode.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/PayMode.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/Platform.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/Platform.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/Platform.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/Platform.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/PriceType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/PriceType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/PriceType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/PriceType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionLevel.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionLevel.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionLevel.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionLevel.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionRewardType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionRewardType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionRewardType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/PromotionRewardType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/RealNameStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/RealNameStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/RealNameStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/RealNameStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/RewardRecordType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/RewardRecordType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/RewardRecordType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/RewardRecordType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/SignStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/SignStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/SignStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/SignStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/Symbol.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/Symbol.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/Symbol.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/Symbol.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/SysAdvertiseLocation.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/SysAdvertiseLocation.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/SysAdvertiseLocation.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/SysAdvertiseLocation.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/SysConstant.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/SysConstant.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/SysConstant.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/SysConstant.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/SysHelpClassification.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/SysHelpClassification.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/SysHelpClassification.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/SysHelpClassification.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionType.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionType.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionType.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionType.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionTypeEnum.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionTypeEnum.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionTypeEnum.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/TransactionTypeEnum.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/constant/WithdrawStatus.java b/framework/core/src/main/java/com/bizzan/bitrade/constant/WithdrawStatus.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/constant/WithdrawStatus.java rename to framework/core/src/main/java/com/bizzan/bitrade/constant/WithdrawStatus.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/controller/BaseController.java b/framework/core/src/main/java/com/bizzan/bitrade/controller/BaseController.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/controller/BaseController.java rename to framework/core/src/main/java/com/bizzan/bitrade/controller/BaseController.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/controller/CaptchaController.java b/framework/core/src/main/java/com/bizzan/bitrade/controller/CaptchaController.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/controller/CaptchaController.java rename to framework/core/src/main/java/com/bizzan/bitrade/controller/CaptchaController.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/core/BaseEnum.java b/framework/core/src/main/java/com/bizzan/bitrade/core/BaseEnum.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/core/BaseEnum.java rename to framework/core/src/main/java/com/bizzan/bitrade/core/BaseEnum.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/core/Menu.java b/framework/core/src/main/java/com/bizzan/bitrade/core/Menu.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/core/Menu.java rename to framework/core/src/main/java/com/bizzan/bitrade/core/Menu.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/core/Pagination.java b/framework/core/src/main/java/com/bizzan/bitrade/core/Pagination.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/core/Pagination.java rename to framework/core/src/main/java/com/bizzan/bitrade/core/Pagination.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityOrderDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityOrderDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityOrderDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/ActivityOrderDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/AdminAccessLogDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/AdminAccessLogDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/AdminAccessLogDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/AdminAccessLogDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/AdminDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/AdminDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/AdminDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/AdminDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/AdvertiseDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/AdvertiseDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/AdvertiseDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/AdvertiseDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/AnnouncementDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/AnnouncementDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/AnnouncementDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/AnnouncementDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/AppRevisionDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/AppRevisionDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/AppRevisionDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/AppRevisionDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/AppealDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/AppealDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/AppealDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/AppealDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthApplyDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthApplyDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthApplyDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthApplyDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthDepositDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthDepositDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthDepositDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessAuthDepositDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessCancelApplyDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessCancelApplyDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessCancelApplyDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/BusinessCancelApplyDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/CoinDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/CoinDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/CoinDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/CoinDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/CountryDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/CountryDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/CountryDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/CountryDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/CtcAcceptorDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/CtcAcceptorDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/CtcAcceptorDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/CtcAcceptorDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/CtcOrderDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/CtcOrderDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/CtcOrderDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/CtcOrderDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/DataDictionaryDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/DataDictionaryDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/DataDictionaryDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/DataDictionaryDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/DepartmentDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/DepartmentDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/DepartmentDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/DepartmentDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/DepositRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/DepositRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/DepositRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/DepositRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/DividendStartRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/DividendStartRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/DividendStartRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/DividendStartRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/FeedbackDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/FeedbackDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/FeedbackDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/FeedbackDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/HotTransferRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/HotTransferRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/HotTransferRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/HotTransferRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/InitPlateDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/InitPlateDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/InitPlateDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/InitPlateDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletRechargeDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletRechargeDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletRechargeDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletRechargeDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletWithdrawDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletWithdrawDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletWithdrawDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/LegalWalletWithdrawDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberAddressDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberAddressDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberAddressDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberAddressDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationConfigDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationConfigDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationConfigDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationConfigDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberApplicationDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberBonusDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberBonusDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberBonusDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberBonusDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDepositDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDepositDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDepositDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberDepositDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticRankDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticRankDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticRankDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberInviteStasticRankDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLevelDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLevelDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLevelDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLevelDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLogDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLogDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLogDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberLogDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberPromotionDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberPromotionDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberPromotionDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberPromotionDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberSignRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberSignRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberSignRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberSignRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberTransactionDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberTransactionDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberTransactionDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberTransactionDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberWalletDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MemberWalletDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MemberWalletDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MemberWalletDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDetailDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDetailDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDetailDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/MiningOrderDetailDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/OrderDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/OrderDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/OrderDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/OrderDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/OtcCoinDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/OtcCoinDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/OtcCoinDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/OtcCoinDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardOrderDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardOrderDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardOrderDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/PromotionCardOrderDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDetailDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDetailDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDetailDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/RedEnvelopeDetailDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/RewardActivitySettingDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/RewardActivitySettingDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/RewardActivitySettingDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/RewardActivitySettingDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/RewardPromotionSettingDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/RewardPromotionSettingDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/RewardPromotionSettingDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/RewardPromotionSettingDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/RewardRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/RewardRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/RewardRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/RewardRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/SignDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/SignDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/SignDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/SignDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/SmsDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/SmsDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/SmsDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/SmsDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysAdvertiseDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/SysAdvertiseDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysAdvertiseDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/SysAdvertiseDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysHelpDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/SysHelpDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysHelpDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/SysHelpDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysPermissionDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/SysPermissionDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysPermissionDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/SysPermissionDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysRoleDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/SysRoleDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/SysRoleDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/SysRoleDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/TransferAddressDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/TransferAddressDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/TransferAddressDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/TransferAddressDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/TransferRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/TransferRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/TransferRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/TransferRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/WebsiteInformationDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/WebsiteInformationDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/WebsiteInformationDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/WebsiteInformationDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/WithdrawRecordDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/WithdrawRecordDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/WithdrawRecordDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/WithdrawRecordDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dao/base/BaseDao.java b/framework/core/src/main/java/com/bizzan/bitrade/dao/base/BaseDao.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dao/base/BaseDao.java rename to framework/core/src/main/java/com/bizzan/bitrade/dao/base/BaseDao.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/BaseMemberDTO.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/BaseMemberDTO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/BaseMemberDTO.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/BaseMemberDTO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/CoinDTO.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/CoinDTO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/CoinDTO.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/CoinDTO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/MemberBonusDTO.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/MemberBonusDTO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/MemberBonusDTO.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/MemberBonusDTO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/MemberDTO.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/MemberDTO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/MemberDTO.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/MemberDTO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/MemberWalletDTO.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/MemberWalletDTO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/MemberWalletDTO.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/MemberWalletDTO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/PageParam.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/PageParam.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/PageParam.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/PageParam.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/Pagenation.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/Pagenation.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/Pagenation.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/Pagenation.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/dto/SmsDTO.java b/framework/core/src/main/java/com/bizzan/bitrade/dto/SmsDTO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/dto/SmsDTO.java rename to framework/core/src/main/java/com/bizzan/bitrade/dto/SmsDTO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Activity.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Activity.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Activity.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Activity.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/ActivityOrder.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/ActivityOrder.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/ActivityOrder.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/ActivityOrder.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Admin.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Admin.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Admin.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Admin.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/AdminAccessLog.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/AdminAccessLog.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/AdminAccessLog.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/AdminAccessLog.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Advertise.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Advertise.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Advertise.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Advertise.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Alipay.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Alipay.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Alipay.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Alipay.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Announcement.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Announcement.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Announcement.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Announcement.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/AppRevision.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/AppRevision.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/AppRevision.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/AppRevision.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Appeal.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Appeal.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Appeal.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Appeal.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/BankInfo.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/BankInfo.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/BankInfo.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/BankInfo.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApply.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApply.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApply.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApply.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApplyDetailVO.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApplyDetailVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApplyDetailVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthApplyDetailVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthDeposit.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthDeposit.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthDeposit.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessAuthDeposit.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessCancelApply.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessCancelApply.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessCancelApply.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/BusinessCancelApply.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Coin.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Coin.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Coin.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Coin.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Country.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Country.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Country.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Country.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/CtcAcceptor.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/CtcAcceptor.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/CtcAcceptor.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/CtcAcceptor.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/CtcOrder.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/CtcOrder.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/CtcOrder.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/CtcOrder.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/DataDictionary.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/DataDictionary.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/DataDictionary.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/DataDictionary.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Department.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Department.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Department.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Department.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/DepositRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/DepositRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/DepositRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/DepositRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/DividendStartRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/DividendStartRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/DividendStartRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/DividendStartRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/ExchangeTurnoverStatistics.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/ExchangeTurnoverStatistics.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/ExchangeTurnoverStatistics.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/ExchangeTurnoverStatistics.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Feedback.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Feedback.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Feedback.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Feedback.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialItem.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialItem.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialItem.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialItem.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialOrder.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialOrder.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialOrder.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/FinancialOrder.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/HotTransferRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/HotTransferRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/HotTransferRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/HotTransferRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/InitPlate.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/InitPlate.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/InitPlate.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/InitPlate.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletRecharge.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletRecharge.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletRecharge.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletRecharge.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdraw.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdraw.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdraw.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdraw.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Location.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Location.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Location.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Location.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Member.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Member.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Member.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Member.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberAddress.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberAddress.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberAddress.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberAddress.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplication.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplication.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplication.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplication.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplicationConfig.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplicationConfig.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplicationConfig.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberApplicationConfig.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberDeposit.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberDeposit.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberDeposit.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberDeposit.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStastic.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStastic.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStastic.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStastic.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStasticRank.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStasticRank.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStasticRank.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberInviteStasticRank.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLevel.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLevel.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLevel.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLevel.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLog.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLog.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLog.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberLog.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberPromotion.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberPromotion.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberPromotion.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberPromotion.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberSignRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberSignRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberSignRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberSignRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberTransaction.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberTransaction.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberTransaction.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberTransaction.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberWallet.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MemberWallet.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MemberWallet.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MemberWallet.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrder.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrder.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrder.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrder.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrderDetail.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrderDetail.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrderDetail.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/MiningOrderDetail.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Order.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Order.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Order.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Order.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/OtcCoin.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/OtcCoin.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/OtcCoin.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/OtcCoin.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCard.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCard.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCard.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCard.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCardOrder.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCardOrder.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCardOrder.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/PromotionCardOrder.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelope.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelope.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelope.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelope.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelopeDetail.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelopeDetail.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelopeDetail.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/RedEnvelopeDetail.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/RewardActivitySetting.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/RewardActivitySetting.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/RewardActivitySetting.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/RewardActivitySetting.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/RewardPromotionSetting.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/RewardPromotionSetting.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/RewardPromotionSetting.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/RewardPromotionSetting.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/RewardRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/RewardRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/RewardRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/RewardRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Sign.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Sign.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Sign.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Sign.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/Statistics.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/Statistics.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/Statistics.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/Statistics.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysAdvertise.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/SysAdvertise.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysAdvertise.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/SysAdvertise.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysHelp.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/SysHelp.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysHelp.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/SysHelp.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysPermission.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/SysPermission.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysPermission.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/SysPermission.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysRole.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/SysRole.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/SysRole.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/SysRole.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/TransferAddress.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/TransferAddress.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/TransferAddress.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/TransferAddress.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/TransferRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/TransferRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/TransferRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/TransferRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/TurnoverStatistics.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/TurnoverStatistics.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/TurnoverStatistics.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/TurnoverStatistics.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/WebsiteInformation.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/WebsiteInformation.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/WebsiteInformation.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/WebsiteInformation.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/WechatPay.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/WechatPay.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/WechatPay.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/WechatPay.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/WithdrawRecord.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/WithdrawRecord.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/WithdrawRecord.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/WithdrawRecord.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/AuthMember.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/AuthMember.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/AuthMember.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/AuthMember.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertise.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertise.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertise.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertise.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseDetail.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseDetail.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseDetail.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseDetail.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseInfo.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseInfo.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseInfo.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/MemberAdvertiseInfo.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/ScanAdvertise.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/ScanAdvertise.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/ScanAdvertise.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/ScanAdvertise.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/Special.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/Special.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/Special.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/Special.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/SpecialPage.java b/framework/core/src/main/java/com/bizzan/bitrade/entity/transform/SpecialPage.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/entity/transform/SpecialPage.java rename to framework/core/src/main/java/com/bizzan/bitrade/entity/transform/SpecialPage.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/es/ESClient.java b/framework/core/src/main/java/com/bizzan/bitrade/es/ESClient.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/es/ESClient.java rename to framework/core/src/main/java/com/bizzan/bitrade/es/ESClient.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/es/ESUtils.java b/framework/core/src/main/java/com/bizzan/bitrade/es/ESUtils.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/es/ESUtils.java rename to framework/core/src/main/java/com/bizzan/bitrade/es/ESUtils.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/event/MemberEvent.java b/framework/core/src/main/java/com/bizzan/bitrade/event/MemberEvent.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/event/MemberEvent.java rename to framework/core/src/main/java/com/bizzan/bitrade/event/MemberEvent.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/exception/AuthenticationException.java b/framework/core/src/main/java/com/bizzan/bitrade/exception/AuthenticationException.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/exception/AuthenticationException.java rename to framework/core/src/main/java/com/bizzan/bitrade/exception/AuthenticationException.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/exception/GeeTestException.java b/framework/core/src/main/java/com/bizzan/bitrade/exception/GeeTestException.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/exception/GeeTestException.java rename to framework/core/src/main/java/com/bizzan/bitrade/exception/GeeTestException.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/exception/InformationExpiredException.java b/framework/core/src/main/java/com/bizzan/bitrade/exception/InformationExpiredException.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/exception/InformationExpiredException.java rename to framework/core/src/main/java/com/bizzan/bitrade/exception/InformationExpiredException.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/ext/OrdinalToEnumConverterFactory.java b/framework/core/src/main/java/com/bizzan/bitrade/ext/OrdinalToEnumConverterFactory.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/ext/OrdinalToEnumConverterFactory.java rename to framework/core/src/main/java/com/bizzan/bitrade/ext/OrdinalToEnumConverterFactory.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/ext/SmartHttpSessionStrategy.java b/framework/core/src/main/java/com/bizzan/bitrade/ext/SmartHttpSessionStrategy.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/ext/SmartHttpSessionStrategy.java rename to framework/core/src/main/java/com/bizzan/bitrade/ext/SmartHttpSessionStrategy.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/interceptor/MemberInterceptor.java b/framework/core/src/main/java/com/bizzan/bitrade/interceptor/MemberInterceptor.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/interceptor/MemberInterceptor.java rename to framework/core/src/main/java/com/bizzan/bitrade/interceptor/MemberInterceptor.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/kafka/kafkaPartitioner.java b/framework/core/src/main/java/com/bizzan/bitrade/kafka/kafkaPartitioner.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/kafka/kafkaPartitioner.java rename to framework/core/src/main/java/com/bizzan/bitrade/kafka/kafkaPartitioner.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/Criteria.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/Criteria.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/Criteria.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/Criteria.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/Criterion.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/Criterion.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/Criterion.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/Criterion.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/LogicalExpression.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/LogicalExpression.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/LogicalExpression.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/LogicalExpression.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/PageListMapResult.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/PageListMapResult.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/PageListMapResult.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/PageListMapResult.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/PageResult.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/PageResult.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/PageResult.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/PageResult.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/QueryDslContext.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/QueryDslContext.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/QueryDslContext.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/QueryDslContext.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/Restrictions.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/Restrictions.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/Restrictions.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/Restrictions.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/pagination/SimpleExpression.java b/framework/core/src/main/java/com/bizzan/bitrade/pagination/SimpleExpression.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/pagination/SimpleExpression.java rename to framework/core/src/main/java/com/bizzan/bitrade/pagination/SimpleExpression.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/ActivityOrderService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/ActivityOrderService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/ActivityOrderService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/ActivityOrderService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/ActivityService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/ActivityService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/ActivityService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/ActivityService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/AdminAccessLogService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/AdminAccessLogService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/AdminAccessLogService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/AdminAccessLogService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/AdminService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/AdminService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/AdminService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/AdminService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/AdvertiseService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/AdvertiseService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/AdvertiseService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/AdvertiseService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/AnnouncementService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/AnnouncementService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/AnnouncementService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/AnnouncementService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/AppRevisionService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/AppRevisionService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/AppRevisionService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/AppRevisionService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/AppealService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/AppealService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/AppealService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/AppealService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/Base/BaseService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/Base/BaseService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/Base/BaseService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/Base/BaseService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/Base/TopBaseService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/Base/TopBaseService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/Base/TopBaseService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/Base/TopBaseService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthApplyService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthApplyService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthApplyService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthApplyService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthDepositService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthDepositService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthDepositService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/BusinessAuthDepositService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/BusinessCancelApplyService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/BusinessCancelApplyService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/BusinessCancelApplyService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/BusinessCancelApplyService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/CoinService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/CoinService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/CoinService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/CoinService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/CountryService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/CountryService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/CountryService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/CountryService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/CtcAcceptorService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/CtcAcceptorService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/CtcAcceptorService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/CtcAcceptorService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/CtcOrderService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/CtcOrderService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/CtcOrderService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/CtcOrderService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/DataDictionaryService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/DataDictionaryService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/DataDictionaryService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/DataDictionaryService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/DepartmentService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/DepartmentService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/DepartmentService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/DepartmentService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/DepositRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/DepositRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/DepositRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/DepositRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/DividendStartRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/DividendStartRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/DividendStartRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/DividendStartRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/FeedbackService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/FeedbackService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/FeedbackService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/FeedbackService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/HotTransferRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/HotTransferRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/HotTransferRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/HotTransferRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/InitPlateService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/InitPlateService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/InitPlateService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/InitPlateService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/InviteManagementService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/InviteManagementService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/InviteManagementService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/InviteManagementService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletRechargeService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletRechargeService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletRechargeService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletRechargeService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletWithdrawService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletWithdrawService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletWithdrawService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/LegalWalletWithdrawService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/LocaleMessageSourceService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/LocaleMessageSourceService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/LocaleMessageSourceService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/LocaleMessageSourceService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberAddressService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberAddressService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberAddressService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberAddressService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationConfigService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationConfigService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationConfigService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationConfigService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberApplicationService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberBonusService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberBonusService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberBonusService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberBonusService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberDepositService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberDepositService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberDepositService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberDepositService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberInviteStasticService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberInviteStasticService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberInviteStasticService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberInviteStasticService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberLevelService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberLevelService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberLevelService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberLevelService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberLogService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberLogService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberLogService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberLogService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberPromotionService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberPromotionService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberPromotionService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberPromotionService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberSignRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberSignRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberSignRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberSignRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberTransactionService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberTransactionService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberTransactionService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberTransactionService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberWalletService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MemberWalletService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MemberWalletService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MemberWalletService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderDetailService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderDetailService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderDetailService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderDetailService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/MiningOrderService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/OrderService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/OrderService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/OrderService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/OrderService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/OtcCoinService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/OtcCoinService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/OtcCoinService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/OtcCoinService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardOrderService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardOrderService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardOrderService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardOrderService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/PromotionCardService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeDetailService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeDetailService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeDetailService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeDetailService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/RedEnvelopeService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/RewardActivitySettingService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/RewardActivitySettingService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/RewardActivitySettingService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/RewardActivitySettingService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/RewardPromotionSettingService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/RewardPromotionSettingService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/RewardPromotionSettingService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/RewardPromotionSettingService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/RewardRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/RewardRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/RewardRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/RewardRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/SignService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/SignService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/SignService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/SignService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/SmsService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/SmsService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/SmsService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/SmsService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/StatisticsService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/StatisticsService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/StatisticsService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/StatisticsService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/SysAdvertiseService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/SysAdvertiseService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/SysAdvertiseService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/SysAdvertiseService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/SysHelpService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/SysHelpService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/SysHelpService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/SysHelpService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/SysPermissionService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/SysPermissionService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/SysPermissionService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/SysPermissionService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/SysRoleService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/SysRoleService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/SysRoleService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/SysRoleService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/TestQueryDSLService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/TestQueryDSLService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/TestQueryDSLService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/TestQueryDSLService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/TransferAddressService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/TransferAddressService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/TransferAddressService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/TransferAddressService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/TransferRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/TransferRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/TransferRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/TransferRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/WebsiteInformationService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/WebsiteInformationService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/WebsiteInformationService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/WebsiteInformationService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/service/WithdrawRecordService.java b/framework/core/src/main/java/com/bizzan/bitrade/service/WithdrawRecordService.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/service/WithdrawRecordService.java rename to framework/core/src/main/java/com/bizzan/bitrade/service/WithdrawRecordService.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/system/ExceptionControllerAdvice.java b/framework/core/src/main/java/com/bizzan/bitrade/system/ExceptionControllerAdvice.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/system/ExceptionControllerAdvice.java rename to framework/core/src/main/java/com/bizzan/bitrade/system/ExceptionControllerAdvice.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/AliyunUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/AliyunUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/AliyunUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/AliyunUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalToDecimal128Converter.java b/framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalToDecimal128Converter.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalToDecimal128Converter.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalToDecimal128Converter.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalUtils.java b/framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalUtils.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalUtils.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/BigDecimalUtils.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/BindingResultUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/BindingResultUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/BindingResultUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/BindingResultUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/CaiPiaoHttpUtils.java b/framework/core/src/main/java/com/bizzan/bitrade/util/CaiPiaoHttpUtils.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/CaiPiaoHttpUtils.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/CaiPiaoHttpUtils.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/CaptchaUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/CaptchaUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/CaptchaUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/CaptchaUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/DESUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/DESUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/DESUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/DESUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/DateUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/DateUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/DateUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/DateUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/Decimal128ToBigDecimalConverter.java b/framework/core/src/main/java/com/bizzan/bitrade/util/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/Decimal128ToBigDecimalConverter.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/Decimal128ToBigDecimalConverter.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/EnumHelperUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/EnumHelperUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/EnumHelperUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/EnumHelperUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/ExcelUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/ExcelUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/ExcelUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/ExcelUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/FileUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/FileUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/FileUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/FileUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/GoogleAuthenticatorUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/GoogleAuthenticatorUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/GoogleAuthenticatorUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/GoogleAuthenticatorUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/HttpSend.java b/framework/core/src/main/java/com/bizzan/bitrade/util/HttpSend.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/HttpSend.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/HttpSend.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/IdWorkByTwitter.java b/framework/core/src/main/java/com/bizzan/bitrade/util/IdWorkByTwitter.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/IdWorkByTwitter.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/IdWorkByTwitter.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/IdcardValidator.java b/framework/core/src/main/java/com/bizzan/bitrade/util/IdcardValidator.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/IdcardValidator.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/IdcardValidator.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/JDBCUtils.java b/framework/core/src/main/java/com/bizzan/bitrade/util/JDBCUtils.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/JDBCUtils.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/JDBCUtils.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/Md5.java b/framework/core/src/main/java/com/bizzan/bitrade/util/Md5.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/Md5.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/Md5.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/MessageResult.java b/framework/core/src/main/java/com/bizzan/bitrade/util/MessageResult.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/MessageResult.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/MessageResult.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/PredicateUtils.java b/framework/core/src/main/java/com/bizzan/bitrade/util/PredicateUtils.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/PredicateUtils.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/PredicateUtils.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/TupleUtils.java b/framework/core/src/main/java/com/bizzan/bitrade/util/TupleUtils.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/TupleUtils.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/TupleUtils.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/UUIDUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/UUIDUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/UUIDUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/UUIDUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/UploadFileUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/UploadFileUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/UploadFileUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/UploadFileUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/util/ValidateUtil.java b/framework/core/src/main/java/com/bizzan/bitrade/util/ValidateUtil.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/util/ValidateUtil.java rename to framework/core/src/main/java/com/bizzan/bitrade/util/ValidateUtil.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/SMSProvider.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/SMSProvider.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/SMSProvider.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/SMSProvider.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/involve/SSLClient.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/involve/SSLClient.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/involve/SSLClient.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/involve/SSLClient.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/ChuangRuiSMSProvider.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/ChuangRuiSMSProvider.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/ChuangRuiSMSProvider.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/ChuangRuiSMSProvider.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/DiyiSMSProvider.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/DiyiSMSProvider.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/DiyiSMSProvider.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/DiyiSMSProvider.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/EmaySMSProvider.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/EmaySMSProvider.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/EmaySMSProvider.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/EmaySMSProvider.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/HuaXinSMSProvider.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/HuaXinSMSProvider.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/HuaXinSMSProvider.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/HuaXinSMSProvider.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/YunpianSMSProvider.java b/framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/YunpianSMSProvider.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/YunpianSMSProvider.java rename to framework/core/src/main/java/com/bizzan/bitrade/vendor/provider/support/YunpianSMSProvider.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/AppealVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/AppealVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/AppealVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/AppealVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/BusinessStatisticsVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/BusinessStatisticsVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/BusinessStatisticsVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/BusinessStatisticsVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/ExchangeTurnoverStatisticsVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/ExchangeTurnoverStatisticsVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/ExchangeTurnoverStatisticsVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/ExchangeTurnoverStatisticsVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/InviteManagementVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/InviteManagementVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/InviteManagementVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/InviteManagementVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberDepositVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/MemberDepositVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberDepositVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/MemberDepositVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberInviteStasticVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/MemberInviteStasticVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberInviteStasticVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/MemberInviteStasticVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberPromotionStasticVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/MemberPromotionStasticVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberPromotionStasticVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/MemberPromotionStasticVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberTransactionVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/MemberTransactionVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/MemberTransactionVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/MemberTransactionVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/OtcOrderVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/OtcOrderVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/OtcOrderVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/OtcOrderVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionMemberVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionMemberVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionMemberVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionMemberVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionRewardVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionRewardVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionRewardVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/PromotionRewardVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/RegisterPromotionVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/RegisterPromotionVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/RegisterPromotionVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/RegisterPromotionVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/RewardRecordVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/RewardRecordVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/RewardRecordVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/RewardRecordVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/TurnoverStatisticsVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/TurnoverStatisticsVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/TurnoverStatisticsVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/TurnoverStatisticsVO.java diff --git a/00_framework/core/src/main/java/com/bizzan/bitrade/vo/WithdrawRecordVO.java b/framework/core/src/main/java/com/bizzan/bitrade/vo/WithdrawRecordVO.java similarity index 100% rename from 00_framework/core/src/main/java/com/bizzan/bitrade/vo/WithdrawRecordVO.java rename to framework/core/src/main/java/com/bizzan/bitrade/vo/WithdrawRecordVO.java diff --git a/00_framework/core/src/main/resources/banner.txt b/framework/core/src/main/resources/banner.txt similarity index 100% rename from 00_framework/core/src/main/resources/banner.txt rename to framework/core/src/main/resources/banner.txt diff --git a/00_framework/core/src/test/java/com/bizzan/bitrade/test/BaseTest.java b/framework/core/src/test/java/com/bizzan/bitrade/test/BaseTest.java similarity index 100% rename from 00_framework/core/src/test/java/com/bizzan/bitrade/test/BaseTest.java rename to framework/core/src/test/java/com/bizzan/bitrade/test/BaseTest.java diff --git a/00_framework/core/src/test/java/com/bizzan/bitrade/test/JUnit4ClassRunner.java b/framework/core/src/test/java/com/bizzan/bitrade/test/JUnit4ClassRunner.java similarity index 100% rename from 00_framework/core/src/test/java/com/bizzan/bitrade/test/JUnit4ClassRunner.java rename to framework/core/src/test/java/com/bizzan/bitrade/test/JUnit4ClassRunner.java diff --git a/00_framework/core/src/test/java/com/bizzan/bitrade/test/service/AdvertiseServiceTest.java b/framework/core/src/test/java/com/bizzan/bitrade/test/service/AdvertiseServiceTest.java similarity index 100% rename from 00_framework/core/src/test/java/com/bizzan/bitrade/test/service/AdvertiseServiceTest.java rename to framework/core/src/test/java/com/bizzan/bitrade/test/service/AdvertiseServiceTest.java diff --git a/00_framework/core/src/test/java/com/bizzan/bitrade/test/service/MemberServiceTest.java b/framework/core/src/test/java/com/bizzan/bitrade/test/service/MemberServiceTest.java similarity index 100% rename from 00_framework/core/src/test/java/com/bizzan/bitrade/test/service/MemberServiceTest.java rename to framework/core/src/test/java/com/bizzan/bitrade/test/service/MemberServiceTest.java diff --git a/00_framework/core/src/test/resources/application.properties b/framework/core/src/test/resources/application.properties similarity index 100% rename from 00_framework/core/src/test/resources/application.properties rename to framework/core/src/test/resources/application.properties diff --git a/00_framework/core/src/test/resources/log4j.properties b/framework/core/src/test/resources/log4j.properties similarity index 100% rename from 00_framework/core/src/test/resources/log4j.properties rename to framework/core/src/test/resources/log4j.properties diff --git a/00_framework/core/src/test/resources/spring-service.xml b/framework/core/src/test/resources/spring-service.xml similarity index 100% rename from 00_framework/core/src/test/resources/spring-service.xml rename to framework/core/src/test/resources/spring-service.xml diff --git a/00_framework/admin/.classpath b/framework/exchange-api/.classpath similarity index 64% rename from 00_framework/admin/.classpath rename to framework/exchange-api/.classpath index 87c8faa7..c374e90b 100644 --- a/00_framework/admin/.classpath +++ b/framework/exchange-api/.classpath @@ -1,41 +1,55 @@ - + + + + + + + - + + - + - + - + - + - + + + + - + + + + + diff --git a/00_framework/exchange-api/.gitignore b/framework/exchange-api/.gitignore similarity index 100% rename from 00_framework/exchange-api/.gitignore rename to framework/exchange-api/.gitignore diff --git a/00_framework/exchange-api/.project b/framework/exchange-api/.project similarity index 64% rename from 00_framework/exchange-api/.project rename to framework/exchange-api/.project index 7560629b..5e1116bb 100644 --- a/00_framework/exchange-api/.project +++ b/framework/exchange-api/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866796 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/exchange-api/.settings/org.eclipse.core.resources.prefs b/framework/exchange-api/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/exchange-api/.settings/org.eclipse.core.resources.prefs rename to framework/exchange-api/.settings/org.eclipse.core.resources.prefs diff --git a/framework/exchange-api/.settings/org.eclipse.jdt.apt.core.prefs b/framework/exchange-api/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/exchange-api/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/exchange-api/.settings/org.eclipse.jdt.core.prefs b/framework/exchange-api/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/exchange-api/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/exchange-api/.settings/org.eclipse.m2e.core.prefs b/framework/exchange-api/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/exchange-api/.settings/org.eclipse.m2e.core.prefs rename to framework/exchange-api/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/exchange-api/pom.xml b/framework/exchange-api/pom.xml similarity index 100% rename from 00_framework/exchange-api/pom.xml rename to framework/exchange-api/pom.xml diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/ExchangeApiApplication.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/ExchangeApiApplication.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/ExchangeApiApplication.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/ExchangeApiApplication.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/ExchangeCoinController.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/ExchangeCoinController.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/ExchangeCoinController.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/ExchangeCoinController.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/FavorController.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/FavorController.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/FavorController.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/FavorController.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java diff --git a/00_framework/exchange-api/src/main/java/com/bizzan/bitrade/job/OrderUpdateJob.java b/framework/exchange-api/src/main/java/com/bizzan/bitrade/job/OrderUpdateJob.java similarity index 100% rename from 00_framework/exchange-api/src/main/java/com/bizzan/bitrade/job/OrderUpdateJob.java rename to framework/exchange-api/src/main/java/com/bizzan/bitrade/job/OrderUpdateJob.java diff --git a/00_framework/exchange-api/src/main/resources/dev/application.properties b/framework/exchange-api/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/dev/application.properties rename to framework/exchange-api/src/main/resources/dev/application.properties diff --git a/00_framework/exchange-api/src/main/resources/dev/i18n/messages_en_US.properties b/framework/exchange-api/src/main/resources/dev/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/dev/i18n/messages_en_US.properties rename to framework/exchange-api/src/main/resources/dev/i18n/messages_en_US.properties diff --git a/00_framework/exchange-api/src/main/resources/dev/i18n/messages_zh_CN.properties b/framework/exchange-api/src/main/resources/dev/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/dev/i18n/messages_zh_CN.properties rename to framework/exchange-api/src/main/resources/dev/i18n/messages_zh_CN.properties diff --git a/00_framework/exchange-api/src/main/resources/dev/logback-spring.xml b/framework/exchange-api/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/exchange-api/src/main/resources/dev/logback-spring.xml rename to framework/exchange-api/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/exchange-api/src/main/resources/prod/application.properties b/framework/exchange-api/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/prod/application.properties rename to framework/exchange-api/src/main/resources/prod/application.properties diff --git a/00_framework/exchange-api/src/main/resources/prod/i18n/messages_en_US.properties b/framework/exchange-api/src/main/resources/prod/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/prod/i18n/messages_en_US.properties rename to framework/exchange-api/src/main/resources/prod/i18n/messages_en_US.properties diff --git a/00_framework/exchange-api/src/main/resources/prod/i18n/messages_zh_CN.properties b/framework/exchange-api/src/main/resources/prod/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/prod/i18n/messages_zh_CN.properties rename to framework/exchange-api/src/main/resources/prod/i18n/messages_zh_CN.properties diff --git a/00_framework/exchange-api/src/main/resources/prod/logback-spring.xml b/framework/exchange-api/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/exchange-api/src/main/resources/prod/logback-spring.xml rename to framework/exchange-api/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/exchange-api/src/main/resources/test/application.properties b/framework/exchange-api/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/test/application.properties rename to framework/exchange-api/src/main/resources/test/application.properties diff --git a/00_framework/exchange-api/src/main/resources/test/i18n/messages_en_US.properties b/framework/exchange-api/src/main/resources/test/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/test/i18n/messages_en_US.properties rename to framework/exchange-api/src/main/resources/test/i18n/messages_en_US.properties diff --git a/00_framework/exchange-api/src/main/resources/test/i18n/messages_zh_CN.properties b/framework/exchange-api/src/main/resources/test/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/exchange-api/src/main/resources/test/i18n/messages_zh_CN.properties rename to framework/exchange-api/src/main/resources/test/i18n/messages_zh_CN.properties diff --git a/00_framework/exchange-api/src/main/resources/test/logback-spring.xml b/framework/exchange-api/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/exchange-api/src/main/resources/test/logback-spring.xml rename to framework/exchange-api/src/main/resources/test/logback-spring.xml diff --git a/framework/exchange-core/.classpath b/framework/exchange-core/.classpath new file mode 100644 index 00000000..7aba4ab3 --- /dev/null +++ b/framework/exchange-core/.classpath @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/exchange-core/.gitignore b/framework/exchange-core/.gitignore similarity index 100% rename from 00_framework/exchange-core/.gitignore rename to framework/exchange-core/.gitignore diff --git a/00_framework/exchange-core/.project b/framework/exchange-core/.project similarity index 64% rename from 00_framework/exchange-core/.project rename to framework/exchange-core/.project index 87f6d134..891c35dd 100644 --- a/00_framework/exchange-core/.project +++ b/framework/exchange-core/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866796 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/framework/exchange-core/.settings/org.eclipse.core.resources.prefs b/framework/exchange-core/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..603625b3 --- /dev/null +++ b/framework/exchange-core/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/test/java=UTF-8 +encoding//target/generated-sources/java=UTF-8 +encoding/=UTF-8 diff --git a/framework/exchange-core/.settings/org.eclipse.jdt.apt.core.prefs b/framework/exchange-core/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/exchange-core/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/exchange-core/.settings/org.eclipse.jdt.core.prefs b/framework/exchange-core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/exchange-core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/exchange-core/.settings/org.eclipse.m2e.core.prefs b/framework/exchange-core/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/exchange-core/.settings/org.eclipse.m2e.core.prefs rename to framework/exchange-core/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/exchange-core/pom.xml b/framework/exchange-core/pom.xml similarity index 100% rename from 00_framework/exchange-core/pom.xml rename to framework/exchange-core/pom.xml diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeCoinRepository.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeCoinRepository.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeCoinRepository.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeCoinRepository.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderDetailRepository.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderDetailRepository.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderDetailRepository.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderDetailRepository.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderRepository.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderRepository.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderRepository.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeOrderRepository.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeTradeRepository.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeTradeRepository.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeTradeRepository.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/ExchangeTradeRepository.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/FavorSymbolRepository.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/FavorSymbolRepository.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/FavorSymbolRepository.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/FavorSymbolRepository.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/OrderDetailAggregationRepository.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/OrderDetailAggregationRepository.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/OrderDetailAggregationRepository.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/dao/OrderDetailAggregationRepository.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/CoinThumb.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoin.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoin.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoin.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoin.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoinPublishType.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoinPublishType.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoinPublishType.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeCoinPublishType.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrder.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrder.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrder.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrder.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDetail.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDetail.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDetail.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDetail.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDirection.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDirection.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDirection.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderDirection.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderMessage.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderMessage.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderMessage.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderMessage.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderStatus.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderStatus.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderStatus.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderStatus.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderType.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderType.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderType.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeOrderType.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeTrade.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeTrade.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeTrade.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/ExchangeTrade.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/FavorSymbol.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/FavorSymbol.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/FavorSymbol.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/FavorSymbol.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/KLine.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/KLine.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/KLine.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/KLine.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/MergeOrder.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/MergeOrder.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/MergeOrder.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/MergeOrder.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderDetailAggregation.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderDetailAggregation.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderDetailAggregation.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderDetailAggregation.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderTypeEnum.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderTypeEnum.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderTypeEnum.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/OrderTypeEnum.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TempWealthInfo.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TempWealthInfo.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TempWealthInfo.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TempWealthInfo.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlate.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlate.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlate.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlate.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlateItem.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlateItem.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlateItem.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/entity/TradePlateItem.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/pagenation/EntityPage.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/pagenation/EntityPage.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/pagenation/EntityPage.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/pagenation/EntityPage.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeCoinService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeCoinService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeCoinService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeCoinService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderDetailService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderDetailService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderDetailService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderDetailService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeOrderService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeTradeService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeTradeService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeTradeService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/ExchangeTradeService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/FavorSymbolService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/FavorSymbolService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/FavorSymbolService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/FavorSymbolService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/OrderDetailAggregationService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/OrderDetailAggregationService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/OrderDetailAggregationService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/OrderDetailAggregationService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/base/MongoBaseService.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/service/base/MongoBaseService.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/service/base/MongoBaseService.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/service/base/MongoBaseService.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/util/GeneratorUtil.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/util/PageUtil.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/util/PageUtil.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/util/PageUtil.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/util/PageUtil.java diff --git a/00_framework/exchange-core/src/main/java/com/bizzan/bitrade/vo/ExchangeTradeVO.java b/framework/exchange-core/src/main/java/com/bizzan/bitrade/vo/ExchangeTradeVO.java similarity index 100% rename from 00_framework/exchange-core/src/main/java/com/bizzan/bitrade/vo/ExchangeTradeVO.java rename to framework/exchange-core/src/main/java/com/bizzan/bitrade/vo/ExchangeTradeVO.java diff --git a/framework/exchange/.classpath b/framework/exchange/.classpath new file mode 100644 index 00000000..e14e6aa7 --- /dev/null +++ b/framework/exchange/.classpath @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/exchange/.gitignore b/framework/exchange/.gitignore similarity index 100% rename from 00_framework/exchange/.gitignore rename to framework/exchange/.gitignore diff --git a/00_framework/exchange/.project b/framework/exchange/.project similarity index 64% rename from 00_framework/exchange/.project rename to framework/exchange/.project index 6ab6fa38..2004a1fe 100644 --- a/00_framework/exchange/.project +++ b/framework/exchange/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866795 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/exchange/.settings/org.eclipse.core.resources.prefs b/framework/exchange/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/exchange/.settings/org.eclipse.core.resources.prefs rename to framework/exchange/.settings/org.eclipse.core.resources.prefs diff --git a/framework/exchange/.settings/org.eclipse.jdt.apt.core.prefs b/framework/exchange/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/exchange/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/exchange/.settings/org.eclipse.jdt.core.prefs b/framework/exchange/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/exchange/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/exchange/.settings/org.eclipse.m2e.core.prefs b/framework/exchange/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/exchange/.settings/org.eclipse.m2e.core.prefs rename to framework/exchange/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/exchange/pom.xml b/framework/exchange/pom.xml similarity index 100% rename from 00_framework/exchange/pom.xml rename to framework/exchange/pom.xml diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/ExchangeApplication.java b/framework/exchange/src/main/java/com/bizzan/bitrade/ExchangeApplication.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/ExchangeApplication.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/ExchangeApplication.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTrader.java b/framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTrader.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTrader.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTrader.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTraderFactory.java b/framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTraderFactory.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTraderFactory.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/Trader/CoinTraderFactory.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderConfig.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderConfig.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderConfig.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderConfig.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderEvent.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderEvent.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderEvent.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/CoinTraderEvent.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/CorsConfig.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/CorsConfig.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/CorsConfig.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/CorsConfig.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/ExchangeSpringEvent.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/ExchangeSpringEvent.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/ExchangeSpringEvent.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/ExchangeSpringEvent.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/exchange/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/consumer/ExchangeOrderConsumer.java b/framework/exchange/src/main/java/com/bizzan/bitrade/consumer/ExchangeOrderConsumer.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/consumer/ExchangeOrderConsumer.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/consumer/ExchangeOrderConsumer.java diff --git a/00_framework/exchange/src/main/java/com/bizzan/bitrade/controller/MonitorController.java b/framework/exchange/src/main/java/com/bizzan/bitrade/controller/MonitorController.java similarity index 100% rename from 00_framework/exchange/src/main/java/com/bizzan/bitrade/controller/MonitorController.java rename to framework/exchange/src/main/java/com/bizzan/bitrade/controller/MonitorController.java diff --git a/00_framework/exchange/src/main/resources/dev/application.properties b/framework/exchange/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/exchange/src/main/resources/dev/application.properties rename to framework/exchange/src/main/resources/dev/application.properties diff --git a/00_framework/exchange/src/main/resources/dev/logback-spring.xml b/framework/exchange/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/exchange/src/main/resources/dev/logback-spring.xml rename to framework/exchange/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/exchange/src/main/resources/prod/application.properties b/framework/exchange/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/exchange/src/main/resources/prod/application.properties rename to framework/exchange/src/main/resources/prod/application.properties diff --git a/00_framework/exchange/src/main/resources/prod/logback-spring.xml b/framework/exchange/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/exchange/src/main/resources/prod/logback-spring.xml rename to framework/exchange/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/exchange/src/main/resources/test/application.properties b/framework/exchange/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/exchange/src/main/resources/test/application.properties rename to framework/exchange/src/main/resources/test/application.properties diff --git a/00_framework/exchange/src/main/resources/test/logback-spring.xml b/framework/exchange/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/exchange/src/main/resources/test/logback-spring.xml rename to framework/exchange/src/main/resources/test/logback-spring.xml diff --git a/00_framework/exchange/src/test/java/com/bizzan/bitrade/BigDecimalTest.java b/framework/exchange/src/test/java/com/bizzan/bitrade/BigDecimalTest.java similarity index 100% rename from 00_framework/exchange/src/test/java/com/bizzan/bitrade/BigDecimalTest.java rename to framework/exchange/src/test/java/com/bizzan/bitrade/BigDecimalTest.java diff --git a/00_framework/exchange/src/test/java/com/bizzan/bitrade/CoinTraderTest.java b/framework/exchange/src/test/java/com/bizzan/bitrade/CoinTraderTest.java similarity index 100% rename from 00_framework/exchange/src/test/java/com/bizzan/bitrade/CoinTraderTest.java rename to framework/exchange/src/test/java/com/bizzan/bitrade/CoinTraderTest.java diff --git a/00_framework/exchange/src/test/java/com/bizzan/bitrade/LockFreeTest.java b/framework/exchange/src/test/java/com/bizzan/bitrade/LockFreeTest.java similarity index 100% rename from 00_framework/exchange/src/test/java/com/bizzan/bitrade/LockFreeTest.java rename to framework/exchange/src/test/java/com/bizzan/bitrade/LockFreeTest.java diff --git a/00_framework/exchange/src/test/java/com/bizzan/bitrade/ThreadTest.java b/framework/exchange/src/test/java/com/bizzan/bitrade/ThreadTest.java similarity index 100% rename from 00_framework/exchange/src/test/java/com/bizzan/bitrade/ThreadTest.java rename to framework/exchange/src/test/java/com/bizzan/bitrade/ThreadTest.java diff --git a/00_framework/jar/apns-http2-core-1.3.jar b/framework/jar/apns-http2-core-1.3.jar similarity index 100% rename from 00_framework/jar/apns-http2-core-1.3.jar rename to framework/jar/apns-http2-core-1.3.jar diff --git a/00_framework/jar/aqmd-netty-2.0.1.jar b/framework/jar/aqmd-netty-2.0.1.jar similarity index 100% rename from 00_framework/jar/aqmd-netty-2.0.1.jar rename to framework/jar/aqmd-netty-2.0.1.jar diff --git a/00_framework/jar/aqmd-netty-api-2.0.1.jar b/framework/jar/aqmd-netty-api-2.0.1.jar similarity index 100% rename from 00_framework/jar/aqmd-netty-api-2.0.1.jar rename to framework/jar/aqmd-netty-api-2.0.1.jar diff --git a/00_framework/jar/aqmd-netty-core-2.0.1.jar b/framework/jar/aqmd-netty-core-2.0.1.jar similarity index 100% rename from 00_framework/jar/aqmd-netty-core-2.0.1.jar rename to framework/jar/aqmd-netty-core-2.0.1.jar diff --git a/00_framework/jar/spark-core-2.6.0.jar b/framework/jar/spark-core-2.6.0.jar similarity index 100% rename from 00_framework/jar/spark-core-2.6.0.jar rename to framework/jar/spark-core-2.6.0.jar diff --git a/00_framework/chat/.classpath b/framework/market/.classpath similarity index 62% rename from 00_framework/chat/.classpath rename to framework/market/.classpath index 87c8faa7..66c154e5 100644 --- a/00_framework/chat/.classpath +++ b/framework/market/.classpath @@ -9,33 +9,48 @@ + - + + + - + - + + + + + + - + - + + + + - + + + + + diff --git a/00_framework/market/.gitignore b/framework/market/.gitignore similarity index 100% rename from 00_framework/market/.gitignore rename to framework/market/.gitignore diff --git a/00_framework/market/.project b/framework/market/.project similarity index 64% rename from 00_framework/market/.project rename to framework/market/.project index 36266d3a..5b2aa68e 100644 --- a/00_framework/market/.project +++ b/framework/market/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866798 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/market/.settings/org.eclipse.core.resources.prefs b/framework/market/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/market/.settings/org.eclipse.core.resources.prefs rename to framework/market/.settings/org.eclipse.core.resources.prefs diff --git a/framework/market/.settings/org.eclipse.jdt.apt.core.prefs b/framework/market/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/market/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/market/.settings/org.eclipse.jdt.core.prefs b/framework/market/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/market/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/market/.settings/org.eclipse.m2e.core.prefs b/framework/market/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/market/.settings/org.eclipse.m2e.core.prefs rename to framework/market/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/market/lib/aqmd-netty-2.0.1.jar b/framework/market/lib/aqmd-netty-2.0.1.jar similarity index 100% rename from 00_framework/market/lib/aqmd-netty-2.0.1.jar rename to framework/market/lib/aqmd-netty-2.0.1.jar diff --git a/00_framework/market/lib/aqmd-netty-api-2.0.1.jar b/framework/market/lib/aqmd-netty-api-2.0.1.jar similarity index 100% rename from 00_framework/market/lib/aqmd-netty-api-2.0.1.jar rename to framework/market/lib/aqmd-netty-api-2.0.1.jar diff --git a/00_framework/market/lib/aqmd-netty-core-2.0.1.jar b/framework/market/lib/aqmd-netty-core-2.0.1.jar similarity index 100% rename from 00_framework/market/lib/aqmd-netty-core-2.0.1.jar rename to framework/market/lib/aqmd-netty-core-2.0.1.jar diff --git a/00_framework/market/pom.xml b/framework/market/pom.xml similarity index 100% rename from 00_framework/market/pom.xml rename to framework/market/pom.xml diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/ApplicationEvent.java b/framework/market/src/main/java/com/bizzan/bitrade/ApplicationEvent.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/ApplicationEvent.java rename to framework/market/src/main/java/com/bizzan/bitrade/ApplicationEvent.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/MarketApplication.java b/framework/market/src/main/java/com/bizzan/bitrade/MarketApplication.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/MarketApplication.java rename to framework/market/src/main/java/com/bizzan/bitrade/MarketApplication.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/component/CoinExchangeRate.java b/framework/market/src/main/java/com/bizzan/bitrade/component/CoinExchangeRate.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/component/CoinExchangeRate.java rename to framework/market/src/main/java/com/bizzan/bitrade/component/CoinExchangeRate.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/config/ContextConfig.java b/framework/market/src/main/java/com/bizzan/bitrade/config/ContextConfig.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/config/ContextConfig.java rename to framework/market/src/main/java/com/bizzan/bitrade/config/ContextConfig.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java b/framework/market/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java rename to framework/market/src/main/java/com/bizzan/bitrade/config/KafkaConsumerConfiguration.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java b/framework/market/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java rename to framework/market/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/config/ProcessorConfig.java b/framework/market/src/main/java/com/bizzan/bitrade/config/ProcessorConfig.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/config/ProcessorConfig.java rename to framework/market/src/main/java/com/bizzan/bitrade/config/ProcessorConfig.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/market/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/market/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java b/framework/market/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java rename to framework/market/src/main/java/com/bizzan/bitrade/config/WebSocketConfig.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/consumer/DataDictionarySaveUpdateConsumer.java b/framework/market/src/main/java/com/bizzan/bitrade/consumer/DataDictionarySaveUpdateConsumer.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/consumer/DataDictionarySaveUpdateConsumer.java rename to framework/market/src/main/java/com/bizzan/bitrade/consumer/DataDictionarySaveUpdateConsumer.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/consumer/ExchangeTradeConsumer.java b/framework/market/src/main/java/com/bizzan/bitrade/consumer/ExchangeTradeConsumer.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/consumer/ExchangeTradeConsumer.java rename to framework/market/src/main/java/com/bizzan/bitrade/consumer/ExchangeTradeConsumer.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/controller/ExchangeRateController.java b/framework/market/src/main/java/com/bizzan/bitrade/controller/ExchangeRateController.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/controller/ExchangeRateController.java rename to framework/market/src/main/java/com/bizzan/bitrade/controller/ExchangeRateController.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/controller/MarketController.java b/framework/market/src/main/java/com/bizzan/bitrade/controller/MarketController.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/controller/MarketController.java rename to framework/market/src/main/java/com/bizzan/bitrade/controller/MarketController.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/dao/TradeRepository.java b/framework/market/src/main/java/com/bizzan/bitrade/dao/TradeRepository.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/dao/TradeRepository.java rename to framework/market/src/main/java/com/bizzan/bitrade/dao/TradeRepository.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/handler/MarketHandler.java b/framework/market/src/main/java/com/bizzan/bitrade/handler/MarketHandler.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/handler/MarketHandler.java rename to framework/market/src/main/java/com/bizzan/bitrade/handler/MarketHandler.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/handler/MongoMarketHandler.java b/framework/market/src/main/java/com/bizzan/bitrade/handler/MongoMarketHandler.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/handler/MongoMarketHandler.java rename to framework/market/src/main/java/com/bizzan/bitrade/handler/MongoMarketHandler.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java b/framework/market/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java rename to framework/market/src/main/java/com/bizzan/bitrade/handler/NettyHandler.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/handler/WebsocketMarketHandler.java b/framework/market/src/main/java/com/bizzan/bitrade/handler/WebsocketMarketHandler.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/handler/WebsocketMarketHandler.java rename to framework/market/src/main/java/com/bizzan/bitrade/handler/WebsocketMarketHandler.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/job/CoinProcessorJob.java b/framework/market/src/main/java/com/bizzan/bitrade/job/CoinProcessorJob.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/job/CoinProcessorJob.java rename to framework/market/src/main/java/com/bizzan/bitrade/job/CoinProcessorJob.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/job/ExchangePushJob.java b/framework/market/src/main/java/com/bizzan/bitrade/job/ExchangePushJob.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/job/ExchangePushJob.java rename to framework/market/src/main/java/com/bizzan/bitrade/job/ExchangePushJob.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/job/KLineGeneratorJob.java b/framework/market/src/main/java/com/bizzan/bitrade/job/KLineGeneratorJob.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/job/KLineGeneratorJob.java rename to framework/market/src/main/java/com/bizzan/bitrade/job/KLineGeneratorJob.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/netty/ChannelSet.java b/framework/market/src/main/java/com/bizzan/bitrade/netty/ChannelSet.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/netty/ChannelSet.java rename to framework/market/src/main/java/com/bizzan/bitrade/netty/ChannelSet.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java b/framework/market/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java rename to framework/market/src/main/java/com/bizzan/bitrade/netty/QuoteMessage.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessor.java b/framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessor.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessor.java rename to framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessor.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessorFactory.java b/framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessorFactory.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessorFactory.java rename to framework/market/src/main/java/com/bizzan/bitrade/processor/CoinProcessorFactory.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/processor/DefaultCoinProcessor.java b/framework/market/src/main/java/com/bizzan/bitrade/processor/DefaultCoinProcessor.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/processor/DefaultCoinProcessor.java rename to framework/market/src/main/java/com/bizzan/bitrade/processor/DefaultCoinProcessor.java diff --git a/00_framework/market/src/main/java/com/bizzan/bitrade/service/MarketService.java b/framework/market/src/main/java/com/bizzan/bitrade/service/MarketService.java similarity index 100% rename from 00_framework/market/src/main/java/com/bizzan/bitrade/service/MarketService.java rename to framework/market/src/main/java/com/bizzan/bitrade/service/MarketService.java diff --git a/00_framework/market/src/main/resources/dev/QuoteMessage.proto b/framework/market/src/main/resources/dev/QuoteMessage.proto similarity index 100% rename from 00_framework/market/src/main/resources/dev/QuoteMessage.proto rename to framework/market/src/main/resources/dev/QuoteMessage.proto diff --git a/00_framework/market/src/main/resources/dev/application.properties b/framework/market/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/market/src/main/resources/dev/application.properties rename to framework/market/src/main/resources/dev/application.properties diff --git a/00_framework/market/src/main/resources/dev/ehcache.xml b/framework/market/src/main/resources/dev/ehcache.xml similarity index 100% rename from 00_framework/market/src/main/resources/dev/ehcache.xml rename to framework/market/src/main/resources/dev/ehcache.xml diff --git a/00_framework/market/src/main/resources/dev/logback-spring.xml b/framework/market/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/market/src/main/resources/dev/logback-spring.xml rename to framework/market/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/market/src/main/resources/prod/QuoteMessage.proto b/framework/market/src/main/resources/prod/QuoteMessage.proto similarity index 100% rename from 00_framework/market/src/main/resources/prod/QuoteMessage.proto rename to framework/market/src/main/resources/prod/QuoteMessage.proto diff --git a/00_framework/market/src/main/resources/prod/application.properties b/framework/market/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/market/src/main/resources/prod/application.properties rename to framework/market/src/main/resources/prod/application.properties diff --git a/00_framework/market/src/main/resources/prod/ehcache.xml b/framework/market/src/main/resources/prod/ehcache.xml similarity index 100% rename from 00_framework/market/src/main/resources/prod/ehcache.xml rename to framework/market/src/main/resources/prod/ehcache.xml diff --git a/00_framework/market/src/main/resources/prod/logback-spring.xml b/framework/market/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/market/src/main/resources/prod/logback-spring.xml rename to framework/market/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/market/src/main/resources/test/QuoteMessage.proto b/framework/market/src/main/resources/test/QuoteMessage.proto similarity index 100% rename from 00_framework/market/src/main/resources/test/QuoteMessage.proto rename to framework/market/src/main/resources/test/QuoteMessage.proto diff --git a/00_framework/market/src/main/resources/test/application.properties b/framework/market/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/market/src/main/resources/test/application.properties rename to framework/market/src/main/resources/test/application.properties diff --git a/00_framework/market/src/main/resources/test/ehcache.xml b/framework/market/src/main/resources/test/ehcache.xml similarity index 100% rename from 00_framework/market/src/main/resources/test/ehcache.xml rename to framework/market/src/main/resources/test/ehcache.xml diff --git a/00_framework/market/src/main/resources/test/logback-spring.xml b/framework/market/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/market/src/main/resources/test/logback-spring.xml rename to framework/market/src/main/resources/test/logback-spring.xml diff --git a/00_framework/market/src/test/java/com/bizzan/bitrade/MarketAppTest.java b/framework/market/src/test/java/com/bizzan/bitrade/MarketAppTest.java similarity index 100% rename from 00_framework/market/src/test/java/com/bizzan/bitrade/MarketAppTest.java rename to framework/market/src/test/java/com/bizzan/bitrade/MarketAppTest.java diff --git a/framework/otc-api/.classpath b/framework/otc-api/.classpath new file mode 100644 index 00000000..e14e6aa7 --- /dev/null +++ b/framework/otc-api/.classpath @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/otc-api/.gitignore b/framework/otc-api/.gitignore similarity index 100% rename from 00_framework/otc-api/.gitignore rename to framework/otc-api/.gitignore diff --git a/00_framework/otc-api/.project b/framework/otc-api/.project similarity index 64% rename from 00_framework/otc-api/.project rename to framework/otc-api/.project index 91e66a12..abd9d2d8 100644 --- a/00_framework/otc-api/.project +++ b/framework/otc-api/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866799 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/otc-api/.settings/org.eclipse.core.resources.prefs b/framework/otc-api/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/otc-api/.settings/org.eclipse.core.resources.prefs rename to framework/otc-api/.settings/org.eclipse.core.resources.prefs diff --git a/framework/otc-api/.settings/org.eclipse.jdt.apt.core.prefs b/framework/otc-api/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/otc-api/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/otc-api/.settings/org.eclipse.jdt.core.prefs b/framework/otc-api/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/otc-api/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/otc-api/.settings/org.eclipse.m2e.core.prefs b/framework/otc-api/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/otc-api/.settings/org.eclipse.m2e.core.prefs rename to framework/otc-api/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/otc-api/pom.xml b/framework/otc-api/pom.xml similarity index 100% rename from 00_framework/otc-api/pom.xml rename to framework/otc-api/pom.xml diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/ApiApplication.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/ApiApplication.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/ApiApplication.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/ApiApplication.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/coin/CoinExchangeFactory.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/coin/CoinExchangeFactory.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/coin/CoinExchangeFactory.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/coin/CoinExchangeFactory.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/DruidConfig.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/config/DruidConfig.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/DruidConfig.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/config/DruidConfig.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/JPAQueryConfig.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/config/JPAQueryConfig.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/JPAQueryConfig.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/config/JPAQueryConfig.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/controller/AdvertiseController.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/controller/AdvertiseController.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/controller/AdvertiseController.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/controller/AdvertiseController.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OrderController.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OtcCoinController.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OtcCoinController.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OtcCoinController.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/controller/OtcCoinController.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/AppealApply.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/AppealApply.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/AppealApply.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/AppealApply.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/OrderDetail.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/OrderDetail.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/OrderDetail.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/OrderDetail.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PayInfo.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PayInfo.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PayInfo.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PayInfo.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PreOrderInfo.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PreOrderInfo.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PreOrderInfo.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/PreOrderInfo.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanMemberAddress.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanOrder.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanOrder.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanOrder.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/ScanOrder.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/BaseMessage.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/BaseMessage.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/BaseMessage.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/BaseMessage.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/ChatMessageRecord.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/ChatMessageRecord.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/ChatMessageRecord.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/entity/chat/ChatMessageRecord.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/event/OrderEvent.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/event/OrderEvent.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/event/OrderEvent.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/event/OrderEvent.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckAdvertiseTask.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckAdvertiseTask.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckAdvertiseTask.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckAdvertiseTask.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckOrderTask.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckOrderTask.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckOrderTask.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/job/CheckOrderTask.java diff --git a/00_framework/otc-api/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java b/framework/otc-api/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java similarity index 100% rename from 00_framework/otc-api/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java rename to framework/otc-api/src/main/java/com/bizzan/bitrade/model/screen/AdvertiseScreen.java diff --git a/00_framework/otc-api/src/main/resources/dev/application.properties b/framework/otc-api/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/dev/application.properties rename to framework/otc-api/src/main/resources/dev/application.properties diff --git a/00_framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties b/framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties rename to framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties diff --git a/00_framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties b/framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties rename to framework/otc-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties diff --git a/00_framework/otc-api/src/main/resources/dev/i18n/messages_en_US.properties b/framework/otc-api/src/main/resources/dev/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/dev/i18n/messages_en_US.properties rename to framework/otc-api/src/main/resources/dev/i18n/messages_en_US.properties diff --git a/00_framework/otc-api/src/main/resources/dev/i18n/messages_zh_CN.properties b/framework/otc-api/src/main/resources/dev/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/dev/i18n/messages_zh_CN.properties rename to framework/otc-api/src/main/resources/dev/i18n/messages_zh_CN.properties diff --git a/00_framework/otc-api/src/main/resources/dev/logback-spring.xml b/framework/otc-api/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/otc-api/src/main/resources/dev/logback-spring.xml rename to framework/otc-api/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/otc-api/src/main/resources/prod/application.properties b/framework/otc-api/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/prod/application.properties rename to framework/otc-api/src/main/resources/prod/application.properties diff --git a/00_framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties b/framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties rename to framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties diff --git a/00_framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties b/framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties rename to framework/otc-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties diff --git a/00_framework/otc-api/src/main/resources/prod/i18n/messages_en_US.properties b/framework/otc-api/src/main/resources/prod/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/prod/i18n/messages_en_US.properties rename to framework/otc-api/src/main/resources/prod/i18n/messages_en_US.properties diff --git a/00_framework/otc-api/src/main/resources/prod/i18n/messages_zh_CN.properties b/framework/otc-api/src/main/resources/prod/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/prod/i18n/messages_zh_CN.properties rename to framework/otc-api/src/main/resources/prod/i18n/messages_zh_CN.properties diff --git a/00_framework/otc-api/src/main/resources/prod/logback-spring.xml b/framework/otc-api/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/otc-api/src/main/resources/prod/logback-spring.xml rename to framework/otc-api/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/otc-api/src/main/resources/test/application.properties b/framework/otc-api/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/test/application.properties rename to framework/otc-api/src/main/resources/test/application.properties diff --git a/00_framework/otc-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties b/framework/otc-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties rename to framework/otc-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties diff --git a/00_framework/otc-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties b/framework/otc-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties rename to framework/otc-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties diff --git a/00_framework/otc-api/src/main/resources/test/i18n/messages_en_US.properties b/framework/otc-api/src/main/resources/test/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/test/i18n/messages_en_US.properties rename to framework/otc-api/src/main/resources/test/i18n/messages_en_US.properties diff --git a/00_framework/otc-api/src/main/resources/test/i18n/messages_zh_CN.properties b/framework/otc-api/src/main/resources/test/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/otc-api/src/main/resources/test/i18n/messages_zh_CN.properties rename to framework/otc-api/src/main/resources/test/i18n/messages_zh_CN.properties diff --git a/00_framework/otc-api/src/main/resources/test/logback-spring.xml b/framework/otc-api/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/otc-api/src/main/resources/test/logback-spring.xml rename to framework/otc-api/src/main/resources/test/logback-spring.xml diff --git a/00_framework/otc-api/src/test/java/com/bizzan/bitrade/ApiApplicationTests.java b/framework/otc-api/src/test/java/com/bizzan/bitrade/ApiApplicationTests.java similarity index 100% rename from 00_framework/otc-api/src/test/java/com/bizzan/bitrade/ApiApplicationTests.java rename to framework/otc-api/src/test/java/com/bizzan/bitrade/ApiApplicationTests.java diff --git a/00_framework/bitrade-job/.classpath b/framework/otc-core/.classpath similarity index 61% rename from 00_framework/bitrade-job/.classpath rename to framework/otc-core/.classpath index 87c8faa7..a8965644 100644 --- a/00_framework/bitrade-job/.classpath +++ b/framework/otc-core/.classpath @@ -6,36 +6,51 @@ - + + + - + - + - + + + + + + + - + + + + - + + + + + diff --git a/00_framework/otc-core/.gitignore b/framework/otc-core/.gitignore similarity index 100% rename from 00_framework/otc-core/.gitignore rename to framework/otc-core/.gitignore diff --git a/00_framework/otc-core/.project b/framework/otc-core/.project similarity index 64% rename from 00_framework/otc-core/.project rename to framework/otc-core/.project index 5aae470a..a8ce7781 100644 --- a/00_framework/otc-core/.project +++ b/framework/otc-core/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866800 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/otc-core/.settings/org.eclipse.core.resources.prefs b/framework/otc-core/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/otc-core/.settings/org.eclipse.core.resources.prefs rename to framework/otc-core/.settings/org.eclipse.core.resources.prefs diff --git a/framework/otc-core/.settings/org.eclipse.jdt.apt.core.prefs b/framework/otc-core/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/otc-core/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/otc-core/.settings/org.eclipse.jdt.core.prefs b/framework/otc-core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/otc-core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/otc-core/.settings/org.eclipse.m2e.core.prefs b/framework/otc-core/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/otc-core/.settings/org.eclipse.m2e.core.prefs rename to framework/otc-core/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/otc-core/pom.xml b/framework/otc-core/pom.xml similarity index 100% rename from 00_framework/otc-core/pom.xml rename to framework/otc-core/pom.xml diff --git a/00_framework/otc-core/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java b/framework/otc-core/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java similarity index 100% rename from 00_framework/otc-core/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java rename to framework/otc-core/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java diff --git a/00_framework/otc-core/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java b/framework/otc-core/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java similarity index 100% rename from 00_framework/otc-core/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java rename to framework/otc-core/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java diff --git a/00_framework/otc-core/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java b/framework/otc-core/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java similarity index 100% rename from 00_framework/otc-core/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java rename to framework/otc-core/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java diff --git a/00_framework/pom.xml b/framework/pom.xml similarity index 100% rename from 00_framework/pom.xml rename to framework/pom.xml diff --git a/00_framework/sql/.gitkeep b/framework/sql/.gitkeep similarity index 100% rename from 00_framework/sql/.gitkeep rename to framework/sql/.gitkeep diff --git a/00_framework/sql/db_patch.sql b/framework/sql/db_patch.sql similarity index 100% rename from 00_framework/sql/db_patch.sql rename to framework/sql/db_patch.sql diff --git a/00_framework/sql/member_wallet_trigger.sql b/framework/sql/member_wallet_trigger.sql similarity index 100% rename from 00_framework/sql/member_wallet_trigger.sql rename to framework/sql/member_wallet_trigger.sql diff --git a/framework/ucenter-api/.classpath b/framework/ucenter-api/.classpath new file mode 100644 index 00000000..e14e6aa7 --- /dev/null +++ b/framework/ucenter-api/.classpath @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/ucenter-api/.gitignore b/framework/ucenter-api/.gitignore similarity index 100% rename from 00_framework/ucenter-api/.gitignore rename to framework/ucenter-api/.gitignore diff --git a/00_framework/ucenter-api/.project b/framework/ucenter-api/.project similarity index 64% rename from 00_framework/ucenter-api/.project rename to framework/ucenter-api/.project index e915a6e2..f1e051ce 100644 --- a/00_framework/ucenter-api/.project +++ b/framework/ucenter-api/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866801 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/ucenter-api/.settings/org.eclipse.core.resources.prefs b/framework/ucenter-api/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/ucenter-api/.settings/org.eclipse.core.resources.prefs rename to framework/ucenter-api/.settings/org.eclipse.core.resources.prefs diff --git a/framework/ucenter-api/.settings/org.eclipse.jdt.apt.core.prefs b/framework/ucenter-api/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/framework/ucenter-api/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/framework/ucenter-api/.settings/org.eclipse.jdt.core.prefs b/framework/ucenter-api/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..39352882 --- /dev/null +++ b/framework/ucenter-api/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/ucenter-api/.settings/org.eclipse.m2e.core.prefs b/framework/ucenter-api/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/ucenter-api/.settings/org.eclipse.m2e.core.prefs rename to framework/ucenter-api/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/ucenter-api/pom.xml b/framework/ucenter-api/pom.xml similarity index 100% rename from 00_framework/ucenter-api/pom.xml rename to framework/ucenter-api/pom.xml diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/UcenterApplication.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/UcenterApplication.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/UcenterApplication.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/UcenterApplication.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/AntiAttackAspect.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/AntiAttackAspect.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/AntiAttackAspect.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/AntiAttackAspect.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/GeeTestAspect.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/GeeTestAspect.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/GeeTestAspect.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/GeeTestAspect.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/UpdatePayAspect.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/UpdatePayAspect.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/UpdatePayAspect.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/aspect/UpdatePayAspect.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ActuatorSecurityConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/AliyunConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/ApplicationConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/CoinExchangeFactoryConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/GeetestConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/GeetestConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/GeetestConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/GeetestConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/HttpSessionConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/KafkaProducerConfiguration.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RedisCacheConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ActivityController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ActivityController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ActivityController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ActivityController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AideController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AideController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AideController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AideController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AnnouncementController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AnnouncementController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AnnouncementController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AnnouncementController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ApproveController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ApproveController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ApproveController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/ApproveController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AssetController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AssetController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AssetController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/AssetController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/BonusController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/BonusController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/BonusController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/BonusController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CoinController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CoinController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CoinController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CoinController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CtcController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CtcController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CtcController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/CtcController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/FeedbackController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/FeedbackController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/FeedbackController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/FeedbackController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GeetestController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GeetestController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GeetestController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GeetestController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GoogleAuthenticationController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GoogleAuthenticationController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GoogleAuthenticationController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/GoogleAuthenticationController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletRechargeController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletRechargeController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletRechargeController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletRechargeController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletWithdrawController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletWithdrawController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletWithdrawController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LegalWalletWithdrawController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LoginController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LoginController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LoginController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/LoginController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MemberController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MemberController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MemberController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MemberController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MiningOrderController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MiningOrderController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MiningOrderController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/MiningOrderController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/PromotionController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/PromotionController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/PromotionController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/PromotionController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RedEnvelopeController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RedEnvelopeController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RedEnvelopeController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RedEnvelopeController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RegisterController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RegisterController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RegisterController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/RegisterController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/SmsController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/SmsController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/SmsController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/SmsController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TestController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TestController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TestController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TestController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TransferController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TransferController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TransferController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/TransferController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/UploadController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/UploadController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/UploadController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/UploadController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/WithdrawController.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/WithdrawController.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/WithdrawController.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/WithdrawController.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/screen/LegalWalletScreen.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/screen/LegalWalletScreen.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/screen/LegalWalletScreen.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/screen/LegalWalletScreen.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NECaptchaVerifier.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NECaptchaVerifier.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NECaptchaVerifier.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NECaptchaVerifier.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NESecretPair.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NESecretPair.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NESecretPair.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/NESecretPair.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/utils/HttpClient4Utils.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/utils/HttpClient4Utils.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/utils/HttpClient4Utils.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/controller/sdk/utils/HttpClient4Utils.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindAli.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindAli.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindAli.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindAli.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindBank.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindBank.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindBank.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindBank.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindWechat.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindWechat.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindWechat.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/BindWechat.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/CertifiedBusinessInfo.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/CertifiedBusinessInfo.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/CertifiedBusinessInfo.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/CertifiedBusinessInfo.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletRechargeModel.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletRechargeModel.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletRechargeModel.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletRechargeModel.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdrawModel.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdrawModel.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdrawModel.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LegalWalletWithdrawModel.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByEmail.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByEmail.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByEmail.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByEmail.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByPhone.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByPhone.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByPhone.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginByPhone.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginInfo.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginInfo.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginInfo.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/LoginInfo.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberAccount.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberAccount.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberAccount.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberAccount.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberSecurity.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberSecurity.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberSecurity.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/MemberSecurity.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionMember.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionMember.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionMember.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionMember.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionRewardRecord.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionRewardRecord.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionRewardRecord.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/PromotionRewardRecord.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/ScanWithdrawRecord.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/ScanWithdrawRecord.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/ScanWithdrawRecord.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/ScanWithdrawRecord.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/TransferAddressInfo.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/TransferAddressInfo.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/TransferAddressInfo.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/TransferAddressInfo.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/WithdrawWalletInfo.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/WithdrawWalletInfo.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/WithdrawWalletInfo.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/entity/WithdrawWalletInfo.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/CheckExchangeRate.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/MemberInviteStasticJob.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/MemberInviteStasticJob.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/MemberInviteStasticJob.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/MemberInviteStasticJob.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/SignJob.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/SignJob.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/SignJob.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/job/SignJob.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/CoinExchangeFactory.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/CoinExchangeFactory.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/CoinExchangeFactory.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/CoinExchangeFactory.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/DataDictionaryContrller.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/DataDictionaryContrller.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/DataDictionaryContrller.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/DataDictionaryContrller.java diff --git a/00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/GeetestLib.java b/framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/GeetestLib.java similarity index 100% rename from 00_framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/GeetestLib.java rename to framework/ucenter-api/src/main/java/com/bizzan/bitrade/system/GeetestLib.java diff --git a/00_framework/ucenter-api/src/main/resources/dev/application.properties b/framework/ucenter-api/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/application.properties rename to framework/ucenter-api/src/main/resources/dev/application.properties diff --git a/00_framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties b/framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties rename to framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_en_US.properties diff --git a/00_framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties b/framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties rename to framework/ucenter-api/src/main/resources/dev/i18n/ValidationMessages_zh_CN.properties diff --git a/00_framework/ucenter-api/src/main/resources/dev/i18n/messages_en_US.properties b/framework/ucenter-api/src/main/resources/dev/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/i18n/messages_en_US.properties rename to framework/ucenter-api/src/main/resources/dev/i18n/messages_en_US.properties diff --git a/00_framework/ucenter-api/src/main/resources/dev/i18n/messages_zh_CN.properties b/framework/ucenter-api/src/main/resources/dev/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/i18n/messages_zh_CN.properties rename to framework/ucenter-api/src/main/resources/dev/i18n/messages_zh_CN.properties diff --git a/00_framework/ucenter-api/src/main/resources/dev/logback-spring.xml b/framework/ucenter-api/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/logback-spring.xml rename to framework/ucenter-api/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/activateEmail.ftl b/framework/ucenter-api/src/main/resources/dev/templates/activateEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/activateEmail.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/activateEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/addAddressCodeEmail.ftl b/framework/ucenter-api/src/main/resources/dev/templates/addAddressCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/addAddressCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/addAddressCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/bindCodeEmail.ftl b/framework/ucenter-api/src/main/resources/dev/templates/bindCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/bindCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/bindCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/promotionStastic.ftl b/framework/ucenter-api/src/main/resources/dev/templates/promotionStastic.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/promotionStastic.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/promotionStastic.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/promotionStasticRank.ftl b/framework/ucenter-api/src/main/resources/dev/templates/promotionStasticRank.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/promotionStasticRank.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/promotionStasticRank.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/registeredResult.ftl b/framework/ucenter-api/src/main/resources/dev/templates/registeredResult.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/registeredResult.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/registeredResult.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/resetPasswordCodeEmail.ftl b/framework/ucenter-api/src/main/resources/dev/templates/resetPasswordCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/resetPasswordCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/resetPasswordCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/dev/templates/simpleMessage.ftl b/framework/ucenter-api/src/main/resources/dev/templates/simpleMessage.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/dev/templates/simpleMessage.ftl rename to framework/ucenter-api/src/main/resources/dev/templates/simpleMessage.ftl diff --git a/00_framework/ucenter-api/src/main/resources/prod/application.properties b/framework/ucenter-api/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/application.properties rename to framework/ucenter-api/src/main/resources/prod/application.properties diff --git a/00_framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties b/framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties rename to framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_en_US.properties diff --git a/00_framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties b/framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties rename to framework/ucenter-api/src/main/resources/prod/i18n/ValidationMessages_zh_CN.properties diff --git a/00_framework/ucenter-api/src/main/resources/prod/i18n/messages_en_US.properties b/framework/ucenter-api/src/main/resources/prod/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/i18n/messages_en_US.properties rename to framework/ucenter-api/src/main/resources/prod/i18n/messages_en_US.properties diff --git a/00_framework/ucenter-api/src/main/resources/prod/i18n/messages_zh_CN.properties b/framework/ucenter-api/src/main/resources/prod/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/i18n/messages_zh_CN.properties rename to framework/ucenter-api/src/main/resources/prod/i18n/messages_zh_CN.properties diff --git a/00_framework/ucenter-api/src/main/resources/prod/logback-spring.xml b/framework/ucenter-api/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/logback-spring.xml rename to framework/ucenter-api/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/ucenter-api/src/main/resources/prod/templates/activateEmail.ftl b/framework/ucenter-api/src/main/resources/prod/templates/activateEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/templates/activateEmail.ftl rename to framework/ucenter-api/src/main/resources/prod/templates/activateEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/prod/templates/addAddressCodeEmail.ftl b/framework/ucenter-api/src/main/resources/prod/templates/addAddressCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/templates/addAddressCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/prod/templates/addAddressCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/prod/templates/bindCodeEmail.ftl b/framework/ucenter-api/src/main/resources/prod/templates/bindCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/templates/bindCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/prod/templates/bindCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/prod/templates/registeredResult.ftl b/framework/ucenter-api/src/main/resources/prod/templates/registeredResult.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/templates/registeredResult.ftl rename to framework/ucenter-api/src/main/resources/prod/templates/registeredResult.ftl diff --git a/00_framework/ucenter-api/src/main/resources/prod/templates/resetPasswordCodeEmail.ftl b/framework/ucenter-api/src/main/resources/prod/templates/resetPasswordCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/prod/templates/resetPasswordCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/prod/templates/resetPasswordCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/test/application.properties b/framework/ucenter-api/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/application.properties rename to framework/ucenter-api/src/main/resources/test/application.properties diff --git a/00_framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties b/framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties rename to framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_en_US.properties diff --git a/00_framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties b/framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties rename to framework/ucenter-api/src/main/resources/test/i18n/ValidationMessages_zh_CN.properties diff --git a/00_framework/ucenter-api/src/main/resources/test/i18n/messages_en_US.properties b/framework/ucenter-api/src/main/resources/test/i18n/messages_en_US.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/i18n/messages_en_US.properties rename to framework/ucenter-api/src/main/resources/test/i18n/messages_en_US.properties diff --git a/00_framework/ucenter-api/src/main/resources/test/i18n/messages_zh_CN.properties b/framework/ucenter-api/src/main/resources/test/i18n/messages_zh_CN.properties similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/i18n/messages_zh_CN.properties rename to framework/ucenter-api/src/main/resources/test/i18n/messages_zh_CN.properties diff --git a/00_framework/ucenter-api/src/main/resources/test/logback-spring.xml b/framework/ucenter-api/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/logback-spring.xml rename to framework/ucenter-api/src/main/resources/test/logback-spring.xml diff --git a/00_framework/ucenter-api/src/main/resources/test/templates/activateEmail.ftl b/framework/ucenter-api/src/main/resources/test/templates/activateEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/templates/activateEmail.ftl rename to framework/ucenter-api/src/main/resources/test/templates/activateEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/test/templates/addAddressCodeEmail.ftl b/framework/ucenter-api/src/main/resources/test/templates/addAddressCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/templates/addAddressCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/test/templates/addAddressCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/test/templates/bindCodeEmail.ftl b/framework/ucenter-api/src/main/resources/test/templates/bindCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/templates/bindCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/test/templates/bindCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/main/resources/test/templates/registeredResult.ftl b/framework/ucenter-api/src/main/resources/test/templates/registeredResult.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/templates/registeredResult.ftl rename to framework/ucenter-api/src/main/resources/test/templates/registeredResult.ftl diff --git a/00_framework/ucenter-api/src/main/resources/test/templates/resetPasswordCodeEmail.ftl b/framework/ucenter-api/src/main/resources/test/templates/resetPasswordCodeEmail.ftl similarity index 100% rename from 00_framework/ucenter-api/src/main/resources/test/templates/resetPasswordCodeEmail.ftl rename to framework/ucenter-api/src/main/resources/test/templates/resetPasswordCodeEmail.ftl diff --git a/00_framework/ucenter-api/src/test/java/com/bizzan/bitrade/BasicApplicationTest.java b/framework/ucenter-api/src/test/java/com/bizzan/bitrade/BasicApplicationTest.java similarity index 100% rename from 00_framework/ucenter-api/src/test/java/com/bizzan/bitrade/BasicApplicationTest.java rename to framework/ucenter-api/src/test/java/com/bizzan/bitrade/BasicApplicationTest.java diff --git a/00_framework/ucenter-api/src/test/java/com/bizzan/bitrade/FinanceTest.java b/framework/ucenter-api/src/test/java/com/bizzan/bitrade/FinanceTest.java similarity index 100% rename from 00_framework/ucenter-api/src/test/java/com/bizzan/bitrade/FinanceTest.java rename to framework/ucenter-api/src/test/java/com/bizzan/bitrade/FinanceTest.java diff --git a/framework/wallet/.classpath b/framework/wallet/.classpath new file mode 100644 index 00000000..e14e6aa7 --- /dev/null +++ b/framework/wallet/.classpath @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/00_framework/wallet/.gitignore b/framework/wallet/.gitignore similarity index 100% rename from 00_framework/wallet/.gitignore rename to framework/wallet/.gitignore diff --git a/00_framework/wallet/.project b/framework/wallet/.project similarity index 64% rename from 00_framework/wallet/.project rename to framework/wallet/.project index f9ff204d..0b6985eb 100644 --- a/00_framework/wallet/.project +++ b/framework/wallet/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1739664866803 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/00_framework/wallet/.settings/org.eclipse.core.resources.prefs b/framework/wallet/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 00_framework/wallet/.settings/org.eclipse.core.resources.prefs rename to framework/wallet/.settings/org.eclipse.core.resources.prefs diff --git a/framework/wallet/.settings/org.eclipse.jdt.apt.core.prefs b/framework/wallet/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..d4313d4b --- /dev/null +++ b/framework/wallet/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/framework/wallet/.settings/org.eclipse.jdt.core.prefs b/framework/wallet/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..d6d738ef --- /dev/null +++ b/framework/wallet/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/00_framework/wallet/.settings/org.eclipse.m2e.core.prefs b/framework/wallet/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 00_framework/wallet/.settings/org.eclipse.m2e.core.prefs rename to framework/wallet/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/wallet/pom.xml b/framework/wallet/pom.xml similarity index 100% rename from 00_framework/wallet/pom.xml rename to framework/wallet/pom.xml diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/WalletApplication.java b/framework/wallet/src/main/java/com/bizzan/bitrade/WalletApplication.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/WalletApplication.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/WalletApplication.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/config/JpaQueryFactoryConfig.java b/framework/wallet/src/main/java/com/bizzan/bitrade/config/JpaQueryFactoryConfig.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/config/JpaQueryFactoryConfig.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/config/JpaQueryFactoryConfig.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java b/framework/wallet/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/config/KafkaConfiguration.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java b/framework/wallet/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/config/RestTemplateConfig.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/consumer/CoinConsumer.java b/framework/wallet/src/main/java/com/bizzan/bitrade/consumer/CoinConsumer.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/consumer/CoinConsumer.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/consumer/CoinConsumer.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/consumer/FinanceConsumer.java b/framework/wallet/src/main/java/com/bizzan/bitrade/consumer/FinanceConsumer.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/consumer/FinanceConsumer.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/consumer/FinanceConsumer.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/consumer/MemberConsumer.java b/framework/wallet/src/main/java/com/bizzan/bitrade/consumer/MemberConsumer.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/consumer/MemberConsumer.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/consumer/MemberConsumer.java diff --git a/00_framework/wallet/src/main/java/com/bizzan/bitrade/controller/TestController.java b/framework/wallet/src/main/java/com/bizzan/bitrade/controller/TestController.java similarity index 100% rename from 00_framework/wallet/src/main/java/com/bizzan/bitrade/controller/TestController.java rename to framework/wallet/src/main/java/com/bizzan/bitrade/controller/TestController.java diff --git a/00_framework/wallet/src/main/resources/dev/application.properties b/framework/wallet/src/main/resources/dev/application.properties similarity index 100% rename from 00_framework/wallet/src/main/resources/dev/application.properties rename to framework/wallet/src/main/resources/dev/application.properties diff --git a/00_framework/wallet/src/main/resources/dev/logback-spring.xml b/framework/wallet/src/main/resources/dev/logback-spring.xml similarity index 100% rename from 00_framework/wallet/src/main/resources/dev/logback-spring.xml rename to framework/wallet/src/main/resources/dev/logback-spring.xml diff --git a/00_framework/wallet/src/main/resources/prod/application.properties b/framework/wallet/src/main/resources/prod/application.properties similarity index 100% rename from 00_framework/wallet/src/main/resources/prod/application.properties rename to framework/wallet/src/main/resources/prod/application.properties diff --git a/00_framework/wallet/src/main/resources/prod/logback-spring.xml b/framework/wallet/src/main/resources/prod/logback-spring.xml similarity index 100% rename from 00_framework/wallet/src/main/resources/prod/logback-spring.xml rename to framework/wallet/src/main/resources/prod/logback-spring.xml diff --git a/00_framework/wallet/src/main/resources/test/application.properties b/framework/wallet/src/main/resources/test/application.properties similarity index 100% rename from 00_framework/wallet/src/main/resources/test/application.properties rename to framework/wallet/src/main/resources/test/application.properties diff --git a/00_framework/wallet/src/main/resources/test/logback-spring.xml b/framework/wallet/src/main/resources/test/logback-spring.xml similarity index 100% rename from 00_framework/wallet/src/main/resources/test/logback-spring.xml rename to framework/wallet/src/main/resources/test/logback-spring.xml diff --git a/01_wallet_rpc/.gitignore b/wallet/.gitignore similarity index 100% rename from 01_wallet_rpc/.gitignore rename to wallet/.gitignore diff --git a/01_wallet_rpc/.settings/org.eclipse.core.resources.prefs b/wallet/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/.settings/org.eclipse.core.resources.prefs rename to wallet/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/.settings/org.eclipse.m2e.core.prefs b/wallet/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/.settings/org.eclipse.m2e.core.prefs rename to wallet/.settings/org.eclipse.m2e.core.prefs diff --git a/wallet/01_wallet_rpc/.gitignore b/wallet/01_wallet_rpc/.gitignore new file mode 100644 index 00000000..e10e727b --- /dev/null +++ b/wallet/01_wallet_rpc/.gitignore @@ -0,0 +1 @@ +/.metadata/ diff --git a/wallet/01_wallet_rpc/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..99f26c02 --- /dev/null +++ b/wallet/01_wallet_rpc/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/01_wallet_rpc/act/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/act/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/.settings/org.eclipse.m2e.core.prefs diff --git a/00_framework/cloud/.classpath b/wallet/01_wallet_rpc/act/.classpath similarity index 100% rename from 00_framework/cloud/.classpath rename to wallet/01_wallet_rpc/act/.classpath diff --git a/01_wallet_rpc/act/.gitignore b/wallet/01_wallet_rpc/act/.gitignore similarity index 100% rename from 01_wallet_rpc/act/.gitignore rename to wallet/01_wallet_rpc/act/.gitignore diff --git a/01_wallet_rpc/act/.project b/wallet/01_wallet_rpc/act/.project similarity index 100% rename from 01_wallet_rpc/act/.project rename to wallet/01_wallet_rpc/act/.project diff --git a/01_wallet_rpc/act/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/act/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/act/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/act/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/admin/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/act/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/admin/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/act/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/bch/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/act/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/bch/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/act/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/act/bin/.project b/wallet/01_wallet_rpc/act/bin/.project similarity index 100% rename from 01_wallet_rpc/act/bin/.project rename to wallet/01_wallet_rpc/act/bin/.project diff --git a/01_wallet_rpc/act/bin/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/act/bin/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/act/bin/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/act/bin/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/bitrade-job/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/act/bin/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/bitrade-job/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/act/bin/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/act/bin/pom.xml b/wallet/01_wallet_rpc/act/bin/pom.xml similarity index 100% rename from 01_wallet_rpc/act/bin/pom.xml rename to wallet/01_wallet_rpc/act/bin/pom.xml diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class diff --git a/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class b/wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class rename to wallet/01_wallet_rpc/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class diff --git a/01_wallet_rpc/act/bin/src/main/resources/application.properties b/wallet/01_wallet_rpc/act/bin/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/act/bin/src/main/resources/application.properties rename to wallet/01_wallet_rpc/act/bin/src/main/resources/application.properties diff --git a/01_wallet_rpc/act/bin/src/test/java/ActClientTest.class b/wallet/01_wallet_rpc/act/bin/src/test/java/ActClientTest.class similarity index 100% rename from 01_wallet_rpc/act/bin/src/test/java/ActClientTest.class rename to wallet/01_wallet_rpc/act/bin/src/test/java/ActClientTest.class diff --git a/01_wallet_rpc/act/bin/target/classes/META-INF/MANIFEST.MF b/wallet/01_wallet_rpc/act/bin/target/classes/META-INF/MANIFEST.MF similarity index 100% rename from 01_wallet_rpc/act/bin/target/classes/META-INF/MANIFEST.MF rename to wallet/01_wallet_rpc/act/bin/target/classes/META-INF/MANIFEST.MF diff --git a/01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties b/wallet/01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties similarity index 100% rename from 01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties rename to wallet/01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties diff --git a/01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml b/wallet/01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml similarity index 100% rename from 01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml rename to wallet/01_wallet_rpc/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml diff --git a/01_wallet_rpc/act/bin/target/classes/application.properties b/wallet/01_wallet_rpc/act/bin/target/classes/application.properties similarity index 100% rename from 01_wallet_rpc/act/bin/target/classes/application.properties rename to wallet/01_wallet_rpc/act/bin/target/classes/application.properties diff --git a/01_wallet_rpc/act/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/act/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/act/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/act/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/act/pom.xml b/wallet/01_wallet_rpc/act/pom.xml similarity index 100% rename from 01_wallet_rpc/act/pom.xml rename to wallet/01_wallet_rpc/act/pom.xml diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java b/wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java similarity index 100% rename from 01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java rename to wallet/01_wallet_rpc/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java diff --git a/01_wallet_rpc/act/src/main/resources/application.properties b/wallet/01_wallet_rpc/act/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/act/src/main/resources/application.properties rename to wallet/01_wallet_rpc/act/src/main/resources/application.properties diff --git a/01_wallet_rpc/act/src/test/java/ActClientTest.java b/wallet/01_wallet_rpc/act/src/test/java/ActClientTest.java similarity index 100% rename from 01_wallet_rpc/act/src/test/java/ActClientTest.java rename to wallet/01_wallet_rpc/act/src/test/java/ActClientTest.java diff --git a/01_wallet_rpc/bch/.classpath b/wallet/01_wallet_rpc/bch/.classpath similarity index 100% rename from 01_wallet_rpc/bch/.classpath rename to wallet/01_wallet_rpc/bch/.classpath diff --git a/01_wallet_rpc/bch/.gitignore b/wallet/01_wallet_rpc/bch/.gitignore similarity index 100% rename from 01_wallet_rpc/bch/.gitignore rename to wallet/01_wallet_rpc/bch/.gitignore diff --git a/01_wallet_rpc/bch/.project b/wallet/01_wallet_rpc/bch/.project similarity index 100% rename from 01_wallet_rpc/bch/.project rename to wallet/01_wallet_rpc/bch/.project diff --git a/01_wallet_rpc/bch/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/bch/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/bch/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/bch/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/bch/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/bch/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/bch/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/bch/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/bitcoin/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/bch/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/bitcoin/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/bch/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/bch/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/bch/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/bch/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/bch/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/bch/pom.xml b/wallet/01_wallet_rpc/bch/pom.xml similarity index 100% rename from 01_wallet_rpc/bch/pom.xml rename to wallet/01_wallet_rpc/bch/pom.xml diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java similarity index 100% rename from 01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java rename to wallet/01_wallet_rpc/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java diff --git a/01_wallet_rpc/bch/src/main/resources/application.properties b/wallet/01_wallet_rpc/bch/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/bch/src/main/resources/application.properties rename to wallet/01_wallet_rpc/bch/src/main/resources/application.properties diff --git a/01_wallet_rpc/bch/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/bch/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/bch/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/bch/src/test/java/SimpleTest.java diff --git a/01_wallet_rpc/bitcoin/.classpath b/wallet/01_wallet_rpc/bitcoin/.classpath similarity index 100% rename from 01_wallet_rpc/bitcoin/.classpath rename to wallet/01_wallet_rpc/bitcoin/.classpath diff --git a/01_wallet_rpc/bitcoin/.gitignore b/wallet/01_wallet_rpc/bitcoin/.gitignore similarity index 100% rename from 01_wallet_rpc/bitcoin/.gitignore rename to wallet/01_wallet_rpc/bitcoin/.gitignore diff --git a/01_wallet_rpc/bitcoin/.project b/wallet/01_wallet_rpc/bitcoin/.project similarity index 100% rename from 01_wallet_rpc/bitcoin/.project rename to wallet/01_wallet_rpc/bitcoin/.project diff --git a/01_wallet_rpc/bitcoin/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/bitcoin/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/bitcoin/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/bitcoin/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/bitcoin/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/bitcoin/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/bitcoin/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/bitcoin/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/bsv/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/bitcoin/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/bsv/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/bitcoin/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/bitcoin/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/bitcoin/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/bitcoin/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/bitcoin/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/bitcoin/pom.xml b/wallet/01_wallet_rpc/bitcoin/pom.xml similarity index 100% rename from 01_wallet_rpc/bitcoin/pom.xml rename to wallet/01_wallet_rpc/bitcoin/pom.xml diff --git a/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java b/wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java similarity index 100% rename from 01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java rename to wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java diff --git a/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java b/wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java similarity index 100% rename from 01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java rename to wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java diff --git a/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/bitcoin/src/main/resources/application.properties b/wallet/01_wallet_rpc/bitcoin/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/bitcoin/src/main/resources/application.properties rename to wallet/01_wallet_rpc/bitcoin/src/main/resources/application.properties diff --git a/01_wallet_rpc/bitcoin/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/bitcoin/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/bitcoin/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/bitcoin/src/test/java/SimpleTest.java diff --git a/01_wallet_rpc/bsv/.classpath b/wallet/01_wallet_rpc/bsv/.classpath similarity index 100% rename from 01_wallet_rpc/bsv/.classpath rename to wallet/01_wallet_rpc/bsv/.classpath diff --git a/01_wallet_rpc/bsv/.gitignore b/wallet/01_wallet_rpc/bsv/.gitignore similarity index 100% rename from 01_wallet_rpc/bsv/.gitignore rename to wallet/01_wallet_rpc/bsv/.gitignore diff --git a/01_wallet_rpc/bsv/.project b/wallet/01_wallet_rpc/bsv/.project similarity index 100% rename from 01_wallet_rpc/bsv/.project rename to wallet/01_wallet_rpc/bsv/.project diff --git a/01_wallet_rpc/bsv/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/bsv/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/bsv/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/bsv/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/bsv/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/bsv/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/bsv/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/bsv/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/btm/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/bsv/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/btm/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/bsv/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/bsv/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/bsv/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/bsv/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/bsv/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/bsv/pom.xml b/wallet/01_wallet_rpc/bsv/pom.xml similarity index 100% rename from 01_wallet_rpc/bsv/pom.xml rename to wallet/01_wallet_rpc/bsv/pom.xml diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java similarity index 100% rename from 01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java rename to wallet/01_wallet_rpc/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java diff --git a/01_wallet_rpc/bsv/src/main/resources/application.properties b/wallet/01_wallet_rpc/bsv/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/bsv/src/main/resources/application.properties rename to wallet/01_wallet_rpc/bsv/src/main/resources/application.properties diff --git a/01_wallet_rpc/bsv/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/bsv/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/bsv/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/bsv/src/test/java/SimpleTest.java diff --git a/01_wallet_rpc/btm/.classpath b/wallet/01_wallet_rpc/btm/.classpath similarity index 100% rename from 01_wallet_rpc/btm/.classpath rename to wallet/01_wallet_rpc/btm/.classpath diff --git a/01_wallet_rpc/btm/.gitignore b/wallet/01_wallet_rpc/btm/.gitignore similarity index 100% rename from 01_wallet_rpc/btm/.gitignore rename to wallet/01_wallet_rpc/btm/.gitignore diff --git a/01_wallet_rpc/btm/.project b/wallet/01_wallet_rpc/btm/.project similarity index 100% rename from 01_wallet_rpc/btm/.project rename to wallet/01_wallet_rpc/btm/.project diff --git a/01_wallet_rpc/btm/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/btm/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/btm/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/btm/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/btm/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/btm/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/btm/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/btm/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/ect/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/btm/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/ect/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/btm/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/btm/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/btm/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/btm/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/btm/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/btm/pom.xml b/wallet/01_wallet_rpc/btm/pom.xml similarity index 100% rename from 01_wallet_rpc/btm/pom.xml rename to wallet/01_wallet_rpc/btm/pom.xml diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java similarity index 100% rename from 01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java rename to wallet/01_wallet_rpc/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java diff --git a/01_wallet_rpc/btm/src/main/resources/application.properties b/wallet/01_wallet_rpc/btm/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/btm/src/main/resources/application.properties rename to wallet/01_wallet_rpc/btm/src/main/resources/application.properties diff --git a/01_wallet_rpc/btm/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/btm/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/btm/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/btm/src/test/java/SimpleTest.java diff --git a/01_wallet_rpc/act/.classpath b/wallet/01_wallet_rpc/ect/.classpath similarity index 100% rename from 01_wallet_rpc/act/.classpath rename to wallet/01_wallet_rpc/ect/.classpath diff --git a/01_wallet_rpc/ect/.gitignore b/wallet/01_wallet_rpc/ect/.gitignore similarity index 100% rename from 01_wallet_rpc/ect/.gitignore rename to wallet/01_wallet_rpc/ect/.gitignore diff --git a/01_wallet_rpc/ect/.project b/wallet/01_wallet_rpc/ect/.project similarity index 100% rename from 01_wallet_rpc/ect/.project rename to wallet/01_wallet_rpc/ect/.project diff --git a/01_wallet_rpc/ect/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/ect/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/ect/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/ect/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/chat/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/ect/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/chat/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/ect/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/eos/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/ect/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/eos/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/ect/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/ect/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/ect/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/ect/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/ect/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/ect/pom.xml b/wallet/01_wallet_rpc/ect/pom.xml similarity index 100% rename from 01_wallet_rpc/ect/pom.xml rename to wallet/01_wallet_rpc/ect/pom.xml diff --git a/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java b/wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java similarity index 100% rename from 01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java rename to wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java diff --git a/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java b/wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java similarity index 100% rename from 01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java rename to wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java diff --git a/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java b/wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java similarity index 100% rename from 01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java rename to wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java diff --git a/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/util/Convert.java b/wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/util/Convert.java similarity index 100% rename from 01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/util/Convert.java rename to wallet/01_wallet_rpc/ect/src/main/java/com/bizzan/bc/wallet/util/Convert.java diff --git a/01_wallet_rpc/ect/src/main/resources/application.properties b/wallet/01_wallet_rpc/ect/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/ect/src/main/resources/application.properties rename to wallet/01_wallet_rpc/ect/src/main/resources/application.properties diff --git a/01_wallet_rpc/eos/.classpath b/wallet/01_wallet_rpc/eos/.classpath similarity index 100% rename from 01_wallet_rpc/eos/.classpath rename to wallet/01_wallet_rpc/eos/.classpath diff --git a/01_wallet_rpc/eos/.gitignore b/wallet/01_wallet_rpc/eos/.gitignore similarity index 100% rename from 01_wallet_rpc/eos/.gitignore rename to wallet/01_wallet_rpc/eos/.gitignore diff --git a/01_wallet_rpc/eos/.project b/wallet/01_wallet_rpc/eos/.project similarity index 100% rename from 01_wallet_rpc/eos/.project rename to wallet/01_wallet_rpc/eos/.project diff --git a/01_wallet_rpc/eos/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/eos/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/eos/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/eos/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/eos/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/eos/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/eos/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/eos/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/eos/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/erc-eusdt/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/eos/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/eos/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/eos/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/eos/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/eos/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/eos/pom.xml b/wallet/01_wallet_rpc/eos/pom.xml similarity index 100% rename from 01_wallet_rpc/eos/pom.xml rename to wallet/01_wallet_rpc/eos/pom.xml diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java similarity index 100% rename from 01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java rename to wallet/01_wallet_rpc/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java diff --git a/01_wallet_rpc/eos/src/main/resources/application.properties b/wallet/01_wallet_rpc/eos/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/eos/src/main/resources/application.properties rename to wallet/01_wallet_rpc/eos/src/main/resources/application.properties diff --git a/01_wallet_rpc/eos/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/eos/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/eos/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/eos/src/test/java/SimpleTest.java diff --git a/01_wallet_rpc/ect/.classpath b/wallet/01_wallet_rpc/erc-eusdt/.classpath similarity index 100% rename from 01_wallet_rpc/ect/.classpath rename to wallet/01_wallet_rpc/erc-eusdt/.classpath diff --git a/01_wallet_rpc/erc-eusdt/.gitignore b/wallet/01_wallet_rpc/erc-eusdt/.gitignore similarity index 100% rename from 01_wallet_rpc/erc-eusdt/.gitignore rename to wallet/01_wallet_rpc/erc-eusdt/.gitignore diff --git a/01_wallet_rpc/erc-eusdt/.project b/wallet/01_wallet_rpc/erc-eusdt/.project similarity index 100% rename from 01_wallet_rpc/erc-eusdt/.project rename to wallet/01_wallet_rpc/erc-eusdt/.project diff --git a/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/erc-eusdt/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/cloud/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/cloud/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/erc-token/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/erc-token/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/erc-eusdt/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/erc-eusdt/pom.xml b/wallet/01_wallet_rpc/erc-eusdt/pom.xml similarity index 100% rename from 01_wallet_rpc/erc-eusdt/pom.xml rename to wallet/01_wallet_rpc/erc-eusdt/pom.xml diff --git a/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java b/wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java rename to wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java diff --git a/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java b/wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java rename to wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java diff --git a/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java b/wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java rename to wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java diff --git a/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java rename to wallet/01_wallet_rpc/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java diff --git a/01_wallet_rpc/erc-eusdt/src/main/resources/application.properties b/wallet/01_wallet_rpc/erc-eusdt/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/resources/application.properties rename to wallet/01_wallet_rpc/erc-eusdt/src/main/resources/application.properties diff --git a/01_wallet_rpc/erc-eusdt/src/main/resources/logback-spring.xml b/wallet/01_wallet_rpc/erc-eusdt/src/main/resources/logback-spring.xml similarity index 100% rename from 01_wallet_rpc/erc-eusdt/src/main/resources/logback-spring.xml rename to wallet/01_wallet_rpc/erc-eusdt/src/main/resources/logback-spring.xml diff --git a/01_wallet_rpc/erc-eusdt/.classpath b/wallet/01_wallet_rpc/erc-token/.classpath similarity index 100% rename from 01_wallet_rpc/erc-eusdt/.classpath rename to wallet/01_wallet_rpc/erc-token/.classpath diff --git a/01_wallet_rpc/erc-token/.gitignore b/wallet/01_wallet_rpc/erc-token/.gitignore similarity index 100% rename from 01_wallet_rpc/erc-token/.gitignore rename to wallet/01_wallet_rpc/erc-token/.gitignore diff --git a/01_wallet_rpc/erc-token/.project b/wallet/01_wallet_rpc/erc-token/.project similarity index 100% rename from 01_wallet_rpc/erc-token/.project rename to wallet/01_wallet_rpc/erc-token/.project diff --git a/01_wallet_rpc/erc-token/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/erc-token/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/erc-token/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/erc-token/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/exchange-api/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/erc-token/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/exchange-api/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/erc-token/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/eth-support/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/erc-token/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/eth-support/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/erc-token/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/erc-token/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/erc-token/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/erc-token/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/erc-token/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/erc-token/pom.xml b/wallet/01_wallet_rpc/erc-token/pom.xml similarity index 100% rename from 01_wallet_rpc/erc-token/pom.xml rename to wallet/01_wallet_rpc/erc-token/pom.xml diff --git a/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java b/wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java rename to wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java diff --git a/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java b/wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java rename to wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java diff --git a/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java b/wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java rename to wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java diff --git a/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java rename to wallet/01_wallet_rpc/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java diff --git a/01_wallet_rpc/erc-token/src/main/resources/application.properties b/wallet/01_wallet_rpc/erc-token/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/resources/application.properties rename to wallet/01_wallet_rpc/erc-token/src/main/resources/application.properties diff --git a/01_wallet_rpc/erc-token/src/main/resources/logback-spring.xml b/wallet/01_wallet_rpc/erc-token/src/main/resources/logback-spring.xml similarity index 100% rename from 01_wallet_rpc/erc-token/src/main/resources/logback-spring.xml rename to wallet/01_wallet_rpc/erc-token/src/main/resources/logback-spring.xml diff --git a/00_framework/otc-core/.classpath b/wallet/01_wallet_rpc/eth-support/.classpath similarity index 100% rename from 00_framework/otc-core/.classpath rename to wallet/01_wallet_rpc/eth-support/.classpath diff --git a/01_wallet_rpc/eth-support/.gitignore b/wallet/01_wallet_rpc/eth-support/.gitignore similarity index 100% rename from 01_wallet_rpc/eth-support/.gitignore rename to wallet/01_wallet_rpc/eth-support/.gitignore diff --git a/01_wallet_rpc/eth-support/.project b/wallet/01_wallet_rpc/eth-support/.project similarity index 100% rename from 01_wallet_rpc/eth-support/.project rename to wallet/01_wallet_rpc/eth-support/.project diff --git a/01_wallet_rpc/eth-support/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/eth-support/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/eth-support/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/eth-support/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/exchange-core/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/eth-support/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/exchange-core/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/eth-support/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/eth/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/eth-support/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/eth/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/eth-support/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/eth-support/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/eth-support/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/eth-support/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/eth-support/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/eth-support/pom.xml b/wallet/01_wallet_rpc/eth-support/pom.xml similarity index 100% rename from 01_wallet_rpc/eth-support/pom.xml rename to wallet/01_wallet_rpc/eth-support/pom.xml diff --git a/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java b/wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java similarity index 100% rename from 01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java rename to wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java diff --git a/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java b/wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java similarity index 100% rename from 01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java rename to wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java diff --git a/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java b/wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java similarity index 100% rename from 01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java rename to wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java diff --git a/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java b/wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java similarity index 100% rename from 01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java rename to wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java diff --git a/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/PaymentHandler.java b/wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/PaymentHandler.java similarity index 100% rename from 01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/PaymentHandler.java rename to wallet/01_wallet_rpc/eth-support/src/main/java/com/bizzan/bc/wallet/service/PaymentHandler.java diff --git a/01_wallet_rpc/erc-token/.classpath b/wallet/01_wallet_rpc/eth/.classpath similarity index 100% rename from 01_wallet_rpc/erc-token/.classpath rename to wallet/01_wallet_rpc/eth/.classpath diff --git a/01_wallet_rpc/eth/.gitignore b/wallet/01_wallet_rpc/eth/.gitignore similarity index 100% rename from 01_wallet_rpc/eth/.gitignore rename to wallet/01_wallet_rpc/eth/.gitignore diff --git a/01_wallet_rpc/eth/.project b/wallet/01_wallet_rpc/eth/.project similarity index 100% rename from 01_wallet_rpc/eth/.project rename to wallet/01_wallet_rpc/eth/.project diff --git a/01_wallet_rpc/eth/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/eth/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/eth/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/eth/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/exchange/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/eth/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/exchange/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/eth/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/ltc/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/eth/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/ltc/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/eth/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/eth/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/eth/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/eth/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/eth/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/eth/pom.xml b/wallet/01_wallet_rpc/eth/pom.xml similarity index 100% rename from 01_wallet_rpc/eth/pom.xml rename to wallet/01_wallet_rpc/eth/pom.xml diff --git a/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java b/wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java similarity index 100% rename from 01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java rename to wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java diff --git a/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java b/wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java similarity index 100% rename from 01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java rename to wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java diff --git a/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java similarity index 100% rename from 01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java rename to wallet/01_wallet_rpc/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java diff --git a/01_wallet_rpc/eth/src/main/resources/application.properties b/wallet/01_wallet_rpc/eth/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/eth/src/main/resources/application.properties rename to wallet/01_wallet_rpc/eth/src/main/resources/application.properties diff --git a/01_wallet_rpc/eth/src/main/resources/logback-spring.xml b/wallet/01_wallet_rpc/eth/src/main/resources/logback-spring.xml similarity index 100% rename from 01_wallet_rpc/eth/src/main/resources/logback-spring.xml rename to wallet/01_wallet_rpc/eth/src/main/resources/logback-spring.xml diff --git a/01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java b/wallet/01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java similarity index 100% rename from 01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java rename to wallet/01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java diff --git a/01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java b/wallet/01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java similarity index 100% rename from 01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java rename to wallet/01_wallet_rpc/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java diff --git a/01_wallet_rpc/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/ltc/.classpath b/wallet/01_wallet_rpc/ltc/.classpath similarity index 100% rename from 01_wallet_rpc/ltc/.classpath rename to wallet/01_wallet_rpc/ltc/.classpath diff --git a/01_wallet_rpc/ltc/.gitignore b/wallet/01_wallet_rpc/ltc/.gitignore similarity index 100% rename from 01_wallet_rpc/ltc/.gitignore rename to wallet/01_wallet_rpc/ltc/.gitignore diff --git a/01_wallet_rpc/ltc/.project b/wallet/01_wallet_rpc/ltc/.project similarity index 100% rename from 01_wallet_rpc/ltc/.project rename to wallet/01_wallet_rpc/ltc/.project diff --git a/01_wallet_rpc/ltc/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/ltc/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/ltc/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/ltc/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/ltc/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/ltc/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/ltc/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/ltc/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/rpc-common/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/ltc/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/rpc-common/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/ltc/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar b/wallet/01_wallet_rpc/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar similarity index 100% rename from 01_wallet_rpc/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar rename to wallet/01_wallet_rpc/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar diff --git a/01_wallet_rpc/ltc/lib/litecoinj-core-0.15.20190219.jar b/wallet/01_wallet_rpc/ltc/lib/litecoinj-core-0.15.20190219.jar similarity index 100% rename from 01_wallet_rpc/ltc/lib/litecoinj-core-0.15.20190219.jar rename to wallet/01_wallet_rpc/ltc/lib/litecoinj-core-0.15.20190219.jar diff --git a/01_wallet_rpc/ltc/pom.xml b/wallet/01_wallet_rpc/ltc/pom.xml similarity index 100% rename from 01_wallet_rpc/ltc/pom.xml rename to wallet/01_wallet_rpc/ltc/pom.xml diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java similarity index 100% rename from 01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java rename to wallet/01_wallet_rpc/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java diff --git a/01_wallet_rpc/ltc/src/main/resources/application.properties b/wallet/01_wallet_rpc/ltc/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/ltc/src/main/resources/application.properties rename to wallet/01_wallet_rpc/ltc/src/main/resources/application.properties diff --git a/01_wallet_rpc/ltc/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/ltc/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/ltc/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/ltc/src/test/java/SimpleTest.java diff --git a/01_wallet_rpc/pom.xml b/wallet/01_wallet_rpc/pom.xml similarity index 100% rename from 01_wallet_rpc/pom.xml rename to wallet/01_wallet_rpc/pom.xml diff --git a/01_wallet_rpc/eth-support/.classpath b/wallet/01_wallet_rpc/rpc-common/.classpath similarity index 100% rename from 01_wallet_rpc/eth-support/.classpath rename to wallet/01_wallet_rpc/rpc-common/.classpath diff --git a/01_wallet_rpc/rpc-common/.gitignore b/wallet/01_wallet_rpc/rpc-common/.gitignore similarity index 100% rename from 01_wallet_rpc/rpc-common/.gitignore rename to wallet/01_wallet_rpc/rpc-common/.gitignore diff --git a/01_wallet_rpc/rpc-common/.project b/wallet/01_wallet_rpc/rpc-common/.project similarity index 100% rename from 01_wallet_rpc/rpc-common/.project rename to wallet/01_wallet_rpc/rpc-common/.project diff --git a/01_wallet_rpc/rpc-common/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/rpc-common/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/rpc-common/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/rpc-common/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/market/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/rpc-common/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/market/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/rpc-common/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/usdt/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/rpc-common/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/usdt/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/rpc-common/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/rpc-common/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/rpc-common/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/rpc-common/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/rpc-common/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/rpc-common/pom.xml b/wallet/01_wallet_rpc/rpc-common/pom.xml similarity index 100% rename from 01_wallet_rpc/rpc-common/pom.xml rename to wallet/01_wallet_rpc/rpc-common/pom.xml diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java b/wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java similarity index 100% rename from 01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java rename to wallet/01_wallet_rpc/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java diff --git a/01_wallet_rpc/eth/.classpath b/wallet/01_wallet_rpc/usdt/.classpath similarity index 100% rename from 01_wallet_rpc/eth/.classpath rename to wallet/01_wallet_rpc/usdt/.classpath diff --git a/01_wallet_rpc/usdt/.gitignore b/wallet/01_wallet_rpc/usdt/.gitignore similarity index 100% rename from 01_wallet_rpc/usdt/.gitignore rename to wallet/01_wallet_rpc/usdt/.gitignore diff --git a/01_wallet_rpc/usdt/.project b/wallet/01_wallet_rpc/usdt/.project similarity index 100% rename from 01_wallet_rpc/usdt/.project rename to wallet/01_wallet_rpc/usdt/.project diff --git a/01_wallet_rpc/usdt/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/usdt/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/usdt/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/usdt/.settings/org.eclipse.core.resources.prefs diff --git a/00_framework/otc-api/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/usdt/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/otc-api/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/usdt/.settings/org.eclipse.jdt.core.prefs diff --git a/01_wallet_rpc/xmr/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/usdt/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from 01_wallet_rpc/xmr/.settings/org.eclipse.m2e.core.prefs rename to wallet/01_wallet_rpc/usdt/.settings/org.eclipse.m2e.core.prefs diff --git a/01_wallet_rpc/usdt/lib/bitcoin-rpc-1.2.0.jar b/wallet/01_wallet_rpc/usdt/lib/bitcoin-rpc-1.2.0.jar similarity index 100% rename from 01_wallet_rpc/usdt/lib/bitcoin-rpc-1.2.0.jar rename to wallet/01_wallet_rpc/usdt/lib/bitcoin-rpc-1.2.0.jar diff --git a/01_wallet_rpc/usdt/pom.xml b/wallet/01_wallet_rpc/usdt/pom.xml similarity index 100% rename from 01_wallet_rpc/usdt/pom.xml rename to wallet/01_wallet_rpc/usdt/pom.xml diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java similarity index 100% rename from 01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java rename to wallet/01_wallet_rpc/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java diff --git a/01_wallet_rpc/usdt/src/main/resources/application.properties b/wallet/01_wallet_rpc/usdt/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/usdt/src/main/resources/application.properties rename to wallet/01_wallet_rpc/usdt/src/main/resources/application.properties diff --git a/01_wallet_rpc/usdt/src/main/resources/logback-spring.xml b/wallet/01_wallet_rpc/usdt/src/main/resources/logback-spring.xml similarity index 100% rename from 01_wallet_rpc/usdt/src/main/resources/logback-spring.xml rename to wallet/01_wallet_rpc/usdt/src/main/resources/logback-spring.xml diff --git a/01_wallet_rpc/xmr/.classpath b/wallet/01_wallet_rpc/xmr/.classpath similarity index 100% rename from 01_wallet_rpc/xmr/.classpath rename to wallet/01_wallet_rpc/xmr/.classpath diff --git a/01_wallet_rpc/xmr/.gitignore b/wallet/01_wallet_rpc/xmr/.gitignore similarity index 100% rename from 01_wallet_rpc/xmr/.gitignore rename to wallet/01_wallet_rpc/xmr/.gitignore diff --git a/01_wallet_rpc/xmr/.project b/wallet/01_wallet_rpc/xmr/.project similarity index 100% rename from 01_wallet_rpc/xmr/.project rename to wallet/01_wallet_rpc/xmr/.project diff --git a/01_wallet_rpc/xmr/.settings/org.eclipse.core.resources.prefs b/wallet/01_wallet_rpc/xmr/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from 01_wallet_rpc/xmr/.settings/org.eclipse.core.resources.prefs rename to wallet/01_wallet_rpc/xmr/.settings/org.eclipse.core.resources.prefs diff --git a/01_wallet_rpc/xmr/.settings/org.eclipse.jdt.core.prefs b/wallet/01_wallet_rpc/xmr/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 01_wallet_rpc/xmr/.settings/org.eclipse.jdt.core.prefs rename to wallet/01_wallet_rpc/xmr/.settings/org.eclipse.jdt.core.prefs diff --git a/wallet/01_wallet_rpc/xmr/.settings/org.eclipse.m2e.core.prefs b/wallet/01_wallet_rpc/xmr/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/01_wallet_rpc/xmr/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/01_wallet_rpc/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar b/wallet/01_wallet_rpc/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar similarity index 100% rename from 01_wallet_rpc/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar rename to wallet/01_wallet_rpc/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar diff --git a/01_wallet_rpc/xmr/lib/litecoinj-core-0.15.20190219.jar b/wallet/01_wallet_rpc/xmr/lib/litecoinj-core-0.15.20190219.jar similarity index 100% rename from 01_wallet_rpc/xmr/lib/litecoinj-core-0.15.20190219.jar rename to wallet/01_wallet_rpc/xmr/lib/litecoinj-core-0.15.20190219.jar diff --git a/01_wallet_rpc/xmr/pom.xml b/wallet/01_wallet_rpc/xmr/pom.xml similarity index 100% rename from 01_wallet_rpc/xmr/pom.xml rename to wallet/01_wallet_rpc/xmr/pom.xml diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java diff --git a/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java similarity index 100% rename from 01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java rename to wallet/01_wallet_rpc/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java diff --git a/01_wallet_rpc/xmr/src/main/resources/application.properties b/wallet/01_wallet_rpc/xmr/src/main/resources/application.properties similarity index 100% rename from 01_wallet_rpc/xmr/src/main/resources/application.properties rename to wallet/01_wallet_rpc/xmr/src/main/resources/application.properties diff --git a/01_wallet_rpc/xmr/src/test/java/SimpleTest.java b/wallet/01_wallet_rpc/xmr/src/test/java/SimpleTest.java similarity index 100% rename from 01_wallet_rpc/xmr/src/test/java/SimpleTest.java rename to wallet/01_wallet_rpc/xmr/src/test/java/SimpleTest.java diff --git a/wallet/act/.classpath b/wallet/act/.classpath new file mode 100644 index 00000000..a97cb0eb --- /dev/null +++ b/wallet/act/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/act/.gitignore b/wallet/act/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/act/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/act/.project b/wallet/act/.project new file mode 100644 index 00000000..20b845a4 --- /dev/null +++ b/wallet/act/.project @@ -0,0 +1,34 @@ + + + act + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866778 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/00_framework/core/.settings/org.eclipse.core.resources.prefs b/wallet/act/.settings/org.eclipse.core.resources.prefs similarity index 81% rename from 00_framework/core/.settings/org.eclipse.core.resources.prefs rename to wallet/act/.settings/org.eclipse.core.resources.prefs index 29abf999..839d647e 100644 --- a/00_framework/core/.settings/org.eclipse.core.resources.prefs +++ b/wallet/act/.settings/org.eclipse.core.resources.prefs @@ -2,5 +2,4 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/resources=UTF-8 encoding//src/test/java=UTF-8 -encoding//src/test/resources=UTF-8 encoding/=UTF-8 diff --git a/wallet/act/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/act/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/act/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/act/.settings/org.eclipse.jdt.core.prefs b/wallet/act/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/act/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/act/.settings/org.eclipse.m2e.core.prefs b/wallet/act/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/act/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/00_framework/chat/.project b/wallet/act/bin/.project similarity index 96% rename from 00_framework/chat/.project rename to wallet/act/bin/.project index 5e0f7fa5..c4b3b61e 100644 --- a/00_framework/chat/.project +++ b/wallet/act/bin/.project @@ -1,6 +1,6 @@ - chat + act diff --git a/00_framework/exchange-core/.settings/org.eclipse.core.resources.prefs b/wallet/act/bin/.settings/org.eclipse.core.resources.prefs similarity index 76% rename from 00_framework/exchange-core/.settings/org.eclipse.core.resources.prefs rename to wallet/act/bin/.settings/org.eclipse.core.resources.prefs index f9fe3459..839d647e 100644 --- a/00_framework/exchange-core/.settings/org.eclipse.core.resources.prefs +++ b/wallet/act/bin/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 encoding//src/test/java=UTF-8 encoding/=UTF-8 diff --git a/00_framework/otc-core/.settings/org.eclipse.jdt.core.prefs b/wallet/act/bin/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 00_framework/otc-core/.settings/org.eclipse.jdt.core.prefs rename to wallet/act/bin/.settings/org.eclipse.jdt.core.prefs diff --git a/wallet/act/bin/pom.xml b/wallet/act/bin/pom.xml new file mode 100644 index 00000000..e3988d72 --- /dev/null +++ b/wallet/act/bin/pom.xml @@ -0,0 +1,106 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + + com.bizzan.bc.wallet + act + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + com.bizzan.bc.wallet + rpc-common + 1.0 + + + io.reactivex + rxjava + 1.3.4 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + org.projectlombok + lombok + + + commons-codec + commons-codec + + + com.mashape.unirest + unirest-java + 1.4.9 + + + com.bizzan.bc.wallet + rpc-common + 1.2 + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class new file mode 100644 index 00000000..c11d9792 Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/ActApplication.class differ diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class new file mode 100644 index 00000000..f0a37274 Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActClient.class differ diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class new file mode 100644 index 00000000..41c25bae Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/ActWatcher.class differ diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class new file mode 100644 index 00000000..854be41b Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/component/JsonrpcClient.class differ diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class new file mode 100644 index 00000000..d0ec862b Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/config/JsonrpcConfig.class differ diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class new file mode 100644 index 00000000..e03efc89 Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/controller/WalletController.class differ diff --git a/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class new file mode 100644 index 00000000..c0e7a53c Binary files /dev/null and b/wallet/act/bin/src/main/java/com/ztuo/bc/wallet/entity/ActTransaction.class differ diff --git a/wallet/act/bin/src/main/resources/application.properties b/wallet/act/bin/src/main/resources/application.properties new file mode 100644 index 00000000..7fe8a2f8 --- /dev/null +++ b/wallet/act/bin/src/main/resources/application.properties @@ -0,0 +1,24 @@ +server.port=7001 +spring.application.name=service-rpc-act +#kafka +# 指定kafka 代理地址,可以多个 +spring.kafka.bootstrap-servers=127.0.0.1:9092 +# 指定默认消费者group id +spring.kafka.consumer.group-id=default-group +# 指定默认topic id +spring.kafka.template.default-topic= test +# 指定listener 容器中的线程数,用于提高并发量 +spring.kafka.listener.concurrency= 3 +# 每次批量发送消息的数量 +spring.kafka.producer.batch-size= 1000 +# mongodb +spring.data.mongodb.uri=mongodb://root:root2018@127.0.0.1:27010/wallet + +eureka.client.serviceUrl.defaultZone=http://127.0.0.1:7000/eureka/ +# 注册时使用ip而不是主机名 +eureka.instance.prefer-ip-address=true + +coin.name=ACT +coin.unit=ACT +coin.rpc=http://act:123456@127.0.0.1:8900/rpc +coin.master-address=ACT5i65XW1yRasdeLMD2rFJffRmndn91bho6 \ No newline at end of file diff --git a/wallet/act/bin/src/test/java/ActClientTest.class b/wallet/act/bin/src/test/java/ActClientTest.class new file mode 100644 index 00000000..3cb91413 Binary files /dev/null and b/wallet/act/bin/src/test/java/ActClientTest.class differ diff --git a/wallet/act/bin/target/classes/META-INF/MANIFEST.MF b/wallet/act/bin/target/classes/META-INF/MANIFEST.MF new file mode 100644 index 00000000..77c067d0 --- /dev/null +++ b/wallet/act/bin/target/classes/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Implementation-Title: act +Implementation-Version: 1.2 +Built-By: shaox +Implementation-Vendor-Id: com.bizzan.bc.wallet +Build-Jdk: 1.8.0_181 +Implementation-URL: http://projects.spring.io/spring-boot/wallet-rpc/a + ct/ +Created-By: Maven Integration for Eclipse +Implementation-Vendor: Pivotal Software, Inc. + diff --git a/wallet/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties b/wallet/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties new file mode 100644 index 00000000..de6399b6 --- /dev/null +++ b/wallet/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Thu Jun 06 19:27:59 CST 2019 +version=1.2 +groupId=com.bizzan.bc.wallet +m2e.projectName=act +m2e.projectLocation=E\:\\10_Exchange\\src_wallet\\Exchange_wallet\\act +artifactId=act diff --git a/wallet/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml b/wallet/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml new file mode 100644 index 00000000..e3988d72 --- /dev/null +++ b/wallet/act/bin/target/classes/META-INF/maven/com.ztuo.bc.wallet/act/pom.xml @@ -0,0 +1,106 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + + com.bizzan.bc.wallet + act + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + com.bizzan.bc.wallet + rpc-common + 1.0 + + + io.reactivex + rxjava + 1.3.4 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + org.projectlombok + lombok + + + commons-codec + commons-codec + + + com.mashape.unirest + unirest-java + 1.4.9 + + + com.bizzan.bc.wallet + rpc-common + 1.2 + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/wallet/act/bin/target/classes/application.properties b/wallet/act/bin/target/classes/application.properties new file mode 100644 index 00000000..7fe8a2f8 --- /dev/null +++ b/wallet/act/bin/target/classes/application.properties @@ -0,0 +1,24 @@ +server.port=7001 +spring.application.name=service-rpc-act +#kafka +# 指定kafka 代理地址,可以多个 +spring.kafka.bootstrap-servers=127.0.0.1:9092 +# 指定默认消费者group id +spring.kafka.consumer.group-id=default-group +# 指定默认topic id +spring.kafka.template.default-topic= test +# 指定listener 容器中的线程数,用于提高并发量 +spring.kafka.listener.concurrency= 3 +# 每次批量发送消息的数量 +spring.kafka.producer.batch-size= 1000 +# mongodb +spring.data.mongodb.uri=mongodb://root:root2018@127.0.0.1:27010/wallet + +eureka.client.serviceUrl.defaultZone=http://127.0.0.1:7000/eureka/ +# 注册时使用ip而不是主机名 +eureka.instance.prefer-ip-address=true + +coin.name=ACT +coin.unit=ACT +coin.rpc=http://act:123456@127.0.0.1:8900/rpc +coin.master-address=ACT5i65XW1yRasdeLMD2rFJffRmndn91bho6 \ No newline at end of file diff --git a/wallet/act/lib/bitcoin-rpc-1.2.0.jar b/wallet/act/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/act/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/act/pom.xml b/wallet/act/pom.xml new file mode 100644 index 00000000..e3988d72 --- /dev/null +++ b/wallet/act/pom.xml @@ -0,0 +1,106 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + + com.bizzan.bc.wallet + act + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + com.bizzan.bc.wallet + rpc-common + 1.0 + + + io.reactivex + rxjava + 1.3.4 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + org.projectlombok + lombok + + + commons-codec + commons-codec + + + com.mashape.unirest + unirest-java + 1.4.9 + + + com.bizzan.bc.wallet + rpc-common + 1.2 + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java new file mode 100644 index 00000000..b40217a5 --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/ActApplication.java @@ -0,0 +1,14 @@ +package com.bizzan.bc.wallet; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class ActApplication { + public static void main(String[] args){ + SpringApplication.run(ActApplication.class,args); + } +} diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java new file mode 100644 index 00000000..cd637b90 --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/component/ActClient.java @@ -0,0 +1,56 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.ActTransaction; +import com.mashape.unirest.http.exceptions.UnirestException; + +import java.math.BigDecimal; +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +public class ActClient extends JsonrpcClient{ + + public ActClient(String url) throws URISyntaxException, MalformedURLException { + super(url); + } + + public Long getBlockCount() throws UnirestException { + Object result = this.invoke("blockchain_get_block_count"); + return Long.parseLong(result.toString()); + } + + public JSONObject getBlock(Long height) throws UnirestException { + Object result = this.invoke("blockchain_get_block",height); + return JSON.parseObject(result.toString()); + } + + public ActTransaction getTransaction(String txid) throws UnirestException { + Object result = this.invoke("blockchain_get_transaction",txid); + JSONArray array = JSON.parseArray(result.toString()); + + JSONObject body = array.getJSONObject(1); + if(body.getJSONObject("trx").getJSONObject("alp_inport_asset").getInteger("asset_id")==0){ + JSONArray ops = body.getJSONObject("trx").getJSONArray("operations"); + if(ops.getJSONObject(0).getString("type").equalsIgnoreCase("withdraw_op_type") + || ops.getJSONObject(0).getString("type").equalsIgnoreCase("deposit_op_type")) { + JSONObject prettyTx = JSON.parseObject(invoke("blockchain_get_pretty_transaction",txid).toString()); + ActTransaction transaction = new ActTransaction(); + transaction.setTxid(txid); + transaction.setFrom(prettyTx.getString("from_account")); + transaction.setTo(prettyTx.getString("to_account")); + transaction.setType(0); + transaction.setAmount(new BigDecimal(prettyTx.getBigInteger("amount")).divide(new BigDecimal(100000),8,BigDecimal.ROUND_DOWN)); + return transaction; + } + } + return null; + } + + public BigDecimal getAddressBalance(String address) throws UnirestException { + Object result = this.invoke("blockchain_list_address_balances",address); + System.out.println(result.toString()); + return BigDecimal.ZERO; + } +} diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java new file mode 100644 index 00000000..585ef6e4 --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/component/ActWatcher.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Deposit; +import com.mashape.unirest.http.exceptions.UnirestException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + + +@Component +public class ActWatcher extends Watcher{ + private Logger logger = LoggerFactory.getLogger(ActWatcher.class); + @Autowired + private ActClient actClient; + + @Override + public List replayBlock(Long startBlockNumber,Long endBlockNumber) { + List deposits = new ArrayList<>(); + for(Long index=startBlockNumber;index<=endBlockNumber;index++){ + try { + JSONObject block = actClient.getBlock(index); + JSONArray txs = block.getJSONArray("user_transaction_ids"); + txs.forEach(txid->{ + System.out.println(txid); + }); + } catch (UnirestException e) { + e.printStackTrace(); + } + } + return deposits; + } + + @Override + public Long getNetworkBlockHeight() { + try { + return actClient.getBlockCount(); + } catch (UnirestException e) { + e.printStackTrace(); + } + return 0L; + } +} diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java new file mode 100644 index 00000000..4dbe1f0b --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/component/JsonrpcClient.java @@ -0,0 +1,59 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.mashape.unirest.http.HttpResponse; +import com.mashape.unirest.http.Unirest; +import com.mashape.unirest.http.exceptions.UnirestException; +import com.mashape.unirest.http.utils.Base64Coder; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +@Data +@Slf4j +public class JsonrpcClient { + private String url; + private Map headers = new HashMap<>(); + + public JsonrpcClient(String url) throws URISyntaxException, MalformedURLException { + this(new URL(url)); + } + + public JsonrpcClient(URL rpc) throws URISyntaxException, MalformedURLException { + this.url = new URI(rpc.getProtocol(), null, rpc.getHost(), rpc.getPort(), rpc.getPath(), rpc.getQuery(), null).toString(); + if(StringUtils.isNotEmpty(rpc.getUserInfo())){ + headers.put("Authorization", "Basic " + Base64Coder.encodeString(rpc.getUserInfo())); + } + } + + public Object invoke(String method, Object ... args) throws UnirestException { + JSONObject request = new JSONObject(); + request.put("id","1"); + request.put("jsonrpc","2.0"); + request.put("method",method); + JSONArray params = new JSONArray(); + for(int i=0;i result = Unirest.post(url) + .headers(headers) + .body(request.toJSONString()) + .asString(); + log.info(result.getBody()); + if(result.getStatus() != 200){ + throw new RuntimeException("访问RPC服务失败"); + } + String raw = result.getBody(); + return JSON.parseObject(raw).get("result"); + } +} diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java new file mode 100644 index 00000000..8b19aade --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/config/JsonrpcConfig.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.component.ActClient; + +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +@Configuration +public class JsonrpcConfig { + + @Bean + public ActClient setActClient(@Value("${coin.rpc}") String url) throws MalformedURLException, URISyntaxException { + System.out.println("coin.rpc="+url); + ActClient client = new ActClient(url); + return client; + } +} diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..b5fc1cf6 --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,51 @@ +package com.bizzan.bc.wallet.controller; + +import com.bizzan.bc.wallet.component.ActClient; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + @Autowired + private ActClient rpcClient; + private Logger logger = LoggerFactory.getLogger(WalletController.class); + @Value("${coin.master-address:}") + private String masterAddress; + + @GetMapping("height") + public MessageResult getHeight(){ + try { + Long height =rpcClient.getBlockCount(); + MessageResult result = new MessageResult(0,"success"); + result.setData(height - 1); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"查询失败,error:"+e.getMessage()); + } + } + + + @RequestMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address :"+account); + String subaddress=UUID.randomUUID().toString().replace("-",""); + String address = masterAddress + subaddress; + MessageResult result = new MessageResult(0,"success"); + result.setData(address); + return result; + } + +} diff --git a/wallet/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java b/wallet/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java new file mode 100644 index 00000000..f7bac070 --- /dev/null +++ b/wallet/act/src/main/java/com/bizzan/bc/wallet/entity/ActTransaction.java @@ -0,0 +1,14 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ActTransaction { + private String txid; + private String from; + private String to; + private BigDecimal amount; + private int type; +} diff --git a/wallet/act/src/main/resources/application.properties b/wallet/act/src/main/resources/application.properties new file mode 100644 index 00000000..7fe8a2f8 --- /dev/null +++ b/wallet/act/src/main/resources/application.properties @@ -0,0 +1,24 @@ +server.port=7001 +spring.application.name=service-rpc-act +#kafka +# 指定kafka 代理地址,可以多个 +spring.kafka.bootstrap-servers=127.0.0.1:9092 +# 指定默认消费者group id +spring.kafka.consumer.group-id=default-group +# 指定默认topic id +spring.kafka.template.default-topic= test +# 指定listener 容器中的线程数,用于提高并发量 +spring.kafka.listener.concurrency= 3 +# 每次批量发送消息的数量 +spring.kafka.producer.batch-size= 1000 +# mongodb +spring.data.mongodb.uri=mongodb://root:root2018@127.0.0.1:27010/wallet + +eureka.client.serviceUrl.defaultZone=http://127.0.0.1:7000/eureka/ +# 注册时使用ip而不是主机名 +eureka.instance.prefer-ip-address=true + +coin.name=ACT +coin.unit=ACT +coin.rpc=http://act:123456@127.0.0.1:8900/rpc +coin.master-address=ACT5i65XW1yRasdeLMD2rFJffRmndn91bho6 \ No newline at end of file diff --git a/wallet/act/src/test/java/ActClientTest.java b/wallet/act/src/test/java/ActClientTest.java new file mode 100644 index 00000000..d92db97e --- /dev/null +++ b/wallet/act/src/test/java/ActClientTest.java @@ -0,0 +1,14 @@ +import com.bizzan.bc.wallet.component.ActClient; +import com.mashape.unirest.http.exceptions.UnirestException; + +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +public class ActClientTest { + + public static void main(String[] args) throws MalformedURLException, URISyntaxException, UnirestException { + ActClient client = new ActClient("http://act:123456@47.74.42.87:8900/rpc"); + //System.out.println(client.getBlock(2000L)); + System.out.println(client.getAddressBalance("ACTKBscoFpQzHCxgtpYUhqo97mDAdEVmBqEp")); + } +} diff --git a/wallet/bch/.classpath b/wallet/bch/.classpath new file mode 100644 index 00000000..6330fa28 --- /dev/null +++ b/wallet/bch/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/bch/.gitignore b/wallet/bch/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/bch/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/bch/.project b/wallet/bch/.project new file mode 100644 index 00000000..050de277 --- /dev/null +++ b/wallet/bch/.project @@ -0,0 +1,34 @@ + + + bch + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866780 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/bch/.settings/org.eclipse.core.resources.prefs b/wallet/bch/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/bch/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/bch/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/bch/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/bch/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/bch/.settings/org.eclipse.jdt.core.prefs b/wallet/bch/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..4de74584 --- /dev/null +++ b/wallet/bch/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,27 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/bch/.settings/org.eclipse.m2e.core.prefs b/wallet/bch/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/bch/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/bch/lib/bitcoin-rpc-1.2.0.jar b/wallet/bch/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/bch/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/bch/pom.xml b/wallet/bch/pom.xml new file mode 100644 index 00000000..a59f57aa --- /dev/null +++ b/wallet/bch/pom.xml @@ -0,0 +1,97 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + bch + ${project-version} + + + + cash.bitcoinj + bitcoinj-core + 0.14.5.2 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.alibaba + fastjson + + + + ${project.artifactId}-${version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..950be612 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,189 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.WatcherLogService; +import com.bizzan.bc.wallet.util.HttpClientUtil; + +import lombok.Data; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +@Component +public class Watcher extends Thread{ + + @Value("${bizzan.blockApi}") + private String blockApi; + + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + private int confirmation = 3; + private Long currentBlockHeight = 0L; + private int step = 5; + private Long checkInterval = 2000L; + + @Autowired + private AccountService accountService; + + public void check(){ + try { + Thread.sleep(20000); // 避免连续访问btc.com + Long networkBlockNumber = getNetwortBlockHeight() - confirmation + 1; + Thread.sleep(20000); // 避免连续访问btc.com + if(currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + logger.info("replay block from {} to {}", startBlockNumber, networkBlockNumber); + List deposits = this.replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + }else { + logger.info("already latest height {},nothing to do!", currentBlockHeight); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + private List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + try { + for (Long blockHeight = startBlockNumber; blockHeight <= endBlockNumber; blockHeight++) { + // 获取区块信息(交易数量) + int txCount = 0; + String retBlockStr = HttpClientUtil.doHttpsGet(blockApi + "block/" + blockHeight, null, null); + if(!StringUtils.isEmpty(retBlockStr)){ + JSONObject obj = JSON.parseObject(retBlockStr); + if(obj.getIntValue("err_no") == 0) { + txCount = obj.getJSONObject("data").getIntValue("tx_count"); + } + } + // 根据交易数量分页查询 + int pageCount = txCount / 50; + pageCount = (txCount % 50 > 0) ? pageCount + 1 : pageCount; // 总数对50取余,如果不是整除则+1页 + for(int pageNo = 1; pageNo < pageCount + 1; pageNo++) { + Thread.sleep(10000);//防止调用(bch.btc.com)频繁报错 + logger.info("获取区块(" + blockHeight + ")交易列表,总交易数:" + txCount + ", 正在获取第 [" + pageNo + "] 页"); + Map param = new HashMap(); + param.put("pagesize", String.valueOf(50)); + param.put("page", String.valueOf(pageNo)); + String retStr = HttpClientUtil.doHttpsGet(blockApi + "block/" + blockHeight + "/tx", param, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject obj = JSON.parseObject(retStr); + if(obj.getIntValue("err_no") == 0) { + JSONArray txList = obj.getJSONObject("data").getJSONArray("list"); + for(int i = 0; i < txList.size(); i++) { + JSONObject tx = txList.getJSONObject(i); + JSONArray outs = tx.getJSONArray("outputs"); + for(int j = 0; j < outs.size(); j++) { + JSONArray addresses = outs.getJSONObject(j).getJSONArray("addresses"); + if(addresses.size() > 0) { + String address = addresses.getString(0); // 获取outputs地址 + BigDecimal amount = outs.getJSONObject(j).getBigDecimal("value"); + if(amount.compareTo(BigDecimal.ZERO) > 0) { + amount = amount.divide(BigDecimal.valueOf(100000000)); // 注意是100000000 + } + if (accountService.isAddressExist(address)) { + logger.info("发现充值地址:" + blockHeight + "-" + tx.getString("hash") + ": 输出地址(" + address + ")"); + Deposit deposit = new Deposit(); + deposit.setTxid(tx.getString("hash")); + deposit.setBlockHeight(blockHeight); + deposit.setBlockHash(tx.getString("block_hash")); + deposit.setAmount(amount); + deposit.setAddress(address); + deposit.setTime(new Date(tx.getLongValue("create_at") * 1000)); + deposits.add(deposit); + } + } + } + } + } + }else { + logger.info("获取区块(" + blockHeight + ")交易列表失败"); + break; + } + } + + Thread.sleep(10000); // 块与块之间也暂停10秒 + } + } + catch (Exception e){ + e.printStackTrace(); + return null; + } + return deposits; + } + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check transactions..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 30000)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } + + public Long getNetwortBlockHeight() { + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "block/latest", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + if(json.getIntValue("err_no") == 0) { + Long height = json.getJSONObject("data").getLong("height"); + return height; + } + } + return 0L; + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..4ec45d9d --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,148 @@ +package com.bizzan.bc.wallet.controller; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; + +import org.bitcoinj.core.Address; +import org.bitcoinj.core.ECKey; +import org.bitcoinj.core.NetworkParameters; +import org.bitcoinj.params.MainNetParams; +import org.bitcoinj.wallet.UnreadableWalletException; +import org.bitcoinj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + + @Value("${bizzan.wallet}") + private String walletPath; + + @Value("${bizzan.blockApi}") + private String blockApi; + + @Autowired + private AccountService accountService; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address: "+account); + + NetworkParameters params = MainNetParams.get(); + + final File walletFile = new File(walletPath); + + Wallet wallet = null; + try { + wallet = Wallet.loadFromFile(walletFile); + } catch (UnreadableWalletException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + + ECKey key = new ECKey(); + + Address address = key.toAddress(params); + + wallet.importKey(key); + + try { + wallet.saveToFile(walletFile); + accountService.saveOne(account, address.toBase58()); + MessageResult result = new MessageResult(0,"success"); + result.setData(address.toBase58()); + + return result; + } catch (IOException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + } + + /** + * 钱包总余额(非节点服务,直接返回0,后面如果有空闲可以追加获取总体余额) + * @return + */ + @GetMapping("balance") + public MessageResult balance(){ + MessageResult result = new MessageResult(0,"success"); + result.setData(0); + return result; + } + + /** + * 获取地址余额 + * @param address + * @return + */ + @GetMapping("balance/{address}") + public MessageResult balance(@PathVariable String address){ + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "address/" + address, null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + if(json.getIntValue("err_no") == 0) { + BigDecimal balance = json.getJSONObject("data").getBigDecimal("balance"); + if(balance.compareTo(BigDecimal.ZERO) > 0) { + balance = balance.divide(BigDecimal.valueOf(1000000)); + } + MessageResult result = new MessageResult(0,"success"); + result.setData(balance); + return result; + } + } + return MessageResult.error(500,"获取余额失败"); + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("height") + public MessageResult getHeight(){ + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "block/latest", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + if(json.getIntValue("err_no") == 0) { + Long height = json.getJSONObject("data").getLong("height"); + MessageResult result = new MessageResult(0,"success"); + result.setData(height); + return result; + } + } + return MessageResult.error(500,"获取高度失败"); + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"查询失败,error:"+e.getMessage()); + } + } + + /** + * TODO 增加转账功能 + * @param address + * @param amount + * @param fee + * @return + */ + @GetMapping({"transfer","withdraw"}) + public MessageResult withdraw(String address, BigDecimal amount,BigDecimal fee){ + return MessageResult.error(500, "暂未实现该功能"); + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..7a76629b --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,19 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..b8183b09 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; + private Long userId = 0L; +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..a0233bde --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 20000L; // 间隔时间 + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..ae776eb6 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,67 @@ +package com.bizzan.bc.wallet.event; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("lasted")) { + watcher.setCurrentBlockHeight(watcher.getNetwortBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数(时间差) + watcher.setConfirmation(watcherSetting.getConfirmation()); + + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..12833b81 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}", deposit.getTxid(), deposit.getAddress(), deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..81abd473 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } + + public void updateTime(String coinName, Date endTime) { + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight", 0); + update.set("lastSyncTime", endTime); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(0L); + watcherLog.setLastSyncTime(endTime); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java new file mode 100644 index 00000000..d046675b --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java @@ -0,0 +1,312 @@ +package com.bizzan.bc.wallet.util; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpClientUtil { + + private static String charSet = "UTF-8"; + private static CloseableHttpClient httpClient = null; + private static CloseableHttpResponse response = null; + + /** + * https的post请求 + * @param url + * @param jsonstr + * @param charset + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity se = new StringEntity(jsonStr); + se.setContentType("text/json"); + se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(se); + + response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + try { + //请求发起客户端 + httpClient = SSLClient.createSSLClientDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + //jsonObject = JSONObject.fromObject(content); + return content; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException{ + try { + //请求发起客户端 + httpClient = HttpClients.createDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + return content; + }else { + return null; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + } + + /** + * http的post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException { + try { + httpClient = HttpClients.createDefault(); + + // 创建httpPost + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity entity = new StringEntity(jsonStr, charSet); + entity.setContentType("text/json"); + entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(entity); + //发送post请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + + /** + * http的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException { + CloseableHttpClient httpclient = null; + CloseableHttpResponse response = null; + + try { + httpclient = HttpClients.createDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + //发送gey请求 + HttpGet httpGet = new HttpGet(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpclient.execute(httpGet); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return EntityUtils.toString(response.getEntity()); + } + }finally{ + if(httpclient != null){ + httpclient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * https的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + HttpGet httpGet = new HttpGet(url); + RequestConfig rconfig = RequestConfig.custom() + .setConnectionRequestTimeout(2000) + .setSocketTimeout(4000) + .setConnectTimeout(3000) + .build(); + httpGet.setConfig(rconfig); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpClient.execute(httpGet); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java new file mode 100644 index 00000000..42736ce7 --- /dev/null +++ b/wallet/bch/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java @@ -0,0 +1,29 @@ +package com.bizzan.bc.wallet.util; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; + +public class SSLClient { + public static CloseableHttpClient createSSLClientDefault() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + +} \ No newline at end of file diff --git a/wallet/bch/src/main/resources/application.properties b/wallet/bch/src/main/resources/application.properties new file mode 100644 index 00000000..30e8a769 --- /dev/null +++ b/wallet/bch/src/main/resources/application.properties @@ -0,0 +1,31 @@ +server.port=7006 +spring.application.name=service-rpc-bch +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdsafdsafdsa@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true +bizzan.wallet=/data/bch/bch.wallet +bizzan.blockApi=https://bch-chain.api.btc.com/v3/ + +coin.rpc= +coin.name=BitcoinCash +coin.unit=BCH + +watcher.init-block-height=600000 +watcher.step=5 +watcher.confirmation=3 +watcher.interval=20000 diff --git a/wallet/bch/src/test/java/SimpleTest.java b/wallet/bch/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/bch/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +} diff --git a/wallet/bitcoin/.classpath b/wallet/bitcoin/.classpath new file mode 100644 index 00000000..7cb83c4b --- /dev/null +++ b/wallet/bitcoin/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/bitcoin/.gitignore b/wallet/bitcoin/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/bitcoin/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/bitcoin/.project b/wallet/bitcoin/.project new file mode 100644 index 00000000..eb5c2d63 --- /dev/null +++ b/wallet/bitcoin/.project @@ -0,0 +1,34 @@ + + + bitcoin + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866781 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/bitcoin/.settings/org.eclipse.core.resources.prefs b/wallet/bitcoin/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/bitcoin/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/bitcoin/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/bitcoin/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/bitcoin/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/bitcoin/.settings/org.eclipse.jdt.core.prefs b/wallet/bitcoin/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..a31a7df6 --- /dev/null +++ b/wallet/bitcoin/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/wallet/bitcoin/.settings/org.eclipse.m2e.core.prefs b/wallet/bitcoin/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/bitcoin/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/bitcoin/lib/bitcoin-rpc-1.2.0.jar b/wallet/bitcoin/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/bitcoin/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/bitcoin/pom.xml b/wallet/bitcoin/pom.xml new file mode 100644 index 00000000..2491f2ce --- /dev/null +++ b/wallet/bitcoin/pom.xml @@ -0,0 +1,85 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + bitcoin + ${project-version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + com.bizzan.bc.wallet + rpc-common + 1.2 + + + com.spark.bc + bitcoin-rpc + system + ${project.basedir}/lib/bitcoin-rpc-1.2.0.jar + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java new file mode 100644 index 00000000..20ef5b9f --- /dev/null +++ b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/component/BitcoinWatcher.java @@ -0,0 +1,83 @@ +package com.bizzan.bc.wallet.component; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.AccountService; +import com.spark.blockchain.rpcclient.Bitcoin; +import com.spark.blockchain.rpcclient.BitcoinRPCClient; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@Component +public class BitcoinWatcher extends Watcher{ + @Autowired + private BitcoinRPCClient rpcClient; + @Autowired + private AccountService accountService; + private Logger logger = LoggerFactory.getLogger(Watcher.class); + @Override + public List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + try { + for (Long blockHeight = startBlockNumber; blockHeight <= endBlockNumber; blockHeight++) { + String blockHash = rpcClient.getBlockHash(blockHeight.intValue()); + //获取区块 + Bitcoin.Block block = rpcClient.getBlock(blockHash); + List txids = block.tx(); + logger.info("获取区块(" + blockHeight + ")交易列表,总交易数:" + txids.size() + ""); + //遍历区块中的交易 + for(String txid:txids){ + Bitcoin.RawTransaction transaction = rpcClient.getRawTransaction(txid); + List outs = transaction.vOut(); + if(outs != null) { + for (Bitcoin.RawTransaction.Out out : outs) { + if (out.scriptPubKey() != null) { + List addresses = out.scriptPubKey().addresses(); + if(addresses != null && addresses.size() > 0) { + String address = out.scriptPubKey().addresses().get(0); + BigDecimal amount = new BigDecimal(out.value()); + if (accountService.isAddressExist(address)) { + logger.info("发现充值地址(" + address + "),充值金额:" + amount + " BTC"); + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.txId()); + deposit.setBlockHeight((long) block.height()); + deposit.setBlockHash(transaction.blockHash()); + deposit.setAmount(amount); + deposit.setAddress(address); + deposit.setTime(transaction.time()); + deposits.add(deposit); + } + } + } + } + } + } + } + } + catch (Exception e){ + e.printStackTrace(); + return null; + } + return deposits; + } + + + + @Override + public Long getNetworkBlockHeight() { + try { + return Long.valueOf(rpcClient.getBlockCount()); + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java new file mode 100644 index 00000000..26e299f6 --- /dev/null +++ b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java @@ -0,0 +1,38 @@ +package com.bizzan.bc.wallet.config; + +import com.spark.blockchain.rpcclient.BitcoinException; +import com.spark.blockchain.rpcclient.BitcoinRPCClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.net.MalformedURLException; + +/** + * 初始化RPC客户端 + */ +@Configuration +public class RpcClientConfig { + private Logger logger = LoggerFactory.getLogger(RpcClientConfig.class); + + @Bean + public BitcoinRPCClient setClient(@Value("${coin.rpc}") String uri){ + try { + logger.info("uri={}",uri); + BitcoinRPCClient client = new BitcoinRPCClient(uri); + int blockCount = client.getBlockCount(); + logger.info("blockHeight={}",blockCount); + return client; + } catch (MalformedURLException e) { + logger.info("init wallet failed"); + e.printStackTrace(); + return null; + } catch (BitcoinException e) { + logger.info("BitcoinException"); + e.printStackTrace(); + return null; + } + } +} diff --git a/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..a120d46b --- /dev/null +++ b/wallet/bitcoin/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,103 @@ +package com.bizzan.bc.wallet.controller; + +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.MessageResult; +import com.spark.blockchain.rpcclient.BitcoinException; +import com.spark.blockchain.rpcclient.BitcoinRPCClient; +import com.spark.blockchain.rpcclient.BitcoinUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + @Autowired + private BitcoinRPCClient rpcClient; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); + @Autowired + private AccountService accountService; + + @GetMapping("height") + public MessageResult getHeight(){ + try { + int height =rpcClient.getBlockCount(); + MessageResult result = new MessageResult(0,"success"); + result.setData(height - 1); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"查询失败,error:"+e.getMessage()); + } + } + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address :"+account); + try { + String address = rpcClient.getNewAddress(account); + accountService.saveOne(account,address); + MessageResult result = new MessageResult(0,"success"); + result.setData(address); + return result; + } + catch (BitcoinException e){ + e.printStackTrace(); + return MessageResult.error(500,"rpc error:"+e.getMessage()); + } + } + + @GetMapping({"transfer","withdraw"}) + public MessageResult withdraw(String address, BigDecimal amount,BigDecimal fee){ + logger.info("withdraw:address={},amount={},fee={}",address,amount,fee); + if(amount.compareTo(BigDecimal.ZERO) <= 0){ + return MessageResult.error(500,"额度须大于0"); + } + try { + String txid = BitcoinUtil.sendTransaction(rpcClient,address,amount,fee); + MessageResult result = new MessageResult(0,"success"); + result.setData(txid); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("balance") + public MessageResult balance(){ + try { + BigDecimal balance = new BigDecimal(rpcClient.getBalance()); + + MessageResult result = new MessageResult(0,"success"); + result.setData(balance); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("balance/{address}") + public MessageResult balance(@PathVariable String address){ + try { + String account = rpcClient.getAccount(address); + System.out.println("account="+account+",address="+address); + BigDecimal balance = new BigDecimal(rpcClient.getBalance(account)); + MessageResult result = new MessageResult(0,"success"); + result.setData(balance); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } +} diff --git a/wallet/bitcoin/src/main/resources/application.properties b/wallet/bitcoin/src/main/resources/application.properties new file mode 100644 index 00000000..8de1f33c --- /dev/null +++ b/wallet/bitcoin/src/main/resources/application.properties @@ -0,0 +1,24 @@ +server.port=7001 +spring.application.name=service-rpc-btc +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdafdsa3232@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true + +coin.rpc=http://bizzan:8897364ddefs@127.0.0.1:8333/ +coin.name=Bitcoin +coin.unit=BTC diff --git a/wallet/bitcoin/src/test/java/SimpleTest.java b/wallet/bitcoin/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/bitcoin/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +} diff --git a/wallet/bsv/.classpath b/wallet/bsv/.classpath new file mode 100644 index 00000000..6330fa28 --- /dev/null +++ b/wallet/bsv/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/bsv/.gitignore b/wallet/bsv/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/bsv/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/bsv/.project b/wallet/bsv/.project new file mode 100644 index 00000000..100c068b --- /dev/null +++ b/wallet/bsv/.project @@ -0,0 +1,34 @@ + + + bsv + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866784 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/bsv/.settings/org.eclipse.core.resources.prefs b/wallet/bsv/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/bsv/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/bsv/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/bsv/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/bsv/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/bsv/.settings/org.eclipse.jdt.core.prefs b/wallet/bsv/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..4de74584 --- /dev/null +++ b/wallet/bsv/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,27 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/bsv/.settings/org.eclipse.m2e.core.prefs b/wallet/bsv/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/bsv/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/bsv/lib/bitcoin-rpc-1.2.0.jar b/wallet/bsv/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/bsv/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/bsv/pom.xml b/wallet/bsv/pom.xml new file mode 100644 index 00000000..f2c88de5 --- /dev/null +++ b/wallet/bsv/pom.xml @@ -0,0 +1,97 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + bsv + ${project-version} + + + + cash.bitcoinj + bitcoinj-core + 0.14.5.2 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.alibaba + fastjson + + + + ${project.artifactId}-${version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..935f49e3 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,190 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.WatcherLogService; +import com.bizzan.bc.wallet.util.HttpClientUtil; + +import lombok.Data; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +@Component +public class Watcher extends Thread{ + + @Value("${bizzan.blockApi}") + private String blockApi; + + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + private int confirmation = 3; + private Long currentBlockHeight = 0L; + private int step = 5; + private Long checkInterval = 2000L; + + @Autowired + private AccountService accountService; + + public void check(){ + try { + Thread.sleep(20000); // 避免连续访问btc.com + Long networkBlockNumber = getNetwortBlockHeight() - confirmation + 1; + Thread.sleep(20000); // 避免连续访问btc.com + if(currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + logger.info("replay block from {} to {}", startBlockNumber, networkBlockNumber); + List deposits = this.replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + }else { + logger.info("already latest height {},nothing to do!", currentBlockHeight); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + private List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + try { + for (Long blockHeight = startBlockNumber; blockHeight <= endBlockNumber; blockHeight++) { + // 获取区块Hash + + String blockHashStr = HttpClientUtil.doHttpsGet(blockApi + "block-index/" + blockHeight, null, null); + String blockHash = ""; + if(!StringUtils.isEmpty(blockHashStr)){ + JSONObject obj = JSON.parseObject(blockHashStr); + blockHash = obj.getString("blockHash"); + } + logger.info("获取区块高度(" + blockHeight + ")的Hash值: " + blockHash); + // 根据BlockHash获取区块交易列表 + if(!StringUtils.isEmpty(blockHash)) { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "txs/?block=" + blockHeight + "&pageNum=0", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject obj = JSON.parseObject(retStr); + int pageSize = obj.getIntValue("pagesTotal"); + logger.info("该区块有共" + pageSize + "页交易"); + for(int page = 0; page < pageSize; page++) { + JSONArray txList = null; + if(page > 0) { + String txStr = HttpClientUtil.doHttpsGet(blockApi + "txs/?block=" + blockHeight + "&pageNum="+page, null, null); + if(!StringUtils.isEmpty(txStr)){ + txList = JSON.parseObject(txStr).getJSONArray("txs"); + } + }else { + txList = obj.getJSONArray("txs"); + } + // 循环交易列表 + for(int i = 0; i < txList.size(); i++) { + JSONObject tx = txList.getJSONObject(i); // 获取交易本身 + JSONArray outs = tx.getJSONArray("vout"); + for(int j = 0; j < outs.size(); j++) { + JSONObject out = outs.getJSONObject(j); + JSONArray addresses = out.getJSONObject("scriptPubKey").getJSONArray("addresses"); + BigDecimal amount = out.getBigDecimal("value"); + + if(amount.compareTo(BigDecimal.ZERO) > 0 && addresses != null && addresses.size() > 0) { + String address = addresses.getString(0); // 获取地址 + if (accountService.isAddressExist(address)) { + logger.info("发现充值地址:" + blockHeight + "-" + tx.getString("txid") + ": 输出地址(" + address + ")"); + Deposit deposit = new Deposit(); + deposit.setTxid(tx.getString("txid")); + deposit.setBlockHeight(blockHeight); + deposit.setBlockHash(tx.getString("blockhash")); + deposit.setAmount(amount); + deposit.setAddress(address); + deposit.setTime(new Date(tx.getLongValue("blocktime") * 1000)); + deposits.add(deposit); + } + }else { + logger.info("交易(" + tx.getString("txid") + ")内部vout地址为空"); + } + } + } + Thread.sleep(5000); + } + } + } + } + } + catch (Exception e){ + e.printStackTrace(); + return null; + } + return deposits; + } + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check transactions..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 30000)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } + + public Long getNetwortBlockHeight() { + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "status?q=getInfo", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + if(json.getIntValue("err_no") == 0) { + Long height = json.getJSONObject("info").getLong("blocks"); + return height; + } + } + return 0L; + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..bf1b9854 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,148 @@ +package com.bizzan.bc.wallet.controller; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; + +import org.bitcoinj.core.Address; +import org.bitcoinj.core.ECKey; +import org.bitcoinj.core.NetworkParameters; +import org.bitcoinj.params.MainNetParams; +import org.bitcoinj.wallet.UnreadableWalletException; +import org.bitcoinj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + + @Value("${bizzan.wallet}") + private String walletPath; + + @Value("${bizzan.blockApi}") + private String blockApi; + + @Autowired + private AccountService accountService; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address: "+account); + + NetworkParameters params = MainNetParams.get(); + + final File walletFile = new File(walletPath); + + Wallet wallet = null; + try { + wallet = Wallet.loadFromFile(walletFile); + } catch (UnreadableWalletException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + + ECKey key = new ECKey(); + + Address address = key.toAddress(params); + + wallet.importKey(key); + + try { + wallet.saveToFile(walletFile); + accountService.saveOne(account, address.toBase58()); + MessageResult result = new MessageResult(0,"success"); + result.setData(address.toBase58()); + + return result; + } catch (IOException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + } + + /** + * 钱包总余额(非节点服务,直接返回0,后面如果有空闲可以追加获取总体余额) + * @return + */ + @GetMapping("balance") + public MessageResult balance(){ + MessageResult result = new MessageResult(0,"success"); + result.setData(0); + return result; + } + + /** + * 获取地址余额 + * @param address + * @return + */ + @GetMapping("balance/{address}") + public MessageResult balance(@PathVariable String address){ + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "address/" + address, null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + if(json.getIntValue("err_no") == 0) { + BigDecimal balance = json.getJSONObject("data").getBigDecimal("balance"); + if(balance.compareTo(BigDecimal.ZERO) > 0) { + balance = balance.divide(BigDecimal.valueOf(1000000)); + } + MessageResult result = new MessageResult(0,"success"); + result.setData(balance); + return result; + } + } + return MessageResult.error(500,"获取余额失败"); + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("height") + public MessageResult getHeight(){ + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "status?q=getInfo", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + if(json.getIntValue("err_no") == 0) { + Long height = json.getJSONObject("info").getLong("blocks"); + MessageResult result = new MessageResult(0,"success"); + result.setData(height); + return result; + } + } + return MessageResult.error(500,"获取高度失败"); + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"查询失败,error:"+e.getMessage()); + } + } + + /** + * TODO 增加转账功能 + * @param address + * @param amount + * @param fee + * @return + */ + @GetMapping({"transfer","withdraw"}) + public MessageResult withdraw(String address, BigDecimal amount,BigDecimal fee){ + return MessageResult.error(500, "暂未实现该功能"); + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..7a76629b --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,19 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..b8183b09 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; + private Long userId = 0L; +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..a0233bde --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 20000L; // 间隔时间 + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..ae776eb6 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,67 @@ +package com.bizzan.bc.wallet.event; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("lasted")) { + watcher.setCurrentBlockHeight(watcher.getNetwortBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数(时间差) + watcher.setConfirmation(watcherSetting.getConfirmation()); + + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..12833b81 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}", deposit.getTxid(), deposit.getAddress(), deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..81abd473 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } + + public void updateTime(String coinName, Date endTime) { + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight", 0); + update.set("lastSyncTime", endTime); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(0L); + watcherLog.setLastSyncTime(endTime); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java new file mode 100644 index 00000000..d046675b --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java @@ -0,0 +1,312 @@ +package com.bizzan.bc.wallet.util; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpClientUtil { + + private static String charSet = "UTF-8"; + private static CloseableHttpClient httpClient = null; + private static CloseableHttpResponse response = null; + + /** + * https的post请求 + * @param url + * @param jsonstr + * @param charset + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity se = new StringEntity(jsonStr); + se.setContentType("text/json"); + se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(se); + + response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + try { + //请求发起客户端 + httpClient = SSLClient.createSSLClientDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + //jsonObject = JSONObject.fromObject(content); + return content; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException{ + try { + //请求发起客户端 + httpClient = HttpClients.createDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + return content; + }else { + return null; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + } + + /** + * http的post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException { + try { + httpClient = HttpClients.createDefault(); + + // 创建httpPost + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity entity = new StringEntity(jsonStr, charSet); + entity.setContentType("text/json"); + entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(entity); + //发送post请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + + /** + * http的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException { + CloseableHttpClient httpclient = null; + CloseableHttpResponse response = null; + + try { + httpclient = HttpClients.createDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + //发送gey请求 + HttpGet httpGet = new HttpGet(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpclient.execute(httpGet); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return EntityUtils.toString(response.getEntity()); + } + }finally{ + if(httpclient != null){ + httpclient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * https的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + HttpGet httpGet = new HttpGet(url); + RequestConfig rconfig = RequestConfig.custom() + .setConnectionRequestTimeout(2000) + .setSocketTimeout(4000) + .setConnectTimeout(3000) + .build(); + httpGet.setConfig(rconfig); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpClient.execute(httpGet); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java new file mode 100644 index 00000000..42736ce7 --- /dev/null +++ b/wallet/bsv/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java @@ -0,0 +1,29 @@ +package com.bizzan.bc.wallet.util; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; + +public class SSLClient { + public static CloseableHttpClient createSSLClientDefault() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + +} \ No newline at end of file diff --git a/wallet/bsv/src/main/resources/application.properties b/wallet/bsv/src/main/resources/application.properties new file mode 100644 index 00000000..f65defc6 --- /dev/null +++ b/wallet/bsv/src/main/resources/application.properties @@ -0,0 +1,31 @@ +server.port=7008 +spring.application.name=service-rpc-bsv +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdasfdsafdsa@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true +bizzan.wallet=/data/bsv/bsv.wallet +bizzan.blockApi=https://bchsvexplorer.com/api/ + +coin.rpc= +coin.name=Bitcoinsv +coin.unit=BSV + +watcher.init-block-height=600350 +watcher.step=5 +watcher.confirmation=3 +watcher.interval=20000 diff --git a/wallet/bsv/src/test/java/SimpleTest.java b/wallet/bsv/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/bsv/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +} diff --git a/wallet/btm/.classpath b/wallet/btm/.classpath new file mode 100644 index 00000000..6330fa28 --- /dev/null +++ b/wallet/btm/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/btm/.gitignore b/wallet/btm/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/btm/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/btm/.project b/wallet/btm/.project new file mode 100644 index 00000000..b5ff1094 --- /dev/null +++ b/wallet/btm/.project @@ -0,0 +1,34 @@ + + + bch + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866785 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/btm/.settings/org.eclipse.core.resources.prefs b/wallet/btm/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/btm/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/btm/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/btm/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/btm/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/btm/.settings/org.eclipse.jdt.core.prefs b/wallet/btm/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..4de74584 --- /dev/null +++ b/wallet/btm/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,27 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/btm/.settings/org.eclipse.m2e.core.prefs b/wallet/btm/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/btm/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/btm/lib/bitcoin-rpc-1.2.0.jar b/wallet/btm/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/btm/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/btm/pom.xml b/wallet/btm/pom.xml new file mode 100644 index 00000000..3f0fe453 --- /dev/null +++ b/wallet/btm/pom.xml @@ -0,0 +1,103 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + btm + ${project-version} + + + + cash.bitcoinj + bitcoinj-core + 0.14.5.2 + + + + io.bytom + bytom-sdk-java + 1.0.2 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.alibaba + fastjson + + + + ${project.artifactId}-${version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..b91c42c6 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,165 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.WatcherLogService; +import com.bizzan.bc.wallet.util.ClientUtils; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +import io.bytom.api.Block; +import io.bytom.exception.BytomException; +import io.bytom.http.Client; +import lombok.Data; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +@Component +public class Watcher extends Thread{ + + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + private int confirmation = 3; + private Long currentBlockHeight = 0L; + private int step = 5; + private Long checkInterval = 2000L; + + @Autowired + private AccountService accountService; + + + @Value("${bytom.api.url}") + private String coreUrl; + + @Value("${client.access.token}") + private String accessToken; + + public void check(){ + try { + Thread.sleep(20000); + Long networkBlockNumber = getNetwortBlockHeight() - confirmation + 1; + if(currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + logger.info("replay block from {} to {}", startBlockNumber, networkBlockNumber); + List deposits = this.replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + }else { + logger.info("already latest height {},nothing to do!", currentBlockHeight); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + private List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + try { + Client client = ClientUtils.generateClient(coreUrl, accessToken); + for (Long blockHeight = startBlockNumber; blockHeight <= endBlockNumber; blockHeight++) { + // 获取区块信息(交易数量) + Block block = new Block.QueryBuilder() + .setBlockHeight(blockHeight.intValue()) + .getBlock(client); + + for(int k = 0; k < block.transactions.size(); k++) { + for(int l = 0; l < block.transactions.get(k).outputs.size(); l++) { + + BigDecimal amount = BigDecimal.valueOf(block.transactions.get(k).outputs.get(l).amount); + if(amount.compareTo(BigDecimal.ZERO) > 0) { + amount = amount.divide(BigDecimal.valueOf(100000000)); // 注意是100000000 + } + if(block.transactions.get(k).outputs.get(l).assetId.equalsIgnoreCase("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + && accountService.isAddressExist(block.transactions.get(k).outputs.get(l).address) + && amount.compareTo(BigDecimal.ZERO) > 0 + && block.transactions.get(k).outputs.get(l).type.equalsIgnoreCase("control")) { + logger.info("发现充值地址:" + blockHeight + "-" + block.transactions.get(k).id + ": 输出地址(" + block.transactions.get(k).outputs.get(l).address + ")"); + Deposit deposit = new Deposit(); + deposit.setTxid(block.transactions.get(k).id); + deposit.setBlockHeight(blockHeight); + deposit.setBlockHash(block.hash); + deposit.setAmount(amount); + deposit.setAddress(block.transactions.get(k).outputs.get(l).address); + deposit.setTime(new Date(block.timestamp * 1000)); + deposits.add(deposit); + } + } + } + Thread.sleep(10000); // 块与块之间也暂停10秒 + } + } + catch (Exception e){ + e.printStackTrace(); + return null; + } + return deposits; + } + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check transactions..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 30000)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } + + public Long getNetwortBlockHeight() { + Client client; + try { + client = ClientUtils.generateClient(coreUrl, accessToken); + int blockCount = Block.getBlockCount(client); + return (long) blockCount; + } catch (BytomException e) { + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..16106a79 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,144 @@ +package com.bizzan.bc.wallet.controller; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; + +import org.bitcoinj.core.Address; +import org.bitcoinj.core.ECKey; +import org.bitcoinj.core.NetworkParameters; +import org.bitcoinj.params.MainNetParams; +import org.bitcoinj.wallet.UnreadableWalletException; +import org.bitcoinj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.ClientUtils; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +import io.bytom.api.Account; +import io.bytom.api.Balance; +import io.bytom.api.Block; +import io.bytom.api.Receiver; +import io.bytom.exception.BytomException; +import io.bytom.http.Client; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + + @Value("${bytom.api.url}") + private String coreUrl; + + @Value("${client.access.token}") + private String accessToken; + + @Value("${bytom.alias}") + private String bytomAlias; + + @Value("${bytom.password}") + private String bytomPassword; + + @Autowired + private AccountService accountService; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address: "+account); + try { + Client client = ClientUtils.generateClient(coreUrl, accessToken); + Account bytomAccount = null; + Account.Items accounts = new Account.QueryBuilder().list(client); + if(accounts.data.size() > 0) { + bytomAccount = accounts.data.get(0); + } + + // 创建地址 + Receiver receiver = new Account.ReceiverBuilder() + .setAccountId(bytomAccount.id) + .create(client); + + accountService.saveOne(account, receiver.address); + MessageResult result = new MessageResult(0,"success"); + result.setData(receiver.address); + return result; + } catch (BytomException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + } + + /** + * 钱包总余额(非节点服务,直接返回0,后面如果有空闲可以追加获取总体余额) + * @return + */ + @GetMapping("balance") + public MessageResult balance(){ + Client client = null; + try { + client = ClientUtils.generateClient(coreUrl, accessToken); + Balance.Items bItems = new Balance.QueryBuilder().list(client); + BigDecimal total = BigDecimal.ZERO; + for(int m = 0; m < bItems.data.size(); m++) { + if(bItems.data.get(m).assetId.equalsIgnoreCase("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) { + total = total.add(BigDecimal.valueOf(bItems.data.get(m).amount)); + } + } + MessageResult result = new MessageResult(0,"success"); + result.setData(total); + return result; + } catch (BytomException e) { + e.printStackTrace(); + MessageResult result = new MessageResult(0,"success"); + result.setData(0); + return result; + } + } + + /** + * 获取地址余额 + * @param address + * @return + */ + @GetMapping("balance/{address}") + public MessageResult balance(@PathVariable String address){ + return MessageResult.error(500,"Bytom不支持单个地址查询余额"); + } + + @GetMapping("height") + public MessageResult getHeight(){ + Client client; + try { + client = ClientUtils.generateClient(coreUrl, accessToken); + int blockCount = Block.getBlockCount(client); + MessageResult result = new MessageResult(0,"success"); + result.setData(blockCount); + return result; + } catch (BytomException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + } + + /** + * TODO 增加转账功能 + * @param address + * @param amount + * @param fee + * @return + */ + @GetMapping({"transfer","withdraw"}) + public MessageResult withdraw(String address, BigDecimal amount,BigDecimal fee){ + return MessageResult.error(500, "暂未实现该功能"); + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..7a76629b --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,19 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..b8183b09 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; + private Long userId = 0L; +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..a0233bde --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 20000L; // 间隔时间 + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..ae776eb6 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,67 @@ +package com.bizzan.bc.wallet.event; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("lasted")) { + watcher.setCurrentBlockHeight(watcher.getNetwortBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数(时间差) + watcher.setConfirmation(watcherSetting.getConfirmation()); + + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..12833b81 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}", deposit.getTxid(), deposit.getAddress(), deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..81abd473 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } + + public void updateTime(String coinName, Date endTime) { + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight", 0); + update.set("lastSyncTime", endTime); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(0L); + watcherLog.setLastSyncTime(endTime); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java new file mode 100644 index 00000000..a422bef2 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/ClientUtils.java @@ -0,0 +1,20 @@ +package com.bizzan.bc.wallet.util; + +import io.bytom.common.Configuration; +import io.bytom.exception.BytomException; +import io.bytom.http.Client; + +public class ClientUtils { + + private static Client client = null; + + public static Client generateClient(String coreURL, String accessToken) throws BytomException { + if(client == null) { + if (coreURL == null || coreURL.isEmpty()) { + coreURL = "http://127.0.0.1:9888/"; + } + client = new Client(coreURL, accessToken); + } + return client; + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java new file mode 100644 index 00000000..d046675b --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java @@ -0,0 +1,312 @@ +package com.bizzan.bc.wallet.util; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpClientUtil { + + private static String charSet = "UTF-8"; + private static CloseableHttpClient httpClient = null; + private static CloseableHttpResponse response = null; + + /** + * https的post请求 + * @param url + * @param jsonstr + * @param charset + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity se = new StringEntity(jsonStr); + se.setContentType("text/json"); + se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(se); + + response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + try { + //请求发起客户端 + httpClient = SSLClient.createSSLClientDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + //jsonObject = JSONObject.fromObject(content); + return content; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException{ + try { + //请求发起客户端 + httpClient = HttpClients.createDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + return content; + }else { + return null; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + } + + /** + * http的post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException { + try { + httpClient = HttpClients.createDefault(); + + // 创建httpPost + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity entity = new StringEntity(jsonStr, charSet); + entity.setContentType("text/json"); + entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(entity); + //发送post请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + + /** + * http的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException { + CloseableHttpClient httpclient = null; + CloseableHttpResponse response = null; + + try { + httpclient = HttpClients.createDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + //发送gey请求 + HttpGet httpGet = new HttpGet(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpclient.execute(httpGet); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return EntityUtils.toString(response.getEntity()); + } + }finally{ + if(httpclient != null){ + httpclient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * https的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + HttpGet httpGet = new HttpGet(url); + RequestConfig rconfig = RequestConfig.custom() + .setConnectionRequestTimeout(2000) + .setSocketTimeout(4000) + .setConnectTimeout(3000) + .build(); + httpGet.setConfig(rconfig); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpClient.execute(httpGet); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java new file mode 100644 index 00000000..42736ce7 --- /dev/null +++ b/wallet/btm/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java @@ -0,0 +1,29 @@ +package com.bizzan.bc.wallet.util; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; + +public class SSLClient { + public static CloseableHttpClient createSSLClientDefault() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + +} \ No newline at end of file diff --git a/wallet/btm/src/main/resources/application.properties b/wallet/btm/src/main/resources/application.properties new file mode 100644 index 00000000..7ed6f878 --- /dev/null +++ b/wallet/btm/src/main/resources/application.properties @@ -0,0 +1,35 @@ +server.port=7011 +spring.application.name=service-rpc-btm +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdafdsafds@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true + +bytom.api.url=http://111.111.111.111:9888/ +client.access.token=bizzan:b44774eea4ed40c055d713c676b00c80eb461dd1d829329e92e8ef12b07e01d + +bytom.alias=bizzan +bytom.password=fdafdssddds + +coin.rpc= +coin.name=Bytom +coin.unit=BTM + +watcher.init-block-height=334504 +watcher.step=5 +watcher.confirmation=3 +watcher.interval=20000 diff --git a/wallet/btm/src/test/java/SimpleTest.java b/wallet/btm/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/btm/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +} diff --git a/wallet/ect/.classpath b/wallet/ect/.classpath new file mode 100644 index 00000000..a97cb0eb --- /dev/null +++ b/wallet/ect/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/ect/.gitignore b/wallet/ect/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/ect/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/ect/.project b/wallet/ect/.project new file mode 100644 index 00000000..5ed95f85 --- /dev/null +++ b/wallet/ect/.project @@ -0,0 +1,34 @@ + + + ect + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866790 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/ect/.settings/org.eclipse.core.resources.prefs b/wallet/ect/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..abdea9ac --- /dev/null +++ b/wallet/ect/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/wallet/ect/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/ect/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/ect/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/ect/.settings/org.eclipse.jdt.core.prefs b/wallet/ect/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/ect/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/ect/.settings/org.eclipse.m2e.core.prefs b/wallet/ect/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/ect/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/ect/lib/bitcoin-rpc-1.2.0.jar b/wallet/ect/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/ect/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/ect/pom.xml b/wallet/ect/pom.xml new file mode 100644 index 00000000..61bb9c38 --- /dev/null +++ b/wallet/ect/pom.xml @@ -0,0 +1,97 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + ect + ${project-version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + com.bizzan.bc.wallet + rpc-common + + + io.reactivex + rxjava + 1.3.4 + + + org.projectlombok + lombok + + + commons-codec + commons-codec + + + com.mashape.unirest + unirest-java + + + com.bizzan.bc.wallet + rpc-common + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/wallet/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java b/wallet/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java new file mode 100644 index 00000000..d2107459 --- /dev/null +++ b/wallet/ect/src/main/java/com/bizzan/bc/wallet/EctApplication.java @@ -0,0 +1,14 @@ +package com.bizzan.bc.wallet; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class EctApplication { + public static void main(String[] args){ + SpringApplication.run(EctApplication.class,args); + } +} diff --git a/wallet/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java b/wallet/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java new file mode 100644 index 00000000..20f23673 --- /dev/null +++ b/wallet/ect/src/main/java/com/bizzan/bc/wallet/component/EctApi.java @@ -0,0 +1,156 @@ +package com.bizzan.bc.wallet.component; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.mashape.unirest.http.HttpResponse; +import com.mashape.unirest.http.Unirest; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; + +@Component +public class EctApi { + @Value("${coin.rpc}") + private String host = "http://52.80.243.177:5990/v1"; + + /** + * 获取当前最新高度 + * @return + */ + public Long getLatestHeight(){ + try { + HttpResponse response = Unirest.get(host + "/server") + .asString(); + JSONObject result = JSON.parseObject(response.getBody()); + if(result.getBoolean("success")){ + String completeLedgers = result.getJSONObject("sdchaind_server_status").getString("complete_ledgers"); + return Long.parseLong(completeLedgers.split("-")[1]); + } + } + catch (Exception e){ + e.printStackTrace(); + return -1L; + } + return -1L; + } + + /** + * 获取交易 + * @param address + * @param startHeight + * @param endHeight + * @param currency + * @return + */ + public JSONArray getTrasactions(String address,Long startHeight,Long endHeight,String currency){ + try { + HttpResponse response = Unirest.get(host + "/accounts/payments/"+address) + .queryString("destination_account",address) + .queryString("start_ledger",startHeight) + .queryString("end_ledger",endHeight) + .asString(); + JSONObject result = JSON.parseObject(response.getBody()); + if(result.getBoolean("success")){ + JSONArray txs = result.getJSONArray("payments"); + JSONArray array = new JSONArray(); + for(int index=0;index response = Unirest.get(host + "/wallet/new") + .asString(); + System.out.println(response.getBody()); + } + catch (Exception e){ + e.printStackTrace(); + } + } + + public BigDecimal getBalance(String address,String currency){ + try{ + HttpResponse response = Unirest.get(host + "/accounts/balances/"+address) + .asString(); + System.out.println(response.getBody()); + JSONObject result = JSON.parseObject(response.getBody()); + if(result.getBoolean("success")){ + JSONArray balances = result.getJSONArray("balances"); + for(int i=0,size=balances.size();i response = Unirest.post(host + "/accounts/payments/"+from+"?submit=true") + .header("Content-Type","application/json") + .body(request.toJSONString()) + .asString(); + System.out.println(response.getBody()); + JSONObject result = JSON.parseObject(response.getBody()); + if(result.getBoolean("success")){ + return result.getString("hash"); + } + } + catch (Exception e){ + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args){ + EctApi api = new EctApi(); + String txid = api.sendFrom("snDPJkVBdJW733t2BY1LnsjfHxSad","eneiBsnNar7kw4MFYYfTTRAoucaaTPdmxQ", + "esV75BQfiEiKdgaivjEYCt7EXk3BwJiscX",new BigDecimal("10"),"12"); + System.out.println(txid); + } +} diff --git a/wallet/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java b/wallet/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java new file mode 100644 index 00000000..2cf75268 --- /dev/null +++ b/wallet/ect/src/main/java/com/bizzan/bc/wallet/component/EctWatcher.java @@ -0,0 +1,63 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.util.Convert; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +@Component +public class EctWatcher extends Watcher{ + private Logger logger = LoggerFactory.getLogger(EctWatcher.class); + @Autowired + private EctApi ectApi; + + @Override + public List replayBlock(Long startBlockNumber, Long endBlockNumber) { + JSONArray transactions = ectApi.getTrasactions(getCoin().getMasterAddress(),startBlockNumber,endBlockNumber,getCoin().getUnit()); + logger.info("transactions ={}",transactions); + List deposits = new ArrayList<>(); + for(int index=0,size=transactions.size();index + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/eos/.gitignore b/wallet/eos/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/eos/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/eos/.project b/wallet/eos/.project new file mode 100644 index 00000000..ebcb46fe --- /dev/null +++ b/wallet/eos/.project @@ -0,0 +1,34 @@ + + + eos + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866791 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/eos/.settings/org.eclipse.core.resources.prefs b/wallet/eos/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/eos/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/eos/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/eos/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/eos/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/eos/.settings/org.eclipse.jdt.core.prefs b/wallet/eos/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..4de74584 --- /dev/null +++ b/wallet/eos/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,27 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/eos/.settings/org.eclipse.m2e.core.prefs b/wallet/eos/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/eos/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/eos/lib/bitcoin-rpc-1.2.0.jar b/wallet/eos/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/eos/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/eos/pom.xml b/wallet/eos/pom.xml new file mode 100644 index 00000000..ab0daf23 --- /dev/null +++ b/wallet/eos/pom.xml @@ -0,0 +1,97 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + eos + ${project-version} + + + + cash.bitcoinj + bitcoinj-core + 0.14.5.2 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.alibaba + fastjson + + + + ${project.artifactId}-${version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..4c391f4e --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,205 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.WatcherLogService; +import com.bizzan.bc.wallet.util.HttpClientUtil; + +import lombok.Data; + +import org.apache.http.client.ClientProtocolException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.math.BigDecimal; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +@Component +public class Watcher extends Thread{ + + @Value("${bizzan.blockApi}") + private String blockApi; + + @Value("${bizzan.apikey}") + private String apikey; + + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + private int confirmation = 3; + private Long currentBlockHeight = 0L; + private int step = 5; + private Long checkInterval = 2000L; + + @Autowired + private AccountService accountService; + + public void check(){ + try { + Long networkBlockNumber = getNetwortBlockHeight() - confirmation + 1; + Thread.sleep(10000); // 避免连续访问 + if(currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + + List deposits = this.replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + }else { + logger.info("already latest height {},nothing to do!", currentBlockHeight); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + private List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + + JSONObject param = new JSONObject(); + param.put("account_name", coin.getDepositAddress()); + param.put("code", "eosio.token"); + param.put("symbol", "EOS"); + param.put("to", coin.getDepositAddress()); + param.put("start_block_num", startBlockNumber); + param.put("end_block_num", endBlockNumber); + param.put("size", 100); + logger.info("replay block from {} to {}", startBlockNumber, endBlockNumber); + try { + logger.info("Transactions params: {}", param.toJSONString()); + String retStr = this.eosHttpsPost(this.blockApi + "v2/third/get_account_transfer", param.toJSONString()); + logger.info("Transactions result: {}", retStr); + + if(!StringUtils.isEmpty(retStr)){ + JSONObject obj = JSON.parseObject(retStr); + int total = obj.getIntValue("total"); + + logger.info("解析区块{} - {}的交易信息:{}条记录", startBlockNumber, endBlockNumber, total); + + if(total > 0) { + JSONArray list = obj.getJSONArray("list"); + if(list.size() > 0) { + for(int i = 0; i < list.size(); i++) { + JSONObject transObj = list.getJSONObject(i); + logger.info("交易信息:{}", transObj.toJSONString()); + if(transObj.getString("status").equals("executed")) { + // 区块号 + Long blockNum = transObj.getLong("block_num"); + JSONObject transData = transObj.getJSONObject("data"); + String quantity = transData.getString("quantity"); + // 转账数量 + BigDecimal amount = new BigDecimal(quantity.split(" ")[0]); + // Memo + String memo = transData.getString("memo"); + // Memo为数字 + Boolean isNumric = memo.matches("^\\d+$"); + if(isNumric) { + if(amount.compareTo(BigDecimal.ZERO) > 0) { + logger.info("发现用户充值记录: 数量:{}, Memo:{}", amount, memo); + Deposit deposit = new Deposit(); + deposit.setUserId(Long.parseLong(memo)); //此处无需对memo处理,wallet.jar会处理 + deposit.setTxid(transObj.getString("id")); + deposit.setBlockHeight(blockNum); + deposit.setBlockHash(transObj.getString("id")); + deposit.setAmount(amount); + deposit.setAddress(coin.getDepositAddress()); + deposit.setTime(new Date()); + deposits.add(deposit); + } + } + } + } + } + } + } + }catch (Exception e1) { + e1.printStackTrace(); + return null; + } + + return deposits; + } + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check transactions..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 20000)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } + + public Long getNetwortBlockHeight() { + try { + String retStr = this.eosHttpsPost(this.blockApi + "v1/chain/get_info"); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + Long height = json.getLong("head_block_num"); + return height; + } + return 0L; + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } + + private String eosHttpsPost(String url, String json) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, KeyStoreException, IOException { + Map headerParam = new HashMap(); + headerParam.put("apikey", this.apikey); + return HttpClientUtil.doHttpsPost(url, json, headerParam); + } + + private String eosHttpsPost(String url) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, KeyStoreException, IOException { + Map headerParam = new HashMap(); + Map postParam = new HashMap(); + headerParam.put("apikey", this.apikey); + return HttpClientUtil.doHttpsPost(url, postParam, headerParam); + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..891ff9f6 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,37 @@ +package com.bizzan.bc.wallet.controller; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; + +import org.bitcoinj.core.Address; +import org.bitcoinj.core.ECKey; +import org.bitcoinj.core.NetworkParameters; +import org.bitcoinj.params.MainNetParams; +import org.bitcoinj.wallet.UnreadableWalletException; +import org.bitcoinj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + + @Value("${bizzan.blockApi}") + private String blockApi; + + @Autowired + private AccountService accountService; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..435324bd --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,20 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; + private String depositAddress; +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..b8183b09 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; + private Long userId = 0L; +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..a0233bde --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 20000L; // 间隔时间 + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..ae776eb6 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,67 @@ +package com.bizzan.bc.wallet.event; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("lasted")) { + watcher.setCurrentBlockHeight(watcher.getNetwortBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数(时间差) + watcher.setConfirmation(watcherSetting.getConfirmation()); + + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..12833b81 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}", deposit.getTxid(), deposit.getAddress(), deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..81abd473 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } + + public void updateTime(String coinName, Date endTime) { + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight", 0); + update.set("lastSyncTime", endTime); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(0L); + watcherLog.setLastSyncTime(endTime); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java new file mode 100644 index 00000000..a289124e --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java @@ -0,0 +1,312 @@ +package com.bizzan.bc.wallet.util; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpClientUtil { + + private static String charSet = "UTF-8"; + private static CloseableHttpClient httpClient = null; + private static CloseableHttpResponse response = null; + + /** + * https的post请求 + * @param url + * @param jsonstr + * @param charset + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity se = new StringEntity(jsonStr); + se.setContentType("application/json"); + se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(se); + + response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + try { + //请求发起客户端 + httpClient = SSLClient.createSSLClientDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + //jsonObject = JSONObject.fromObject(content); + return content; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException{ + try { + //请求发起客户端 + httpClient = HttpClients.createDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + return content; + }else { + return null; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + } + + /** + * http的post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException { + try { + httpClient = HttpClients.createDefault(); + + // 创建httpPost + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity entity = new StringEntity(jsonStr, charSet); + entity.setContentType("text/json"); + entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(entity); + //发送post请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + + /** + * http的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException { + CloseableHttpClient httpclient = null; + CloseableHttpResponse response = null; + + try { + httpclient = HttpClients.createDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + //发送gey请求 + HttpGet httpGet = new HttpGet(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpclient.execute(httpGet); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return EntityUtils.toString(response.getEntity()); + } + }finally{ + if(httpclient != null){ + httpclient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * https的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + HttpGet httpGet = new HttpGet(url); + RequestConfig rconfig = RequestConfig.custom() + .setConnectionRequestTimeout(2000) + .setSocketTimeout(4000) + .setConnectTimeout(3000) + .build(); + httpGet.setConfig(rconfig); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpClient.execute(httpGet); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java new file mode 100644 index 00000000..42736ce7 --- /dev/null +++ b/wallet/eos/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java @@ -0,0 +1,29 @@ +package com.bizzan.bc.wallet.util; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; + +public class SSLClient { + public static CloseableHttpClient createSSLClientDefault() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + +} \ No newline at end of file diff --git a/wallet/eos/src/main/resources/application.properties b/wallet/eos/src/main/resources/application.properties new file mode 100644 index 00000000..675c5e41 --- /dev/null +++ b/wallet/eos/src/main/resources/application.properties @@ -0,0 +1,33 @@ +server.port=7009 +spring.application.name=service-rpc-eos +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdafdsafdsa@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true + +bizzan.blockApi=https://open-api.eos.blockdog.com/ +bizzan.apikey=a9cbd245-e976-58a-9c62-3d8d8cdf872 + +coin.rpc= +coin.name=EOS +coin.unit=EOS +coin.depositAddress=AAAAAAAAAAAAA + +watcher.init-block-height=79953165 +watcher.step=100 +watcher.confirmation=200 +watcher.interval=20000 diff --git a/wallet/eos/src/test/java/SimpleTest.java b/wallet/eos/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/eos/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +} diff --git a/wallet/erc-eusdt/.classpath b/wallet/erc-eusdt/.classpath new file mode 100644 index 00000000..a97cb0eb --- /dev/null +++ b/wallet/erc-eusdt/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/erc-eusdt/.gitignore b/wallet/erc-eusdt/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/erc-eusdt/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/erc-eusdt/.project b/wallet/erc-eusdt/.project new file mode 100644 index 00000000..b05a881b --- /dev/null +++ b/wallet/erc-eusdt/.project @@ -0,0 +1,34 @@ + + + erc-eusdt + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866792 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/erc-eusdt/.settings/org.eclipse.core.resources.prefs b/wallet/erc-eusdt/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..abdea9ac --- /dev/null +++ b/wallet/erc-eusdt/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/wallet/erc-eusdt/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/erc-eusdt/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/erc-eusdt/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/erc-eusdt/.settings/org.eclipse.jdt.core.prefs b/wallet/erc-eusdt/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/erc-eusdt/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/erc-eusdt/.settings/org.eclipse.m2e.core.prefs b/wallet/erc-eusdt/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/erc-eusdt/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar b/wallet/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/erc-eusdt/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/erc-eusdt/pom.xml b/wallet/erc-eusdt/pom.xml new file mode 100644 index 00000000..9196893b --- /dev/null +++ b/wallet/erc-eusdt/pom.xml @@ -0,0 +1,98 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + ../pom.xml + + 4.0.0 + + com.bizzan.bc.wallet + erc-eusdt + ${parent.version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + org.web3j + core + + + io.reactivex + rxjava + 1.3.4 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + org.projectlombok + lombok + + + com.bizzan.bc.wallet + eth-support + + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + diff --git a/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java new file mode 100644 index 00000000..f9fb2f5a --- /dev/null +++ b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java @@ -0,0 +1,14 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableScheduling +@SpringBootApplication +public class ErcTokenApplication { + + public static void main(String ... args){ + SpringApplication.run(ErcTokenApplication.class,args); + } +} diff --git a/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java new file mode 100644 index 00000000..fe31bcd4 --- /dev/null +++ b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java @@ -0,0 +1,245 @@ +package com.bizzan.bc.wallet.component; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EtherscanApi; +import com.bizzan.bc.wallet.util.EthConvert; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.web3j.abi.FunctionReturnDecoder; +import org.web3j.abi.TypeReference; +import org.web3j.abi.datatypes.Address; +import org.web3j.abi.datatypes.Function; +import org.web3j.abi.datatypes.Type; +import org.web3j.abi.datatypes.generated.Uint256; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.DefaultBlockParameterNumber; +import org.web3j.protocol.core.methods.response.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; + +@Component +public class TokenWatcher extends Watcher{ + private Logger logger = LoggerFactory.getLogger(TokenWatcher.class); + @Autowired + private Web3j web3j; + @Autowired + private Contract contract; + @Autowired + private AccountService accountService; + @Autowired(required = false) + private EtherscanApi etherscanApi; + + @Autowired + private DepositEvent depositEvent; + + public List replayBlock(Long startBlockNumber,Long endBlockNumber){ + List deposits = new ArrayList<>(); + for(Long blockHeight = startBlockNumber;blockHeight<=endBlockNumber;blockHeight++) { + EthBlock block = null; + try { + logger.info("ethGetBlockByNumber {}", blockHeight); + block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(blockHeight), true).send(); + } catch (IOException e) { + e.printStackTrace(); + } + List transactionResults = block.getBlock().getTransactions(); + logger.info("replayBlock: Height({}) - Transactions count({})", blockHeight, transactionResults.size()); + for(EthBlock.TransactionResult transactionResult:transactionResults){ + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); +// try { +// 合约执行结果判断,此处暂时注释掉,后面需要确认是否一定需要 +// EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(transaction.getHash()).send(); +// if(receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")){ + +// logger.info("Transaction Detail: Height({}) - {}", blockHeight, transaction.getHash()); + + String input = transaction.getInput(); + String cAddress = transaction.getTo(); + if (StringUtils.isNotEmpty(input) && input.length() >= 138 && contract.getAddress().equalsIgnoreCase(cAddress)) { + logger.info("Transaction is contract: Height({}) - {}", blockHeight, contract.getAddress()); + String data = input.substring(0, 9); + data = data + input.substring(17, input.length()); + Function function = new Function("transfer", Arrays.asList(), Arrays.asList(new TypeReference
() { + }, new TypeReference() { + })); + + List params = FunctionReturnDecoder.decode(data, function.getOutputParameters()); + // 充币地址 + String toAddress = params.get(0).getValue().toString(); + String amount = params.get(1).getValue().toString(); + logger.info("Scan Address: " + toAddress + ", amount: " + amount); + if(accountService.isAddressExist(toAddress)) { + logger.info("============> Find a deposit address: " + toAddress + ", amount: " + amount); + //当eventTopic0参数不为空时检查event_log结果,防止低版本的token假充值 + if(StringUtils.isNotEmpty(contract.getEventTopic0()) && etherscanApi != null){ + boolean checkEvent = etherscanApi.checkEventLog(blockHeight,contract.getAddress(),contract.getEventTopic0(),transaction.getHash()); + if(!checkEvent) continue; + } + logger.info("Transaction is Deposit: {} ", transaction.getHash()); + // 获取充值信息 + if(StringUtils.isNotEmpty(amount)){ + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(EthConvert.fromWei(amount, contract.getUnit())); + deposit.setAddress(toAddress); + deposit.setTime(Calendar.getInstance().getTime()); + logger.info("receive {} {}",deposit.getAmount(),getCoin().getUnit()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + deposits.add(deposit); + } + } + } +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } + + } + } + return deposits; + } + + /* 旧版:本地全节点模式 + public List replayBlock(Long startBlockNumber,Long endBlockNumber){ + List deposits = new ArrayList<>(); + for(Long blockHeight = startBlockNumber;blockHeight<=endBlockNumber;blockHeight++) { + EthBlock block = null; + try { + logger.info("ethGetBlockByNumber {}", blockHeight); + block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(blockHeight), true).send(); + } catch (IOException e) { + e.printStackTrace(); + } + List transactionResults = block.getBlock().getTransactions(); + logger.info("transactionCount {}", transactionResults.size()); + for(EthBlock.TransactionResult transactionResult:transactionResults){ + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); + try { + logger.info("transaction hash: {}", transaction.getHash()); + EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(transaction.getHash()).send(); + logger.info("transaction hash result: {}", receipt.getTransactionReceipt().isPresent()); + if(receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")){ + //当eventTopic0参数不为空时检查event_log结果,防止低版本的token假充值 + if(StringUtils.isNotEmpty(contract.getEventTopic0()) && etherscanApi != null){ + boolean checkEvent = etherscanApi.checkEventLog(blockHeight,contract.getAddress(),contract.getEventTopic0(),transaction.getHash()); + if(!checkEvent) continue; + } + String input = transaction.getInput(); + String cAddress = transaction.getTo(); + if (StringUtils.isNotEmpty(input) && input.length() >= 138 && contract.getAddress().equalsIgnoreCase(cAddress)) { + String data = input.substring(0, 9); + data = data + input.substring(17, input.length()); + Function function = new Function("transfer", Arrays.asList(), Arrays.asList(new TypeReference
() { + }, new TypeReference() { + })); + + List params = FunctionReturnDecoder.decode(data, function.getOutputParameters()); + // 充币地址 + String toAddress = params.get(0).getValue().toString(); + String amount = params.get(1).getValue().toString(); + if(accountService.isAddressExist(toAddress)) { + if(StringUtils.isNotEmpty(amount)){ + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(EthConvert.fromWei(amount, contract.getUnit())); + deposit.setAddress(toAddress); + deposit.setTime(Calendar.getInstance().getTime()); + logger.info("receive {} {}",deposit.getAmount(),getCoin().getUnit()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + deposits.add(deposit); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + return deposits; + } + */ + public synchronized void replayBlockInit(Long startBlockNumber,Long endBlockNumber){ + for(long i = startBlockNumber;i<=endBlockNumber;i++) { + EthBlock block = null; + try { + logger.info("ethGetBlockByNumber {}", i); + block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(i), true).send(); + } catch (IOException e) { + e.printStackTrace(); + } + List transactionResults = block.getBlock().getTransactions(); + logger.info("transactionCount {}", transactionResults.size()); + transactionResults.forEach(transactionResult -> { + + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); + try { + EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(transaction.getHash()).send(); + if(receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")){ + String input = transaction.getInput(); + String cAddress = transaction.getTo(); + if (StringUtils.isNotEmpty(input) && input.length() >= 138 && contract.getAddress().equalsIgnoreCase(cAddress)) { + String data = input.substring(0, 9); + data = data + input.substring(17, input.length()); + Function function = new Function("transfer", Arrays.asList(), Arrays.asList(new TypeReference
() { + }, new TypeReference() { + })); + + List params = FunctionReturnDecoder.decode(data, function.getOutputParameters()); + // 充币地址 + String toAddress = params.get(0).getValue().toString(); + String amount = params.get(1).getValue().toString(); + logger.info("################{}###################{}",toAddress,amount); + if(accountService.isAddressExist(toAddress)) { + if(StringUtils.isNotEmpty(amount)){ + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(EthConvert.fromWei(amount, contract.getUnit())); + deposit.setAddress(toAddress); + deposit.setTime(Calendar.getInstance().getTime()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + depositEvent.onConfirmed(deposit); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + }); + } + } + + @Override + public Long getNetworkBlockHeight() { + try { + EthBlockNumber blockNumber = web3j.ethBlockNumber().send(); + long networkBlockNumber = blockNumber.getBlockNumber().longValue(); + return networkBlockNumber; + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java new file mode 100644 index 00000000..d8df7cfc --- /dev/null +++ b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java @@ -0,0 +1,15 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + @Bean + @LoadBalanced + RestTemplate restTemplate() { + return new RestTemplate(); + } +} diff --git a/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..1cab1d90 --- /dev/null +++ b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,185 @@ +package com.bizzan.bc.wallet.controller; + + +import com.bizzan.bc.wallet.component.TokenWatcher; +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.web3j.protocol.core.methods.response.EthBlockNumber; + +import java.math.BigDecimal; +import java.util.List; + +@RequestMapping("/rpc") +@RestController +public class WalletController { + @Autowired + private EthService service; + @Autowired + private AccountService accountService; + @Autowired + private Coin coin; + @Autowired + private Contract contract; + @Autowired + private TokenWatcher watcher; + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("balance") + public MessageResult walletBalance() { + try { + BigDecimal amt = accountService.findBalanceSum(); + MessageResult result = new MessageResult(0, "success"); + result.setData(amt); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("height") + public MessageResult getHeight() { + try { + Long blockNumber = watcher.getCurrentBlockHeight(); + long rpcBlockNumber = blockNumber.longValue(); + MessageResult result = new MessageResult(0, "success"); + result.setData(rpcBlockNumber); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("balance/{address}") + public MessageResult addressBalance(@PathVariable String address) { + try { + BigDecimal amt = service.getTokenBalance(address); + MessageResult result = new MessageResult(0, "success"); + result.setData(amt); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account, @RequestParam(required = false, defaultValue = "") String password) { + logger.info("create new account={},password={}", account, password); + try { + String address; + Account acct = accountService.findByName("ETH",account); + if(acct != null){ + address = acct.getAddress(); + accountService.save(acct); + } + else { + address = service.createNewWallet(account, password); + } + MessageResult result = new MessageResult(0, "success"); + result.setData(address); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "rpc error:" + e.getMessage()); + } + } + + @GetMapping("transfer-from-address") + public MessageResult transferFromAddress(String fromAddress,String address, BigDecimal amount, BigDecimal fee) { + logger.info("transferFromAddress:from={},to={},amount={},fee={}",fromAddress,address, amount, fee); + try { + if (fee == null || fee.compareTo(BigDecimal.ZERO) <= 0) { + fee = service.getMinerFee(contract.getGasLimit()); + } + if(service.getBalance(fromAddress).compareTo(fee) < 0){ + logger.info("地址{}手续费不足,最低为{}ETH",fromAddress,fee); + return MessageResult.error(500,"矿工费不足"); + } + MessageResult result = service.transferToken(fromAddress,address, amount, true); + logger.info("返回结果 : " + result.toString()); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("transfer") + public MessageResult transfer(String address, BigDecimal amount, BigDecimal fee) { + logger.info("transfer:address={},amount={},fee={}", address, amount, fee); + BigDecimal transferredAmount = BigDecimal.ZERO; + try { + if (fee == null || fee.compareTo(BigDecimal.ZERO) <= 0) { + fee = service.getMinerFee(contract.getGasLimit()); + } + List accountList = accountService.findByBalanceAndGas(coin.getMinCollectAmount(),fee); + for(Account account:accountList) { + if(service.getBalance(account.getAddress()).compareTo(fee) < 0){ + logger.info("地址{}手续费不足,最低为{}",account.getAddress(),fee); + continue; + } + BigDecimal availAmt = service.getTokenBalance(account.getAddress()); + if(availAmt.compareTo(coin.getMinCollectAmount()) < 0){ + logger.info("地址{}余额不足,最低为{}",account.getAddress(),coin.getMinCollectAmount()); + continue; + } + logger.info("from={},amount={},fee={}",account.getAddress(),availAmt,fee); + MessageResult result = service.transferToken(account.getAddress(), address, availAmt, true); + if(result.getCode() == 0) { + transferredAmount = transferredAmount.add(availAmt); + } + if(transferredAmount.compareTo(amount) >= 0) break; + } + logger.info("累计转出:{}",transferredAmount); + MessageResult mr = new MessageResult(0,"转账成功"); + mr.setData(transferredAmount); + return mr; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("withdraw") + public MessageResult withdraw(String address, BigDecimal amount, + @RequestParam(name = "sync",required = false,defaultValue = "true") Boolean sync, + @RequestParam(name = "withdrawId",required = false,defaultValue = "") String withdrawId) { + logger.info("withdraw:to={},amount={},sync={},withdrawId={}", address, amount, sync,withdrawId); + try { + MessageResult result = service.transferTokenFromWithdrawWallet(address, amount, sync,withdrawId); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("sync-block") + public MessageResult manualSync(Long startBlock, Long endBlock) { + try { + watcher.replayBlockInit(startBlock,endBlock); + return MessageResult.success(); + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "同步失败:" + e.getMessage()); + } + } + + @GetMapping("sync-height") + public MessageResult getCurrentSyncHeight(){ + MessageResult result = MessageResult.success(); + result.setData(watcher.getCurrentBlockHeight()); + return result; + } +} diff --git a/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java new file mode 100644 index 00000000..c6f9d5f3 --- /dev/null +++ b/wallet/erc-eusdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java @@ -0,0 +1,69 @@ +package com.bizzan.bc.wallet.job; + + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; +import com.bizzan.bc.wallet.util.AccountReplay; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Component +public class CoinCollectJob { + private Logger logger = LoggerFactory.getLogger(CoinCollectJob.class); + @Autowired + private AccountService accountService; + @Autowired + private EthService ethService; + @Autowired + private Coin coin; + @Autowired + private Contract contract; + + /** + * 为用户地址充值矿工费(每1小时执行一次) + */ + @Scheduled(cron = "0 0 */1 * * ?") + public void rechargeMinerFee(){ + try { + AccountReplay accountReplay = new AccountReplay(accountService, 100); + BigDecimal minerFee = ethService.getMinerFee(contract.getGasLimit()); + + accountReplay.run(account -> { + try { + BigDecimal ethBalance = ethService.getBalance(account.getAddress()); + BigDecimal tokenBalance = ethService.getTokenBalance(account.getAddress()); + //给满足条件的地址充矿工费,条件1:eth额度小于minerFee,条件2:balance大于等于minCollectAmount + if (ethBalance.compareTo(minerFee) < 0 + && tokenBalance.compareTo(coin.getMinCollectAmount()) >= 0) { + logger.info("process account:{}", account); + //计算本次要转的矿工费 + BigDecimal feeAmt = minerFee.subtract(ethBalance); + + MessageResult mr = ethService.transferFromWithdrawWallet(account.getAddress(), feeAmt, false,""); + logger.info("transfer fee {},result:{}", feeAmt, mr); + if(mr.getCode() == 0){ + ethBalance = minerFee; + } + } + //同步账户余额 + accountService.updateBalanceAndGas(account.getAddress(), tokenBalance, ethBalance); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/wallet/erc-eusdt/src/main/resources/application.properties b/wallet/erc-eusdt/src/main/resources/application.properties new file mode 100644 index 00000000..04ce38aa --- /dev/null +++ b/wallet/erc-eusdt/src/main/resources/application.properties @@ -0,0 +1,49 @@ +server.port=7004 +#\u5E94\u7528\u540D\u79F0\u540E\u7F00\u9700\u8981\u6539\u6210\u5E01\u79CD\u5355\u4F4D\uFF0C\u5C0F\u5199 +spring.application.name=service-rpc-eusdt +#kafka +# \u6307\u5B9Akafka \u4EE3\u7406\u5730\u5740\uFF0C\u53EF\u4EE5\u591A\u4E2A +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u6BCF\u6B21\u6279\u91CF\u53D1\u9001\u6D88\u606F\u7684\u6570\u91CF +spring.kafka.producer.batch-size= 10 +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdafdsafds@111.111.111.111:27017/wallet +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ + +# \u6CE8\u518C\u65F6\u4F7F\u7528ip\u800C\u4E0D\u662F\u4E3B\u673A\u540D +eureka.instance.prefer-ip-address=true + +#\u5E01\u79CD\u4FE1\u606F\u914D\u7F6E +coin.rpc=http://127.0.0.1:8545 +coin.name=EUSDT +coin.unit=EUSDT +coin.keystore-path=/data/eth/data/keystore +#\u9ED8\u8BA4\u8F6C\u8D26\u6700\u5927Gas,\u9ED8\u8BA4\u503C\u4E3A5\u4E07 +coin.gas-limit=50000 +#\u63D0\u5E01\u94B1\u5305 +coin.withdraw-wallet=UTC--2019-09-11T08-36-14.828000000Z--2b7d8aa02fccbd7bc69368fa30cabe22e3c2c2d.json +#\u63D0\u5E01\u94B1\u5305\u5BC6\u7801 +coin.withdraw-wallet-password= +coin.min-collect-amount=3 +#####\u5408\u7EA6\u914D\u7F6E\u4FE1\u606F##### +#\u5408\u7EA6\u5730\u5740 +#EUSDT +contract.address=0xdac17f958d2ee523a2206206994597c13d831ec7 +#\u5408\u7EA6\u7CBE\u5EA6,\u6839\u636E\u5408\u7EA6decimals\u53C2\u6570\u53D6\u76F8\u5E94\u7684\u5355\u4F4D\u540D\u79F0 +#wei:0,kwei:3,wwei:4,mwei:6,gwei:9,szabo:12,finney:15,ether:18,kether:21,mether:24,gether:27 +contract.decimals=mwei +#\u5408\u7EA6\u8F6C\u8D26GasLimit +contract.gas-limit=50000 +#Etherscan\u4E8B\u4EF6\u65E5\u5FD7(Token\u4E3Aetherscan.io\u4E0A\u7533\u8BF7\u7684apikey) +etherscan.token=BYFVKAANT5JVQPURWJMUAEUFCKGZ56P68 +#topic0\u53EF\u901A\u8FC7\u67E5\u770B\u667A\u80FD\u5408\u7EA6\u627E\u5230\uFF08\u5982\u641C\u7D22Tether\u540E\uFF0C\u70B9\u51FB\u6253\u5F00\u4EFB\u610F\u4E00\u7B14\u4EA4\u6613\uFF0C\u7136\u540E\u5207\u6362Tab\u81F3Event Log) +contract.event-topic0=0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a1128f55a4df523b3ef + +#\u9996\u6B21\u8FD0\u884C\u521D\u59CB\u5316\u9AD8\u5EA6 +watcher.init-block-height=8551979 +#\u533A\u5757\u6B65\u957F +watcher.step=5 +#\u533A\u5757\u786E\u8BA4\u6570 +watcher.confirmation=20 +#\u533A\u5757\u540C\u6B65\u65F6\u95F4\u95F4\u9694 +watcher.interval=20000 diff --git a/wallet/erc-eusdt/src/main/resources/logback-spring.xml b/wallet/erc-eusdt/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..0bd34390 --- /dev/null +++ b/wallet/erc-eusdt/src/main/resources/logback-spring.xml @@ -0,0 +1,41 @@ + + + logback + + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + true + + + /data/logs/eusdt/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log + + + + + %d{yyyy-MM-dd HH:mm:ss} -%msg%n + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + \ No newline at end of file diff --git a/wallet/erc-token/.classpath b/wallet/erc-token/.classpath new file mode 100644 index 00000000..a97cb0eb --- /dev/null +++ b/wallet/erc-token/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/erc-token/.gitignore b/wallet/erc-token/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/erc-token/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/erc-token/.project b/wallet/erc-token/.project new file mode 100644 index 00000000..c11fe39d --- /dev/null +++ b/wallet/erc-token/.project @@ -0,0 +1,34 @@ + + + erc-token + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866793 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/erc-token/.settings/org.eclipse.core.resources.prefs b/wallet/erc-token/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..abdea9ac --- /dev/null +++ b/wallet/erc-token/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/wallet/erc-token/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/erc-token/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/erc-token/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/erc-token/.settings/org.eclipse.jdt.core.prefs b/wallet/erc-token/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/erc-token/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/erc-token/.settings/org.eclipse.m2e.core.prefs b/wallet/erc-token/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/erc-token/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/erc-token/lib/bitcoin-rpc-1.2.0.jar b/wallet/erc-token/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/erc-token/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/erc-token/pom.xml b/wallet/erc-token/pom.xml new file mode 100644 index 00000000..bdf0868b --- /dev/null +++ b/wallet/erc-token/pom.xml @@ -0,0 +1,98 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + ../pom.xml + + 4.0.0 + + com.bizzan.bc.wallet + erc-token + ${parent.version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + org.web3j + core + + + io.reactivex + rxjava + 1.3.4 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + org.projectlombok + lombok + + + com.bizzan.bc.wallet + eth-support + + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java new file mode 100644 index 00000000..f9fb2f5a --- /dev/null +++ b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/ErcTokenApplication.java @@ -0,0 +1,14 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableScheduling +@SpringBootApplication +public class ErcTokenApplication { + + public static void main(String ... args){ + SpringApplication.run(ErcTokenApplication.class,args); + } +} diff --git a/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java new file mode 100644 index 00000000..543ca1db --- /dev/null +++ b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/component/TokenWatcher.java @@ -0,0 +1,243 @@ +package com.bizzan.bc.wallet.component; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EtherscanApi; +import com.bizzan.bc.wallet.util.EthConvert; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.web3j.abi.FunctionReturnDecoder; +import org.web3j.abi.TypeReference; +import org.web3j.abi.datatypes.Address; +import org.web3j.abi.datatypes.Function; +import org.web3j.abi.datatypes.Type; +import org.web3j.abi.datatypes.generated.Uint256; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.DefaultBlockParameterNumber; +import org.web3j.protocol.core.methods.response.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; + +@Component +public class TokenWatcher extends Watcher{ + private Logger logger = LoggerFactory.getLogger(TokenWatcher.class); + @Autowired + private Web3j web3j; + @Autowired + private Contract contract; + @Autowired + private AccountService accountService; + @Autowired(required = false) + private EtherscanApi etherscanApi; + + @Autowired + private DepositEvent depositEvent; + + public List replayBlock(Long startBlockNumber,Long endBlockNumber){ + List deposits = new ArrayList<>(); + for(Long blockHeight = startBlockNumber;blockHeight<=endBlockNumber;blockHeight++) { + EthBlock block = null; + try { + logger.info("ethGetBlockByNumber {}", blockHeight); + block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(blockHeight), true).send(); + } catch (IOException e) { + e.printStackTrace(); + } + List transactionResults = block.getBlock().getTransactions(); + logger.info("replayBlock: Height({}) - Transactions count({})", blockHeight, transactionResults.size()); + for(EthBlock.TransactionResult transactionResult:transactionResults){ + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); +// try { +// 合约执行结果判断,此处暂时注释掉,后面需要确认是否一定需要 +// EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(transaction.getHash()).send(); +// if(receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")){ + +// logger.info("Transaction Detail: Height({}) - {}", blockHeight, transaction.getHash()); + + String input = transaction.getInput(); + String cAddress = transaction.getTo(); + if (StringUtils.isNotEmpty(input) && input.length() >= 138 && contract.getAddress().equalsIgnoreCase(cAddress)) { + logger.info("Transaction is contract: Height({}) - {}", blockHeight, contract.getAddress()); + String data = input.substring(0, 9); + data = data + input.substring(17, input.length()); + Function function = new Function("transfer", Arrays.asList(), Arrays.asList(new TypeReference
() { + }, new TypeReference() { + })); + + List params = FunctionReturnDecoder.decode(data, function.getOutputParameters()); + // 充币地址 + String toAddress = params.get(0).getValue().toString(); + String amount = params.get(1).getValue().toString(); + if(accountService.isAddressExist(toAddress)) { + //当eventTopic0参数不为空时检查event_log结果,防止低版本的token假充值 + if(StringUtils.isNotEmpty(contract.getEventTopic0()) && etherscanApi != null){ + boolean checkEvent = etherscanApi.checkEventLog(blockHeight,contract.getAddress(),contract.getEventTopic0(),transaction.getHash()); + if(!checkEvent) continue; + } + logger.info("Transaction is Deposit: {} ", transaction.getHash()); + // 获取充值信息 + if(StringUtils.isNotEmpty(amount)){ + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(EthConvert.fromWei(amount, contract.getUnit())); + deposit.setAddress(toAddress); + deposit.setTime(Calendar.getInstance().getTime()); + logger.info("receive {} {}",deposit.getAmount(),getCoin().getUnit()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + deposits.add(deposit); + } + } + } +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } + + } + } + return deposits; + } + + /* 旧版:本地全节点模式 + public List replayBlock(Long startBlockNumber,Long endBlockNumber){ + List deposits = new ArrayList<>(); + for(Long blockHeight = startBlockNumber;blockHeight<=endBlockNumber;blockHeight++) { + EthBlock block = null; + try { + logger.info("ethGetBlockByNumber {}", blockHeight); + block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(blockHeight), true).send(); + } catch (IOException e) { + e.printStackTrace(); + } + List transactionResults = block.getBlock().getTransactions(); + logger.info("transactionCount {}", transactionResults.size()); + for(EthBlock.TransactionResult transactionResult:transactionResults){ + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); + try { + logger.info("transaction hash: {}", transaction.getHash()); + EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(transaction.getHash()).send(); + logger.info("transaction hash result: {}", receipt.getTransactionReceipt().isPresent()); + if(receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")){ + //当eventTopic0参数不为空时检查event_log结果,防止低版本的token假充值 + if(StringUtils.isNotEmpty(contract.getEventTopic0()) && etherscanApi != null){ + boolean checkEvent = etherscanApi.checkEventLog(blockHeight,contract.getAddress(),contract.getEventTopic0(),transaction.getHash()); + if(!checkEvent) continue; + } + String input = transaction.getInput(); + String cAddress = transaction.getTo(); + if (StringUtils.isNotEmpty(input) && input.length() >= 138 && contract.getAddress().equalsIgnoreCase(cAddress)) { + String data = input.substring(0, 9); + data = data + input.substring(17, input.length()); + Function function = new Function("transfer", Arrays.asList(), Arrays.asList(new TypeReference
() { + }, new TypeReference() { + })); + + List params = FunctionReturnDecoder.decode(data, function.getOutputParameters()); + // 充币地址 + String toAddress = params.get(0).getValue().toString(); + String amount = params.get(1).getValue().toString(); + if(accountService.isAddressExist(toAddress)) { + if(StringUtils.isNotEmpty(amount)){ + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(EthConvert.fromWei(amount, contract.getUnit())); + deposit.setAddress(toAddress); + deposit.setTime(Calendar.getInstance().getTime()); + logger.info("receive {} {}",deposit.getAmount(),getCoin().getUnit()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + deposits.add(deposit); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + return deposits; + } + */ + public synchronized void replayBlockInit(Long startBlockNumber,Long endBlockNumber){ + for(long i = startBlockNumber;i<=endBlockNumber;i++) { + EthBlock block = null; + try { + logger.info("ethGetBlockByNumber {}", i); + block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(i), true).send(); + } catch (IOException e) { + e.printStackTrace(); + } + List transactionResults = block.getBlock().getTransactions(); + logger.info("transactionCount {}", transactionResults.size()); + transactionResults.forEach(transactionResult -> { + + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); + try { + EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(transaction.getHash()).send(); + if(receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")){ + String input = transaction.getInput(); + String cAddress = transaction.getTo(); + if (StringUtils.isNotEmpty(input) && input.length() >= 138 && contract.getAddress().equalsIgnoreCase(cAddress)) { + String data = input.substring(0, 9); + data = data + input.substring(17, input.length()); + Function function = new Function("transfer", Arrays.asList(), Arrays.asList(new TypeReference
() { + }, new TypeReference() { + })); + + List params = FunctionReturnDecoder.decode(data, function.getOutputParameters()); + // 充币地址 + String toAddress = params.get(0).getValue().toString(); + String amount = params.get(1).getValue().toString(); + logger.info("################{}###################{}",toAddress,amount); + if(accountService.isAddressExist(toAddress)) { + if(StringUtils.isNotEmpty(amount)){ + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(EthConvert.fromWei(amount, contract.getUnit())); + deposit.setAddress(toAddress); + deposit.setTime(Calendar.getInstance().getTime()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + depositEvent.onConfirmed(deposit); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + }); + } + } + + @Override + public Long getNetworkBlockHeight() { + try { + EthBlockNumber blockNumber = web3j.ethBlockNumber().send(); + long networkBlockNumber = blockNumber.getBlockNumber().longValue(); + return networkBlockNumber; + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java new file mode 100644 index 00000000..d8df7cfc --- /dev/null +++ b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/config/RestTemplateConfig.java @@ -0,0 +1,15 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + @Bean + @LoadBalanced + RestTemplate restTemplate() { + return new RestTemplate(); + } +} diff --git a/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..1cab1d90 --- /dev/null +++ b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,185 @@ +package com.bizzan.bc.wallet.controller; + + +import com.bizzan.bc.wallet.component.TokenWatcher; +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.web3j.protocol.core.methods.response.EthBlockNumber; + +import java.math.BigDecimal; +import java.util.List; + +@RequestMapping("/rpc") +@RestController +public class WalletController { + @Autowired + private EthService service; + @Autowired + private AccountService accountService; + @Autowired + private Coin coin; + @Autowired + private Contract contract; + @Autowired + private TokenWatcher watcher; + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("balance") + public MessageResult walletBalance() { + try { + BigDecimal amt = accountService.findBalanceSum(); + MessageResult result = new MessageResult(0, "success"); + result.setData(amt); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("height") + public MessageResult getHeight() { + try { + Long blockNumber = watcher.getCurrentBlockHeight(); + long rpcBlockNumber = blockNumber.longValue(); + MessageResult result = new MessageResult(0, "success"); + result.setData(rpcBlockNumber); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("balance/{address}") + public MessageResult addressBalance(@PathVariable String address) { + try { + BigDecimal amt = service.getTokenBalance(address); + MessageResult result = new MessageResult(0, "success"); + result.setData(amt); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account, @RequestParam(required = false, defaultValue = "") String password) { + logger.info("create new account={},password={}", account, password); + try { + String address; + Account acct = accountService.findByName("ETH",account); + if(acct != null){ + address = acct.getAddress(); + accountService.save(acct); + } + else { + address = service.createNewWallet(account, password); + } + MessageResult result = new MessageResult(0, "success"); + result.setData(address); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "rpc error:" + e.getMessage()); + } + } + + @GetMapping("transfer-from-address") + public MessageResult transferFromAddress(String fromAddress,String address, BigDecimal amount, BigDecimal fee) { + logger.info("transferFromAddress:from={},to={},amount={},fee={}",fromAddress,address, amount, fee); + try { + if (fee == null || fee.compareTo(BigDecimal.ZERO) <= 0) { + fee = service.getMinerFee(contract.getGasLimit()); + } + if(service.getBalance(fromAddress).compareTo(fee) < 0){ + logger.info("地址{}手续费不足,最低为{}ETH",fromAddress,fee); + return MessageResult.error(500,"矿工费不足"); + } + MessageResult result = service.transferToken(fromAddress,address, amount, true); + logger.info("返回结果 : " + result.toString()); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("transfer") + public MessageResult transfer(String address, BigDecimal amount, BigDecimal fee) { + logger.info("transfer:address={},amount={},fee={}", address, amount, fee); + BigDecimal transferredAmount = BigDecimal.ZERO; + try { + if (fee == null || fee.compareTo(BigDecimal.ZERO) <= 0) { + fee = service.getMinerFee(contract.getGasLimit()); + } + List accountList = accountService.findByBalanceAndGas(coin.getMinCollectAmount(),fee); + for(Account account:accountList) { + if(service.getBalance(account.getAddress()).compareTo(fee) < 0){ + logger.info("地址{}手续费不足,最低为{}",account.getAddress(),fee); + continue; + } + BigDecimal availAmt = service.getTokenBalance(account.getAddress()); + if(availAmt.compareTo(coin.getMinCollectAmount()) < 0){ + logger.info("地址{}余额不足,最低为{}",account.getAddress(),coin.getMinCollectAmount()); + continue; + } + logger.info("from={},amount={},fee={}",account.getAddress(),availAmt,fee); + MessageResult result = service.transferToken(account.getAddress(), address, availAmt, true); + if(result.getCode() == 0) { + transferredAmount = transferredAmount.add(availAmt); + } + if(transferredAmount.compareTo(amount) >= 0) break; + } + logger.info("累计转出:{}",transferredAmount); + MessageResult mr = new MessageResult(0,"转账成功"); + mr.setData(transferredAmount); + return mr; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("withdraw") + public MessageResult withdraw(String address, BigDecimal amount, + @RequestParam(name = "sync",required = false,defaultValue = "true") Boolean sync, + @RequestParam(name = "withdrawId",required = false,defaultValue = "") String withdrawId) { + logger.info("withdraw:to={},amount={},sync={},withdrawId={}", address, amount, sync,withdrawId); + try { + MessageResult result = service.transferTokenFromWithdrawWallet(address, amount, sync,withdrawId); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("sync-block") + public MessageResult manualSync(Long startBlock, Long endBlock) { + try { + watcher.replayBlockInit(startBlock,endBlock); + return MessageResult.success(); + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "同步失败:" + e.getMessage()); + } + } + + @GetMapping("sync-height") + public MessageResult getCurrentSyncHeight(){ + MessageResult result = MessageResult.success(); + result.setData(watcher.getCurrentBlockHeight()); + return result; + } +} diff --git a/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java new file mode 100644 index 00000000..b0cb9fb8 --- /dev/null +++ b/wallet/erc-token/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java @@ -0,0 +1,70 @@ +package com.bizzan.bc.wallet.job; + + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; +import com.bizzan.bc.wallet.util.AccountReplay; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Component +public class CoinCollectJob { + private Logger logger = LoggerFactory.getLogger(CoinCollectJob.class); + @Autowired + private AccountService accountService; + @Autowired + private EthService ethService; + @Autowired + private Coin coin; + @Autowired + private Contract contract; + + /** + * 为用户地址充值矿工费(每三天执行一次) + */ +// @Scheduled(cron = "0 0 */1 * * *") + @Scheduled(cron = "0 0 0 1/3 * *") + public void rechargeMinerFee(){ + try { + AccountReplay accountReplay = new AccountReplay(accountService, 100); + BigDecimal minerFee = ethService.getMinerFee(contract.getGasLimit()); + + accountReplay.run(account -> { + try { + BigDecimal ethBalance = ethService.getBalance(account.getAddress()); + BigDecimal tokenBalance = ethService.getTokenBalance(account.getAddress()); + //给满足条件的地址充矿工费,条件1:eth额度小于minerFee,条件2:balance大于等于minCollectAmount + if (ethBalance.compareTo(minerFee) < 0 + && tokenBalance.compareTo(coin.getMinCollectAmount()) >= 0) { + logger.info("process account:{}", account); + //计算本次要转的矿工费 + BigDecimal feeAmt = minerFee.subtract(ethBalance); + + MessageResult mr = ethService.transferFromWithdrawWallet(account.getAddress(), feeAmt, false,""); + logger.info("transfer fee {},result:{}", feeAmt, mr); + if(mr.getCode() == 0){ + ethBalance = minerFee; + } + } + //同步账户余额 + accountService.updateBalanceAndGas(account.getAddress(), tokenBalance, ethBalance); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/wallet/erc-token/src/main/resources/application.properties b/wallet/erc-token/src/main/resources/application.properties new file mode 100644 index 00000000..3738e4d7 --- /dev/null +++ b/wallet/erc-token/src/main/resources/application.properties @@ -0,0 +1,49 @@ +server.port=7004 +#\u5E94\u7528\u540D\u79F0\u540E\u7F00\u9700\u8981\u6539\u6210\u5E01\u79CD\u5355\u4F4D\uFF0C\u5C0F\u5199 +spring.application.name=service-rpc-eusdt +#kafka +# \u6307\u5B9Akafka \u4EE3\u7406\u5730\u5740\uFF0C\u53EF\u4EE5\u591A\u4E2A +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u6BCF\u6B21\u6279\u91CF\u53D1\u9001\u6D88\u606F\u7684\u6570\u91CF +spring.kafka.producer.batch-size= 10 +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdafdsafds@111.111.111.111:27017/wallet +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ + +# \u6CE8\u518C\u65F6\u4F7F\u7528ip\u800C\u4E0D\u662F\u4E3B\u673A\u540D +eureka.instance.prefer-ip-address=true + +#\u5E01\u79CD\u4FE1\u606F\u914D\u7F6E +coin.rpc=http://127.0.0.1:8545 +coin.name=EUSDT +coin.unit=EUSDT +coin.keystore-path=/data/eth/data/keystore +#\u9ED8\u8BA4\u8F6C\u8D26\u6700\u5927Gas,\u9ED8\u8BA4\u503C\u4E3A5\u4E07 +coin.gas-limit=50000 +#\u63D0\u5E01\u94B1\u5305 +coin.withdraw-wallet=UTC--2019-08-13T06-24-07.378035684Z--67288142662b13d18f474664c039acc7b5610b7 +#\u63D0\u5E01\u94B1\u5305\u5BC6\u7801 +coin.withdraw-wallet-password=shaoxianjun95 +coin.min-collect-amount=10 +#####\u5408\u7EA6\u914D\u7F6E\u4FE1\u606F##### +#\u5408\u7EA6\u5730\u5740 +#HTL +contract.address=0xdac17f958d2ee5232206206994597c13d831ec7 +#\u5408\u7EA6\u7CBE\u5EA6,\u6839\u636E\u5408\u7EA6decimals\u53C2\u6570\u53D6\u76F8\u5E94\u7684\u5355\u4F4D\u540D\u79F0 +#wei:0,kwei:3,wwei:4,mwei:6,gwei:9,szabo:12,finney:15,ether:18,kether:21,mether:24,gether:27 +contract.decimals=mwei +#\u5408\u7EA6\u8F6C\u8D26GasLimit +contract.gas-limit=50000 +#Etherscan\u4E8B\u4EF6\u65E5\u5FD7(Token\u4E3Aetherscan.io\u4E0A\u7533\u8BF7\u7684apikey) +etherscan.token=BYFVKAANT5JVQPURWJMUAUFCKGZ5W6P68 +#topic0\u53EF\u901A\u8FC7\u67E5\u770B\u667A\u80FD\u5408\u7EA6\u627E\u5230\uFF08\u5982\u641C\u7D22Tether\u540E\uFF0C\u70B9\u51FB\u6253\u5F00\u4EFB\u610F\u4E00\u7B14\u4EA4\u6613\uFF0C\u7136\u540E\u5207\u6362Tab\u81F3Event Log) +contract.event-topic0=0xddf252ad1be2c89b69c2b068fc378daa952b7f163c4a11628f55a4df523b3ef + +#\u9996\u6B21\u8FD0\u884C\u521D\u59CB\u5316\u9AD8\u5EA6 +watcher.init-block-height=8347300 +#\u533A\u5757\u6B65\u957F +watcher.step=10 +#\u533A\u5757\u786E\u8BA4\u6570 +watcher.confirmation=20 +#\u533A\u5757\u540C\u6B65\u65F6\u95F4\u95F4\u9694 +watcher.interval=20000 diff --git a/wallet/erc-token/src/main/resources/logback-spring.xml b/wallet/erc-token/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..0bd34390 --- /dev/null +++ b/wallet/erc-token/src/main/resources/logback-spring.xml @@ -0,0 +1,41 @@ + + + logback + + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + true + + + /data/logs/eusdt/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log + + + + + %d{yyyy-MM-dd HH:mm:ss} -%msg%n + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + \ No newline at end of file diff --git a/wallet/eth-support/.classpath b/wallet/eth-support/.classpath new file mode 100644 index 00000000..a8965644 --- /dev/null +++ b/wallet/eth-support/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/eth-support/.gitignore b/wallet/eth-support/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/eth-support/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/eth-support/.project b/wallet/eth-support/.project new file mode 100644 index 00000000..14ca896b --- /dev/null +++ b/wallet/eth-support/.project @@ -0,0 +1,34 @@ + + + eth-support + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866794 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/eth-support/.settings/org.eclipse.core.resources.prefs b/wallet/eth-support/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e9441bb1 --- /dev/null +++ b/wallet/eth-support/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/eth-support/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/eth-support/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/eth-support/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/eth-support/.settings/org.eclipse.jdt.core.prefs b/wallet/eth-support/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/eth-support/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/eth-support/.settings/org.eclipse.m2e.core.prefs b/wallet/eth-support/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/eth-support/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/eth-support/lib/bitcoin-rpc-1.2.0.jar b/wallet/eth-support/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/eth-support/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/eth-support/pom.xml b/wallet/eth-support/pom.xml new file mode 100644 index 00000000..e9edcb3c --- /dev/null +++ b/wallet/eth-support/pom.xml @@ -0,0 +1,52 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + + com.bizzan.bc.wallet + eth-support + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + org.springframework.boot + spring-boot-starter + + + com.bizzan.bc.wallet + rpc-common + 1.2 + + + org.web3j + core + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.mashape.unirest + unirest-java + 1.4.9 + + + \ No newline at end of file diff --git a/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java new file mode 100644 index 00000000..5c7f8cfd --- /dev/null +++ b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/config/EthConfig.java @@ -0,0 +1,51 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.service.EtherscanApi; +import com.googlecode.jsonrpc4j.JsonRpcHttpClient; + +import okhttp3.OkHttpClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.http.HttpService; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +@Configuration +public class EthConfig { + @Bean + @ConditionalOnProperty(name = "coin.keystore-path") + public Web3j web3j(Coin coin) { + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.connectTimeout(30*1000, TimeUnit.MILLISECONDS); + builder.writeTimeout(30*1000, TimeUnit.MILLISECONDS); + builder.readTimeout(30*1000, TimeUnit.MILLISECONDS); + OkHttpClient httpClient = builder.build(); + Web3j web3j = Web3j.build(new HttpService(coin.getRpc(),httpClient,false)); + return web3j; + } + + @Bean + @ConfigurationProperties(prefix = "etherscan") + public EtherscanApi etherscanApi(){ + EtherscanApi api = new EtherscanApi(); + return api; + } + + @Bean + public JsonRpcHttpClient jsonrpcClient(Coin coin) throws MalformedURLException { + System.out.println("init jsonRpcClient"); + JsonRpcHttpClient jsonrpcClient = new JsonRpcHttpClient(new URL(coin.getRpc())); + Map headers = new HashMap<>(); + headers.put("Content-Type", "application/json"); + jsonrpcClient.setHeaders(headers); + return jsonrpcClient; + } +} diff --git a/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java new file mode 100644 index 00000000..48db7f4b --- /dev/null +++ b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/entity/Payment.java @@ -0,0 +1,79 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Builder; +import org.web3j.crypto.Credentials; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Builder +public class Payment { + private String txBizNumber; + private String txid; + private Credentials credentials; + private String to; + private BigDecimal amount; + private String unit; + private BigInteger gasLimit; + private BigInteger gasPrice; + + public String getTxid() { + return txid; + } + + public void setTxid(String txid) { + this.txid = txid; + } + + public Credentials getCredentials() { + return credentials; + } + + public void setCredentials(Credentials credentials) { + this.credentials = credentials; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public BigInteger getGasLimit() { + return gasLimit; + } + + public void setGasLimit(BigInteger gasLimit) { + this.gasLimit = gasLimit; + } + + public BigInteger getGasPrice() { + return gasPrice; + } + + public void setGasPrice(BigInteger gasPrice) { + this.gasPrice = gasPrice; + } + + public String getTxBizNumber(){ + return txBizNumber; + } +} diff --git a/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java new file mode 100644 index 00000000..78ef3ddb --- /dev/null +++ b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/service/EthService.java @@ -0,0 +1,233 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Contract; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.EthConvert; +import com.bizzan.bc.wallet.util.MessageResult; +import com.googlecode.jsonrpc4j.JsonRpcHttpClient; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.web3j.abi.FunctionEncoder; +import org.web3j.abi.TypeReference; +import org.web3j.abi.datatypes.Function; +import org.web3j.crypto.*; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.DefaultBlockParameterName; +import org.web3j.protocol.core.methods.response.*; +import org.web3j.utils.Convert; +import org.web3j.utils.Numeric; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.security.InvalidAlgorithmParameterException; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.util.*; + + +@Component +public class EthService { + private Logger logger = LoggerFactory.getLogger(EthService.class); + @Autowired + private Coin coin; + @Autowired + private Web3j web3j; + @Autowired + private PaymentHandler paymentHandler; + @Autowired + private AccountService accountService; + @Autowired + private JsonRpcHttpClient jsonrpcClient; + @Autowired(required = false) + private Contract contract; + + public String createNewWallet(String account, String password) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException, CipherException, IOException, CipherException { + logger.info("====> Generate new wallet file for ETH."); + String fileName = WalletUtils.generateNewWalletFile(password, new File(coin.getKeystorePath()), true); + Credentials credentials = WalletUtils.loadCredentials(password, coin.getKeystorePath() + "/" + fileName); + String address = credentials.getAddress(); + accountService.saveOne(account, fileName, address); + return address; + } + + + /** + * 同步余额 + * + * @param address + * @throws IOException + */ + public void syncAddressBalance(String address) throws IOException { + BigDecimal balance = getBalance(address); + accountService.updateBalance(address, balance); + } + + + public MessageResult transferFromWithdrawWallet(String toAddress, BigDecimal amount, boolean sync, String withdrawId) { + return transfer(coin.getKeystorePath() + "/" + coin.getWithdrawWallet(), coin.getWithdrawWalletPassword(), toAddress, amount, sync,withdrawId); + } + + public MessageResult transfer(String walletFile, String password, String toAddress, BigDecimal amount,boolean sync,String withdrawId) { + Credentials credentials; + try { + credentials = WalletUtils.loadCredentials(password, walletFile); + } catch (IOException e) { + e.printStackTrace(); + return new MessageResult(500, "钱包文件不存在"); + } catch (CipherException e) { + e.printStackTrace(); + return new MessageResult(500, "解密失败,密码不正确"); + } + if(sync) { + return paymentHandler.transferEth(credentials, toAddress, amount); + } + else{ + paymentHandler.transferEthAsync(credentials, toAddress, amount,withdrawId); + return new MessageResult(0,"提交成功"); + } + } + + public BigDecimal getBalance(String address) throws IOException { + EthGetBalance getBalance = web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST).send(); + return Convert.fromWei(getBalance.getBalance().toString(), Convert.Unit.ETHER); + } + + public BigInteger getGasPrice() throws IOException { + EthGasPrice gasPrice = web3j.ethGasPrice().send(); + BigInteger baseGasPrice = gasPrice.getGasPrice(); + return new BigDecimal(baseGasPrice).multiply(coin.getGasSpeedUp()).toBigInteger(); + } + + public MessageResult transferFromWallet(String address, BigDecimal amount, BigDecimal fee, BigDecimal minAmount) { + logger.info("transferFromWallet 方法"); + List accounts = accountService.findByBalance(minAmount); + if (accounts == null || accounts.size() == 0) { + MessageResult messageResult = new MessageResult(500, "没有满足条件的转账账户(大于0.1)!"); + logger.info(messageResult.toString()); + return messageResult; + } + BigDecimal transferredAmount = BigDecimal.ZERO; + for (Account account : accounts) { + BigDecimal realAmount = account.getBalance().subtract(fee); + if (realAmount.compareTo(amount.subtract(transferredAmount)) > 0) { + realAmount = amount.subtract(transferredAmount); + } + MessageResult result = transfer(coin.getKeystorePath() + "/" + account.getWalletFile(), "", address, realAmount, true,""); + if (result.getCode() == 0 && result.getData() != null) { + logger.info("transfer address={},amount={},txid={}", account.getAddress(), realAmount, result.getData()); + transferredAmount = transferredAmount.add(realAmount); + try { + syncAddressBalance(account.getAddress()); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (transferredAmount.compareTo(amount) >= 0) { + break; + } + } + MessageResult result = new MessageResult(0, "success"); + result.setData(transferredAmount); + return result; + } + + public MessageResult transferToken(String fromAddress, String toAddress, BigDecimal amount, boolean sync) { + Account account = accountService.findByAddress(fromAddress); + Credentials credentials; + try { + credentials = WalletUtils.loadCredentials("", coin.getKeystorePath() + "/" + account.getWalletFile()); + } catch (IOException e) { + e.printStackTrace(); + return new MessageResult(500, "私钥文件不存在"); + } catch (CipherException e) { + e.printStackTrace(); + return new MessageResult(500, "解密失败,密码不正确"); + } + if(sync) { + return paymentHandler.transferToken(credentials, toAddress, amount); + } + else{ + paymentHandler.transferTokenAsync(credentials, toAddress, amount,""); + return new MessageResult(0,"提交成功"); + } + } + + public MessageResult transferTokenFromWithdrawWallet(String toAddress, BigDecimal amount, boolean sync,String withdrawId) { + Credentials credentials; + try { + //解锁提币钱包 + credentials = WalletUtils.loadCredentials(coin.getWithdrawWalletPassword(), coin.getKeystorePath() + "/" + coin.getWithdrawWallet()); + } catch (IOException e) { + e.printStackTrace(); + return new MessageResult(500, "私钥文件不存在"); + } catch (CipherException e) { + e.printStackTrace(); + return new MessageResult(500, "解密失败,密码不正确"); + } + if(sync) { + return paymentHandler.transferToken(credentials, toAddress, amount); + } + else{ + paymentHandler.transferTokenAsync(credentials, toAddress, amount, withdrawId); + return new MessageResult(0,"提交成功"); + } + } + + + public BigDecimal getTokenBalance(String address) throws IOException { + BigInteger balance = BigInteger.ZERO; + Function fn = new Function("balanceOf", Arrays.asList(new org.web3j.abi.datatypes.Address(address)), Collections.>emptyList()); + String data = FunctionEncoder.encode(fn); + Map map = new HashMap(); + map.put("to", contract.getAddress()); + map.put("data", data); + try { + String methodName = "eth_call"; + Object[] params = new Object[]{map, "latest"}; + String result = jsonrpcClient.invoke(methodName, params, Object.class).toString(); + if (StringUtils.isNotEmpty(result)) { + if ("0x".equalsIgnoreCase(result) || result.length() == 2) { + result = "0x0"; + } + balance = Numeric.decodeQuantity(result); + } + } catch (Throwable e) { + e.printStackTrace(); + logger.info("查询接口ERROR"); + } + return EthConvert.fromWei(new BigDecimal(balance), contract.getUnit()); + } + + public BigDecimal getMinerFee(BigInteger gasLimit) throws IOException { + BigDecimal fee = new BigDecimal(getGasPrice().multiply(gasLimit)); + return Convert.fromWei(fee, Convert.Unit.ETHER); + } + + public Boolean isTransactionSuccess(String txid) throws IOException { + EthTransaction transaction = web3j.ethGetTransactionByHash(txid).send(); + try { + if (transaction != null && transaction.getTransaction().get() != null) { + Transaction tx = transaction.getTransaction().get(); + if (!tx.getBlockHash().equalsIgnoreCase("0x0000000000000000000000000000000000000000000000000000000000000000")) { + EthGetTransactionReceipt receipt = web3j.ethGetTransactionReceipt(txid).send(); + if (receipt != null && receipt.getTransactionReceipt().get().getStatus().equalsIgnoreCase("0x1")) { + return true; + } + } + } + } + catch (Exception e){ + e.printStackTrace(); + return false; + } + return false; + } +} diff --git a/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java new file mode 100644 index 00000000..224c804e --- /dev/null +++ b/wallet/eth-support/src/main/java/com/bizzan/bc/wallet/service/EtherscanApi.java @@ -0,0 +1,72 @@ +package com.bizzan.bc.wallet.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.mashape.unirest.http.HttpResponse; +import com.mashape.unirest.http.Unirest; +import com.mashape.unirest.http.exceptions.UnirestException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class EtherscanApi { + private Logger logger = LoggerFactory.getLogger(EtherscanApi.class); + private String token; + + public void sendRawTransaction(String hexValue){ + try { + HttpResponse response = Unirest.post("https://api.etherscan.io/api") + .field("module","proxy") + .field("action","eth_sendRawTransaction") + .field("hex",hexValue) + .field("apikey",token) + .asString(); + logger.info("sendRawTransaction result = {}",response.getBody()); + } catch (UnirestException e) { + e.printStackTrace(); + } + } + + + public boolean checkEventLog(final Long blockHeight,String address,String topic0,String txid){ + try { + HttpResponse response = Unirest.post("https://api.etherscan.io/api") + .field("module", "logs") + .field("action", "getLogs") + .field("fromBlock", blockHeight) + .field("toBlock",blockHeight) + .field("address",address) + .field("topic0",topic0) + .field("apikey", token) + .asString(); + logger.info("getLogs result = {}",response.getBody()); + JSONObject result = JSON.parseObject(response.getBody()); + if(result.getInteger("status")==0){ + return false; + } + else{ + JSONArray txs = result.getJSONArray("result"); + for(int i=0;i kafkaTemplate; + @Autowired(required = false) + private EtherscanApi etherscanApi; + private Payment current; + private LinkedList tasks = new LinkedList<>(); + private int checkTimes = 0; + private int maxCheckTimes = 100; + + public void transferTokenAsync(Credentials credentials, String to, BigDecimal amount,String withdrawId){ + Payment payment = Payment.builder() + .credentials(credentials) + .amount(amount) + .to(to) + .txBizNumber(withdrawId) + .unit(coin.getUnit()) + .build(); + synchronized (tasks) { + tasks.addLast(payment); + } + } + + public void notify(Payment payment,int status){ + JSONObject json = new JSONObject(); + json.put("withdrawId",payment.getTxBizNumber()); + json.put("txid",payment.getTxid()); + json.put("status",status); + kafkaTemplate.send("withdraw-notify",coin.getName(), JSON.toJSONString(json)); + } + + public void transferEthAsync(Credentials credentials, String to, BigDecimal amount,String withdrawId){ + Payment payment = Payment.builder() + .credentials(credentials) + .amount(amount) + .to(to) + .txBizNumber(withdrawId) + .unit("ETH") + .build(); + synchronized (tasks) { + tasks.addLast(payment); + } + } + + public MessageResult transferEth(Credentials credentials, String to, BigDecimal amount) { + Payment payment = Payment.builder() + .credentials(credentials) + .amount(amount) + .to(to) + .unit("ETH") + .build(); + return transferEth(payment); + } + + public MessageResult transferEth(Payment payment) { + try { + EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(payment.getCredentials().getAddress(), DefaultBlockParameterName.LATEST) + .sendAsync() + .get(); + + BigInteger nonce = ethGetTransactionCount.getTransactionCount(); + BigInteger gasPrice = ethService.getGasPrice(); + BigInteger value = Convert.toWei(payment.getAmount(), Convert.Unit.ETHER).toBigInteger(); + + BigInteger maxGas = coin.getGasLimit(); + logger.info("value={},gasPrice={},gasLimit={},nonce={},address={}", value, gasPrice, maxGas, nonce, payment.getTo()); + RawTransaction rawTransaction = RawTransaction.createEtherTransaction( + nonce, gasPrice, maxGas, payment.getTo(), value); + + byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, payment.getCredentials()); + String hexValue = Numeric.toHexString(signedMessage); + EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get(); + String transactionHash = ethSendTransaction.getTransactionHash(); + logger.info("txid = {}", transactionHash); + if (StringUtils.isEmpty(transactionHash)) { + return new MessageResult(500, "发送交易失败"); + } + else { + if(etherscanApi != null){ + logger.info("=====发送Etherscan广播交易======"); + etherscanApi.sendRawTransaction(hexValue); + } + MessageResult mr = new MessageResult(0, "success"); + mr.setData(transactionHash); + return mr; + } + } catch (Exception e) { + e.printStackTrace(); + return new MessageResult(500, "交易失败,error:" + e.getMessage()); + } + } + + public MessageResult transferToken(Payment payment){ + try { + EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(payment.getCredentials().getAddress(), DefaultBlockParameterName.LATEST) + .sendAsync() + .get(); + BigInteger nonce = ethGetTransactionCount.getTransactionCount(); + BigInteger gasPrice = ethService.getGasPrice(); + BigInteger value = EthConvert.toWei(payment.getAmount(), contract.getUnit()).toBigInteger(); + Function fn = new Function("transfer", Arrays.asList(new Address(payment.getTo()), new Uint256(value)), Collections.> emptyList()); + String data = FunctionEncoder.encode(fn); + BigInteger maxGas = contract.getGasLimit(); + logger.info("from={},value={},gasPrice={},gasLimit={},nonce={},address={}",payment.getCredentials().getAddress(), value, gasPrice, maxGas, nonce,payment.getTo()); + RawTransaction rawTransaction = RawTransaction.createTransaction( + nonce, gasPrice, maxGas, contract.getAddress(), data); + byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, payment.getCredentials()); + String hexValue = Numeric.toHexString(signedMessage); + logger.info("hexRawValue={}",hexValue); + EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get(); + String transactionHash = ethSendTransaction.getTransactionHash(); + logger.info("txid:" + transactionHash); + if (StringUtils.isEmpty(transactionHash)) { + return new MessageResult(500, "发送交易失败"); + } + else { + if(etherscanApi != null){ + logger.info("=====发送Etherscan广播交易======"); + etherscanApi.sendRawTransaction(hexValue); + } + payment.setTxid(transactionHash); + MessageResult mr = new MessageResult(0, "success"); + mr.setData(transactionHash); + return mr; + } + } catch (Exception e) { + e.printStackTrace(); + return new MessageResult(500, "交易失败,error:" + e.getMessage()); + } + } + + public MessageResult transferToken(Credentials credentials, String to, BigDecimal amount) { + Payment payment = Payment.builder() + .credentials(credentials) + .amount(amount) + .to(to) + .unit(coin.getUnit()) + .build(); + return transferToken(payment); + } + + /** + * 检查当前任务是否支付完成 + */ + @Scheduled(cron = "0/30 * * * * *") + public synchronized void checkJob(){ + logger.info("检查付款任务状态"); +// && StringUtils.isNotEmpty(current.getTxid()) + if (current != null ) { + synchronized (current) { + try { + checkTimes ++; + if (ethService.isTransactionSuccess(current.getTxid())) { + logger.info("转账{}已成功,检查次数:{}", JSON.toJSON(current),checkTimes); + notify(current,1); + current = null; + } + else{ + logger.info("转账{}未成功,检查次数:{}", JSON.toJSON(current),checkTimes); + if(checkTimes > maxCheckTimes){ + //超时未成功 + notify(current,0); + current = null; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + else{ + logger.info("无待确认的任务"); + } + } + + public MessageResult transfer(Payment payment){ + if(payment.getUnit().equalsIgnoreCase("ETH")){ + return transferEth(payment); + } + else{ + return transferToken(payment); + } + } + + @Scheduled(cron = "0/30 * * * * *") + public synchronized void doJob(){ + synchronized (tasks) { + logger.info("开始执行付款任务,当前队列长度{}",tasks.size()); + if (current == null && tasks.size() > 0) { + logger.info("开始执行付款任务:current---"+JSONObject.toJSONString(current)); + Payment payment = tasks.getFirst(); + MessageResult result = transfer(payment); + if (result.getCode() == 0) { + logger.info("------txID:"+result.getData().toString()); + payment.setTxid(result.getData().toString()); + tasks.removeFirst(); + current = payment; + checkTimes = 0; + } + } + } + } +} diff --git a/wallet/eth/.classpath b/wallet/eth/.classpath new file mode 100644 index 00000000..a97cb0eb --- /dev/null +++ b/wallet/eth/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/eth/.gitignore b/wallet/eth/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/eth/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/eth/.project b/wallet/eth/.project new file mode 100644 index 00000000..2f7f6b2d --- /dev/null +++ b/wallet/eth/.project @@ -0,0 +1,34 @@ + + + eth + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866794 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/eth/.settings/org.eclipse.core.resources.prefs b/wallet/eth/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/eth/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/eth/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/eth/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/eth/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/eth/.settings/org.eclipse.jdt.core.prefs b/wallet/eth/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/eth/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/eth/.settings/org.eclipse.m2e.core.prefs b/wallet/eth/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/eth/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/eth/lib/bitcoin-rpc-1.2.0.jar b/wallet/eth/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/eth/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/eth/pom.xml b/wallet/eth/pom.xml new file mode 100644 index 00000000..6abc467c --- /dev/null +++ b/wallet/eth/pom.xml @@ -0,0 +1,96 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + eth + ${project-version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + org.web3j + core + + + io.reactivex + rxjava + 1.3.4 + + + com.bizzan.bc.wallet + eth-support + 1.2 + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/wallet/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java b/wallet/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java new file mode 100644 index 00000000..73a05cc8 --- /dev/null +++ b/wallet/eth/src/main/java/com/bizzan/bc/wallet/WalletApplication.java @@ -0,0 +1,15 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableEurekaClient +@SpringBootApplication +@EnableScheduling +public class WalletApplication { + public static void main(String[] args){ + SpringApplication.run(WalletApplication.class,args); + } +} diff --git a/wallet/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java b/wallet/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java new file mode 100644 index 00000000..facf3f18 --- /dev/null +++ b/wallet/eth/src/main/java/com/bizzan/bc/wallet/component/EthWatcher.java @@ -0,0 +1,136 @@ +package com.bizzan.bc.wallet.component; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.DefaultBlockParameterNumber; +import org.web3j.protocol.core.methods.response.EthBlock; +import org.web3j.protocol.core.methods.response.EthBlockNumber; +import org.web3j.protocol.core.methods.response.Transaction; +import org.web3j.utils.Convert; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Component +public class EthWatcher extends Watcher{ + private Logger logger = LoggerFactory.getLogger(EthWatcher.class); + @Autowired + private Web3j web3j; + @Autowired + private EthService ethService; + @Autowired + private AccountService accountService; + + @Autowired + private DepositEvent depositEvent; + + @Override + public List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList<>(); + try { + for (Long i = startBlockNumber; i <= endBlockNumber; i++) { + EthBlock block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(i), true).send(); + + block.getBlock().getTransactions().stream().forEach(transactionResult -> { + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); + if (StringUtils.isNotEmpty(transaction.getTo()) + && accountService.isAddressExist(transaction.getTo()) + && !transaction.getFrom().equalsIgnoreCase(getCoin().getIgnoreFromAddress())) { + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(Convert.fromWei(transaction.getValue().toString(), Convert.Unit.ETHER)); + deposit.setAddress(transaction.getTo()); + deposits.add(deposit); + logger.info("received coin {} at height {}", transaction.getValue(), transaction.getBlockNumber()); + //同步余额 + try { + ethService.syncAddressBalance(deposit.getAddress()); + } catch (Exception e) { + e.printStackTrace(); + } + } + //如果是地址簿里转出去的地址,需要同步余额 + if (StringUtils.isNotEmpty(transaction.getTo()) && accountService.isAddressExist(transaction.getFrom())) { + logger.info("sync address:{} balance", transaction.getFrom()); + try { + ethService.syncAddressBalance(transaction.getFrom()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + } + catch (Exception e){ + e.printStackTrace(); + } + return deposits; + } + + + public synchronized int replayBlockInit(Long startBlockNumber,Long endBlockNumber) throws IOException { + int count = 0; + for(Long i=startBlockNumber;i <= endBlockNumber;i++){ + EthBlock block = web3j.ethGetBlockByNumber(new DefaultBlockParameterNumber(i),true).send(); + + block.getBlock().getTransactions().stream().forEach(transactionResult -> { + EthBlock.TransactionObject transactionObject = (EthBlock.TransactionObject) transactionResult; + Transaction transaction = transactionObject.get(); + if(StringUtils.isNotEmpty(transaction.getTo()) + && accountService.isAddressExist(transaction.getTo()) + && !transaction.getFrom().equalsIgnoreCase(getCoin().getIgnoreFromAddress())) { + Deposit deposit = new Deposit(); + deposit.setTxid(transaction.getHash()); + deposit.setBlockHeight(transaction.getBlockNumber().longValue()); + deposit.setBlockHash(transaction.getBlockHash()); + deposit.setAmount(Convert.fromWei(transaction.getValue().toString(), Convert.Unit.ETHER)); + deposit.setAddress(transaction.getTo()); + logger.info("received coin {} at height {}",transaction.getValue(),transaction.getBlockNumber()); + depositEvent.onConfirmed(deposit); + //同步余额 + try { + ethService.syncAddressBalance(deposit.getAddress()); + } + catch (Exception e){ + e.printStackTrace(); + } + } + //如果是地址簿里转出去的地址,需要同步余额 + if(StringUtils.isNotEmpty(transaction.getTo()) && accountService.isAddressExist(transaction.getFrom())) { + logger.info("sync address:{} balance",transaction.getFrom()); + try { + ethService.syncAddressBalance(transaction.getFrom()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return count; + } + + @Override + public Long getNetworkBlockHeight() { + try { + EthBlockNumber blockNumber = web3j.ethBlockNumber().send(); + return blockNumber.getBlockNumber().longValue(); + }catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..e723c592 --- /dev/null +++ b/wallet/eth/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,169 @@ +package com.bizzan.bc.wallet.controller; + +import com.bizzan.bc.wallet.component.EthWatcher; +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.methods.response.EthBlockNumber; +import org.web3j.protocol.core.methods.response.EthGasPrice; +import org.web3j.protocol.core.methods.response.EthTransaction; +import org.web3j.utils.Convert; + +import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + private Logger logger = LoggerFactory.getLogger(WalletController.class); + @Autowired + private EthService service; + @Autowired + private Web3j web3j; + @Autowired + private EthWatcher watcher; + @Autowired + private Coin coin; + @Autowired + private AccountService accountService; + + @GetMapping("height") + public MessageResult getHeight() { + try { + EthBlockNumber blockNumber = web3j.ethBlockNumber().send(); + long rpcBlockNumber = blockNumber.getBlockNumber().longValue(); + MessageResult result = new MessageResult(0, "success"); + result.setData(rpcBlockNumber); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account, @RequestParam(required = false, defaultValue = "") String password) { + logger.info("create new account={},password={}", account, password); + try { + String address = service.createNewWallet(account, password); + MessageResult result = new MessageResult(0, "success"); + result.setData(address); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "rpc error:" + e.getMessage()); + } + } + + @GetMapping("transfer") + public MessageResult transfer(String address, BigDecimal amount, BigDecimal fee) { + logger.info("transfer:address={},amount={},fee={}", address, amount, fee); + try { + if (fee == null || fee.compareTo(BigDecimal.ZERO) <= 0) { + fee = service.getMinerFee(coin.getGasLimit()); + } + MessageResult result = service.transferFromWallet(address, amount, fee, coin.getMinCollectAmount()); + logger.info("返回结果 : " + result.toString()); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + @GetMapping("withdraw") + public MessageResult withdraw(String address, BigDecimal amount, + @RequestParam(name = "sync",required = false,defaultValue = "true") Boolean sync, + @RequestParam(name = "withdrawId",required = false,defaultValue = "") String withdrawId) { + logger.info("withdraw:to={},amount={},sync={},withdrawId={}", address, amount, sync,withdrawId); + try { + MessageResult result = service.transferFromWithdrawWallet(address, amount,sync,withdrawId); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "error:" + e.getMessage()); + } + } + + /** + * 获取热钱包总额 + * + * @return + */ + @GetMapping("balance") + public MessageResult balance() { + try { + BigDecimal balance = accountService.findBalanceSum(); + MessageResult result = new MessageResult(0, "success"); + result.setData(balance); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + + /** + * 获取单个地址余额 + * + * @param address + * @return + */ + @GetMapping("balance/{address}") + public MessageResult addressBalance(@PathVariable String address) { + try { + BigDecimal balance = service.getBalance(address); + MessageResult result = new MessageResult(0, "success"); + result.setData(balance); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("transaction/{txid}") + public MessageResult transaction(@PathVariable String txid) throws IOException { + EthTransaction transaction = web3j.ethGetTransactionByHash(txid).send(); + EthGasPrice gasPrice = web3j.ethGasPrice().send(); + + System.out.println(gasPrice.getGasPrice()); + System.out.println(transaction.getRawResponse()); + return MessageResult.success(""); + } + + @GetMapping("gas-price") + public MessageResult gasPrice() throws IOException { + try { + BigInteger gasPrice = service.getGasPrice(); + MessageResult result = new MessageResult(0, "success"); + result.setData(Convert.fromWei(gasPrice.toString(), Convert.Unit.GWEI)); + return result; + } catch (Exception e) { + e.printStackTrace(); + return MessageResult.error(500, "查询失败,error:" + e.getMessage()); + } + } + + @GetMapping("sync-block") + public MessageResult manualSync(Long startBlock, Long endBlock) { + try { + watcher.replayBlockInit(startBlock, endBlock); + } catch (IOException e) { + e.printStackTrace(); + return MessageResult.error(500, "同步失败:" + e.getMessage()); + } + return MessageResult.success(); + } +} diff --git a/wallet/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java new file mode 100644 index 00000000..6fa13212 --- /dev/null +++ b/wallet/eth/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java @@ -0,0 +1,44 @@ +package com.bizzan.bc.wallet.job; + + +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.EthService; +import com.bizzan.bc.wallet.util.AccountReplay; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; + +@Component +public class CoinCollectJob { + private Logger logger = LoggerFactory.getLogger(CoinCollectJob.class); + @Autowired + private AccountService accountService; + @Autowired + private EthService ethService; + + /** + * 同步ETH地址余额 + */ +// @Scheduled(cron = "0 0 */2 * * *") + @Scheduled(cron = "0 0 17 * * ?") + public void rechargeMinerFee(){ + AccountReplay accountReplay = new AccountReplay(accountService,100); + accountReplay.run(account -> { + logger.info("process account:{}",account); + try { + //查询余额 + BigDecimal ethBalance = ethService.getBalance(account.getAddress()); + //同步账户余额 + accountService.updateBalance(account.getAddress(),ethBalance); + } + catch (Exception e){ + e.printStackTrace(); + } + }); + } +} diff --git a/wallet/eth/src/main/resources/application.properties b/wallet/eth/src/main/resources/application.properties new file mode 100644 index 00000000..23bb2ec6 --- /dev/null +++ b/wallet/eth/src/main/resources/application.properties @@ -0,0 +1,35 @@ +server.port=7003 +spring.application.name=service-rpc-eth +#kafka +# \u6307\u5B9Akafka \u4EE3\u7406\u5730\u5740\uFF0C\u53EF\u4EE5\u591A\u4E2A +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u00E6\u008C\u0087\u00E5\u00AE\u009A\u00E9\u00BB\u0098\u00E8\u00AE\u00A4\u00E6\u00B6\u0088\u00E8\u00B4\u00B9\u00E8\u0080\u0085group id +spring.kafka.consumer.group-id=default-group +# \u00E6\u008C\u0087\u00E5\u00AE\u009A\u00E9\u00BB\u0098\u00E8\u00AE\u00A4topic id +spring.kafka.template.default-topic=test +# \u00E6\u008C\u0087\u00E5\u00AE\u009Alistener \u00E5\u00AE\u00B9\u00E5\u0099\u00A8\u00E4\u00B8\u00AD\u00E7\u009A\u0084\u00E7\u00BA\u00BF\u00E7\u00A8\u008B\u00E6\u0095\u00B0\u00EF\u00BC\u008C\u00E7\u0094\u00A8\u00E4\u00BA\u008E\u00E6\u008F\u0090\u00E9\u00AB\u0098\u00E5\u00B9\u00B6\u00E5\u008F\u0091\u00E9\u0087\u008F +spring.kafka.listener.concurrency=1 +# \u6BCF\u6B21\u6279\u91CF\u53D1\u9001\u6D88\u606F\u7684\u6570\u91CF\u0087\u008F +spring.kafka.producer.batch-size=1000 +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdasfdsafdsa@111.111.111.111:27017/wallet +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u6CE8\u518C\u65F6\u4F7F\u7528ip\u800C\u4E0D\u662F\u4E3B\u673A\u540D\u0090\u008D +eureka.instance.prefer-ip-address=true +#\u5E01\u79CD\u4FE1\u606F\u914D\u7F6E +coin.rpc=http://127.0.0.1:8545 +coin.name=Ethereum +coin.unit=ETH +coin.keystore-path=/data/eth/data/keystore +# \u521D\u59CB\u5316\u5E01\u79CD\u4FE1\u606F +coin.init-block-height=8336120 +coin.step=10 +coin.withdraw-wallet=UTC--2019-08-13T06-24-07.378035684Z--672881426632b13d8f474664c039acc7b5610b7 +coin.withdraw-wallet-password=fdsafdsafdsafdsa +coin.gas-limit=40000 +coin.min-collect-amount=0.1 +coin.ignore-from-address=0x672881426632b13d18f74664c039acc7b5610b7 +watcher.init-block-height=8347300 +watcher.step=10 +watcher.confirmation=20 +watcher.interval=5000 diff --git a/wallet/eth/src/main/resources/logback-spring.xml b/wallet/eth/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..8acc8073 --- /dev/null +++ b/wallet/eth/src/main/resources/logback-spring.xml @@ -0,0 +1,41 @@ + + + logback + + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + true + + + /mnt/logs/eth/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log + + + + + %d{yyyy-MM-dd HH:mm:ss} -%msg%n + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + \ No newline at end of file diff --git a/wallet/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java b/wallet/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java new file mode 100644 index 00000000..9125bad2 --- /dev/null +++ b/wallet/eth/src/test/java/com/bizzan/bc/wallet/AddressTest.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet; + +import org.junit.Test; + +public class AddressTest extends BaseTest{ + @Test + public void testFind(){ + } +} diff --git a/wallet/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java b/wallet/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java new file mode 100644 index 00000000..a323d4c0 --- /dev/null +++ b/wallet/eth/src/test/java/com/bizzan/bc/wallet/BaseTest.java @@ -0,0 +1,12 @@ +package com.bizzan.bc.wallet; + +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import com.bizzan.bc.wallet.WalletApplication; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes= WalletApplication.class) +public class BaseTest { +} diff --git a/wallet/lib/bitcoin-rpc-1.2.0.jar b/wallet/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/ltc/.classpath b/wallet/ltc/.classpath new file mode 100644 index 00000000..6330fa28 --- /dev/null +++ b/wallet/ltc/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/ltc/.gitignore b/wallet/ltc/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/ltc/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/ltc/.project b/wallet/ltc/.project new file mode 100644 index 00000000..7769259d --- /dev/null +++ b/wallet/ltc/.project @@ -0,0 +1,34 @@ + + + ltc + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866797 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/ltc/.settings/org.eclipse.core.resources.prefs b/wallet/ltc/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/ltc/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/ltc/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/ltc/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/ltc/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/ltc/.settings/org.eclipse.jdt.core.prefs b/wallet/ltc/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..b40c25c5 --- /dev/null +++ b/wallet/ltc/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,27 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/ltc/.settings/org.eclipse.m2e.core.prefs b/wallet/ltc/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/ltc/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar b/wallet/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar new file mode 100644 index 00000000..75903d1a Binary files /dev/null and b/wallet/ltc/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar differ diff --git a/wallet/ltc/lib/litecoinj-core-0.15.20190219.jar b/wallet/ltc/lib/litecoinj-core-0.15.20190219.jar new file mode 100644 index 00000000..b3e898f9 Binary files /dev/null and b/wallet/ltc/lib/litecoinj-core-0.15.20190219.jar differ diff --git a/wallet/ltc/pom.xml b/wallet/ltc/pom.xml new file mode 100644 index 00000000..c8357942 --- /dev/null +++ b/wallet/ltc/pom.xml @@ -0,0 +1,120 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + ltc + ${project-version} + + + + com.lambdaworks + scrypt + 1.4.0 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.alibaba + fastjson + + + org.litecoin + litecoin-core + 0.15.20190219 + system + ${project.basedir}/lib/litecoinj-core-0.15.20190219.jar + + + com.google.guava + guava + 16.0.1 + + + + com.google.protobuf + protobuf-java + 2.5.0 + + + com.madgag.spongycastle + core + 1.51.0.0 + + + + ${project.artifactId}-${version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..e758382a --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,187 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.WatcherLogService; +import com.bizzan.bc.wallet.util.HttpClientUtil; + +import lombok.Data; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Data +@Component +public class Watcher extends Thread{ + + @Value("${bizzan.blockApi}") + private String blockApi; + + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + private int confirmation = 3; + private Long currentBlockHeight = 0L; + private int step = 5; + private Long checkInterval = 2000L; + + @Autowired + private AccountService accountService; + + public void check(){ + try { + Thread.sleep(20000); // 避免连续访问btc.com + Long networkBlockNumber = getNetwortBlockHeight() - confirmation + 1; + Thread.sleep(20000); // 避免连续访问btc.com + if(currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + logger.info("replay block from {} to {}", startBlockNumber, networkBlockNumber); + List deposits = this.replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + }else { + logger.info("already latest height {},nothing to do!", currentBlockHeight); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + private List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + try { + for (Long blockHeight = startBlockNumber; blockHeight <= endBlockNumber; blockHeight++) { + // 获取区块Hash + + String blockHashStr = HttpClientUtil.doHttpsGet(blockApi + "block-index/" + blockHeight, null, null); + String blockHash = ""; + if(!StringUtils.isEmpty(blockHashStr)){ + JSONObject obj = JSON.parseObject(blockHashStr); + blockHash = obj.getString("blockHash"); + } + logger.info("获取区块高度(" + blockHeight + ")的Hash值: " + blockHash); + // 根据BlockHash获取区块交易列表 + if(!StringUtils.isEmpty(blockHash)) { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "txs/?block=" + blockHeight + "&pageNum=0", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject obj = JSON.parseObject(retStr); + int pageSize = obj.getIntValue("pagesTotal"); + logger.info("该区块有共" + pageSize + "页交易"); + for(int page = 0; page < pageSize; page++) { + JSONArray txList = null; + if(page > 0) { + String txStr = HttpClientUtil.doHttpsGet(blockApi + "txs/?block=" + blockHeight + "&pageNum="+page, null, null); + if(!StringUtils.isEmpty(txStr)){ + txList = JSON.parseObject(txStr).getJSONArray("txs"); + } + }else { + txList = obj.getJSONArray("txs"); + } + // 循环交易列表 + for(int i = 0; i < txList.size(); i++) { + JSONObject tx = txList.getJSONObject(i); // 获取交易本身 + JSONArray outs = tx.getJSONArray("vout"); + for(int j = 0; j < outs.size(); j++) { + JSONObject out = outs.getJSONObject(j); + JSONArray addresses = out.getJSONObject("scriptPubKey").getJSONArray("addresses"); + BigDecimal amount = out.getBigDecimal("value"); + + if(amount.compareTo(BigDecimal.ZERO) > 0 && addresses != null && addresses.size() > 0) { + String address = addresses.getString(0); // 获取地址 + if (accountService.isAddressExist(address)) { + logger.info("发现充值地址:" + blockHeight + "-" + tx.getString("txid") + ": 输出地址(" + address + ")"); + Deposit deposit = new Deposit(); + deposit.setTxid(tx.getString("txid")); + deposit.setBlockHeight(blockHeight); + deposit.setBlockHash(tx.getString("blockhash")); + deposit.setAmount(amount); + deposit.setAddress(address); + deposit.setTime(new Date(tx.getLongValue("blocktime") * 1000)); + deposits.add(deposit); + } + }else { + logger.info("交易(" + tx.getString("txid") + ")内部vout地址为空"); + } + } + } + Thread.sleep(10000); + } + } + } + } + } + catch (Exception e){ + e.printStackTrace(); + return null; + } + return deposits; + } + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check transactions..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 30000)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } + + public Long getNetwortBlockHeight() { + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "status?q=getInfo", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + JSONObject info = json.getJSONObject("info"); + Long height = json.getJSONObject("info").getLong("blocks"); + return height; + } + return 0L; + } + catch (Exception e){ + e.printStackTrace(); + return 0L; + } + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..73ba1ded --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,144 @@ +package com.bizzan.bc.wallet.controller; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; + +import org.litecoinj.core.Address; +import org.litecoinj.core.ECKey; +import org.litecoinj.core.NetworkParameters; +import org.litecoinj.params.MainNetParams; +import org.litecoinj.wallet.UnreadableWalletException; +import org.litecoinj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + + @Value("${bizzan.wallet}") + private String walletPath; + + @Value("${bizzan.blockApi}") + private String blockApi; + + @Autowired + private AccountService accountService; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address: "+account); + + NetworkParameters params = MainNetParams.get(); + + final File walletFile = new File(walletPath); + + Wallet wallet = null; + try { + wallet = Wallet.loadFromFile(walletFile); + } catch (UnreadableWalletException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + + ECKey key = new ECKey(); + + Address address = key.toAddress(params); + + wallet.importKey(key); + + try { + wallet.saveToFile(walletFile); + accountService.saveOne(account, address.toBase58()); + MessageResult result = new MessageResult(0,"success"); + result.setData(address.toBase58()); + + return result; + } catch (IOException e) { + e.printStackTrace(); + return MessageResult.error(500,"error:" + e.getMessage()); + } + } + + /** + * 钱包总余额(非节点服务,直接返回0,后面如果有空闲可以追加获取总体余额) + * @return + */ + @GetMapping("balance") + public MessageResult balance(){ + MessageResult result = new MessageResult(0,"success"); + result.setData(0); + return result; + } + + /** + * 获取地址余额 + * @param address + * @return + */ + @GetMapping("balance/{address}") + public MessageResult balance(@PathVariable String address){ + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "addr/" + address + "/balance", null, null); + if(!StringUtils.isEmpty(retStr)){ + BigDecimal balance = new BigDecimal(retStr); + if(balance.compareTo(BigDecimal.ZERO) > 0) { + balance = balance.divide(BigDecimal.valueOf(100000000), 8, BigDecimal.ROUND_HALF_DOWN); + } + MessageResult result = new MessageResult(0,"success"); + result.setData(balance); + return result; + } + return MessageResult.error(500,"获取余额失败"); + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("height") + public MessageResult getHeight(){ + try { + String retStr = HttpClientUtil.doHttpsGet(blockApi + "status?q=getInfo", null, null); + if(!StringUtils.isEmpty(retStr)){ + JSONObject json = JSON.parseObject(retStr); + JSONObject info = json.getJSONObject("info"); + Long height = json.getJSONObject("info").getLong("blocks"); + MessageResult result = new MessageResult(0,"success"); + result.setData(height); + return result; + } + return MessageResult.error(500,"获取高度失败"); + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"查询失败,error:"+e.getMessage()); + } + } + + /** + * TODO 增加转账功能 + * @param address + * @param amount + * @param fee + * @return + */ + @GetMapping({"transfer","withdraw"}) + public MessageResult withdraw(String address, BigDecimal amount,BigDecimal fee){ + return MessageResult.error(500, "暂未实现该功能"); + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..7a76629b --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,19 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..b8183b09 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; + private Long userId = 0L; +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..a0233bde --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 20000L; // 间隔时间 + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..ae776eb6 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,67 @@ +package com.bizzan.bc.wallet.event; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("lasted")) { + watcher.setCurrentBlockHeight(watcher.getNetwortBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数(时间差) + watcher.setConfirmation(watcherSetting.getConfirmation()); + + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..12833b81 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}", deposit.getTxid(), deposit.getAddress(), deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..81abd473 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } + + public void updateTime(String coinName, Date endTime) { + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight", 0); + update.set("lastSyncTime", endTime); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(0L); + watcherLog.setLastSyncTime(endTime); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java new file mode 100644 index 00000000..d046675b --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java @@ -0,0 +1,312 @@ +package com.bizzan.bc.wallet.util; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpClientUtil { + + private static String charSet = "UTF-8"; + private static CloseableHttpClient httpClient = null; + private static CloseableHttpResponse response = null; + + /** + * https的post请求 + * @param url + * @param jsonstr + * @param charset + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity se = new StringEntity(jsonStr); + se.setContentType("text/json"); + se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(se); + + response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + try { + //请求发起客户端 + httpClient = SSLClient.createSSLClientDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + //jsonObject = JSONObject.fromObject(content); + return content; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException{ + try { + //请求发起客户端 + httpClient = HttpClients.createDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + return content; + }else { + return null; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + } + + /** + * http的post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException { + try { + httpClient = HttpClients.createDefault(); + + // 创建httpPost + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity entity = new StringEntity(jsonStr, charSet); + entity.setContentType("text/json"); + entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(entity); + //发送post请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + + /** + * http的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException { + CloseableHttpClient httpclient = null; + CloseableHttpResponse response = null; + + try { + httpclient = HttpClients.createDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + //发送gey请求 + HttpGet httpGet = new HttpGet(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpclient.execute(httpGet); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return EntityUtils.toString(response.getEntity()); + } + }finally{ + if(httpclient != null){ + httpclient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * https的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + HttpGet httpGet = new HttpGet(url); + RequestConfig rconfig = RequestConfig.custom() + .setConnectionRequestTimeout(2000) + .setSocketTimeout(4000) + .setConnectTimeout(3000) + .build(); + httpGet.setConfig(rconfig); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpClient.execute(httpGet); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java new file mode 100644 index 00000000..42736ce7 --- /dev/null +++ b/wallet/ltc/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java @@ -0,0 +1,29 @@ +package com.bizzan.bc.wallet.util; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; + +public class SSLClient { + public static CloseableHttpClient createSSLClientDefault() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + +} \ No newline at end of file diff --git a/wallet/ltc/src/main/resources/application.properties b/wallet/ltc/src/main/resources/application.properties new file mode 100644 index 00000000..f16f695f --- /dev/null +++ b/wallet/ltc/src/main/resources/application.properties @@ -0,0 +1,32 @@ +server.port=7007 +spring.application.name=service-rpc-ltc +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fsafdsafdsads@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true +bizzan.wallet=/data/ltc/ltc.wallet + +bizzan.blockApi=https://litecoinblockexplorer.net/api/ + +coin.rpc= +coin.name=Litecoin +coin.unit=LTC + +watcher.init-block-height=1703228 +watcher.step=5 +watcher.confirmation=3 +watcher.interval=20000 diff --git a/wallet/ltc/src/test/java/SimpleTest.java b/wallet/ltc/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/ltc/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +} diff --git a/wallet/pom.xml b/wallet/pom.xml new file mode 100644 index 00000000..4cce4db5 --- /dev/null +++ b/wallet/pom.xml @@ -0,0 +1,105 @@ + + + 4.0.0 + + com.bizzan.bc.wallet + wallet-rpc + pom + 1.2 + + + rpc-common + bitcoin + usdt + eth + erc-token + eth-support + act + ect + xrp + bch + ltc + erc-eusdt + bsv + eos + xmr + btm + + + org.springframework.boot + spring-boot-starter-parent + 1.5.10.RELEASE + + + + 1.2 + 3.4 + Edgware.RELEASE + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + com.alibaba + fastjson + 1.2.31 + + + org.web3j + core + 3.3.1 + + + org.springframework.boot + spring-boot-devtools + 1.5.9.RELEASE + + + org.projectlombok + lombok + true + 1.16.20 + + + com.spark.bc + bitcoin-rpc + 1.2.0 + system + ${project.basedir}/lib/bitcoin-rpc-1.2.0.jar + + + com.bizzan.bc.wallet + rpc-common + ${project-version} + + + com.bizzan.bc.wallet + eth-support + ${project-version} + + + org.web3j + core + 3.3.1 + + + com.mashape.unirest + unirest-java + 1.4.9 + + + + diff --git a/wallet/rpc-common/.classpath b/wallet/rpc-common/.classpath new file mode 100644 index 00000000..a8965644 --- /dev/null +++ b/wallet/rpc-common/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/rpc-common/.gitignore b/wallet/rpc-common/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/rpc-common/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/rpc-common/.project b/wallet/rpc-common/.project new file mode 100644 index 00000000..80ef9019 --- /dev/null +++ b/wallet/rpc-common/.project @@ -0,0 +1,34 @@ + + + rpc-common + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866800 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/rpc-common/.settings/org.eclipse.core.resources.prefs b/wallet/rpc-common/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e9441bb1 --- /dev/null +++ b/wallet/rpc-common/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/rpc-common/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/rpc-common/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/rpc-common/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/rpc-common/.settings/org.eclipse.jdt.core.prefs b/wallet/rpc-common/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/rpc-common/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/rpc-common/.settings/org.eclipse.m2e.core.prefs b/wallet/rpc-common/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/rpc-common/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/rpc-common/lib/bitcoin-rpc-1.2.0.jar b/wallet/rpc-common/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/rpc-common/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/rpc-common/pom.xml b/wallet/rpc-common/pom.xml new file mode 100644 index 00000000..cae3a66e --- /dev/null +++ b/wallet/rpc-common/pom.xml @@ -0,0 +1,68 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + + com.bizzan.bc.wallet + rpc-common + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + com.alibaba + fastjson + + + org.springframework.kafka + spring-kafka + + + com.spark.bc + bitcoin-rpc + system + ${project.basedir}/lib/bitcoin-rpc-1.2.0.jar + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + org.web3j + core + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + \ No newline at end of file diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java new file mode 100644 index 00000000..4f0f8fda --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/RpcController.java @@ -0,0 +1,43 @@ +package com.bizzan.bc.wallet.component; + +import java.math.BigDecimal; + +import com.bizzan.bc.wallet.util.MessageResult; + +public interface RpcController { + /** + * 获取当前区块高度 + * @return + */ + MessageResult blockHeight(); + + /** + * 为用户获取新地址 + * @param uuid + * @return + */ + MessageResult getNewAddress(String uuid); + + /** + * 提现 + * @param toAddress + * @param amount + * @param fee + * @param isSync + * @param withdrawId + * @return + */ + MessageResult withdraw(String toAddress, BigDecimal amount, BigDecimal fee,Boolean isSync,String withdrawId); + + /** + * 转账 + * @return + */ + MessageResult transfer(); + + /** + * 余额 + * @return + */ + MessageResult balance(); +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java new file mode 100644 index 00000000..b0f9cfbb --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/WatchListener.java @@ -0,0 +1,6 @@ +package com.bizzan.bc.wallet.component; + +public interface WatchListener { + void block(); + void transaction(); +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..8daff28d --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,83 @@ +package com.bizzan.bc.wallet.component; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.WatcherLogService; + +import lombok.Data; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +@Data +public abstract class Watcher implements Runnable{ + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private Long checkInterval = 2000L; + private Long currentBlockHeight = 0L; + private int step = 5; + //区块确认数 + private int confirmation = 3; + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + + public void check(){ + try { + Long networkBlockNumber = getNetworkBlockHeight() - confirmation + 1; + if (currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + logger.info("replay block from {} to {}", startBlockNumber, currentBlockHeight); + List deposits = replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + logger.info("扫块失败!!!"); + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + } else { + logger.info("Already latest height: {}, networkBlockHeight: {},nothing to do!", currentBlockHeight, networkBlockNumber); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + public abstract List replayBlock(Long startBlockNumber, Long endBlockNumber); + + public abstract Long getNetworkBlockHeight(); + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 100)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java new file mode 100644 index 00000000..b86cebc6 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/ContractConfig.java @@ -0,0 +1,23 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Contract; + +/** + * 自动配置合约参数 + */ +@Configuration +@ConditionalOnProperty(name="contract.address") +public class ContractConfig { + + @Bean + @ConfigurationProperties(prefix = "contract") + public Contract getContract(){ + return new Contract(); + } + +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..03adf4e3 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,25 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String keystorePath; + private BigDecimal defaultMinerFee; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; + private BigDecimal gasSpeedUp = BigDecimal.ONE; + private BigDecimal rechargeMinerFee; + private String ignoreFromAddress; + private String masterAddress; +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java new file mode 100644 index 00000000..39d38b6a --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Contract.java @@ -0,0 +1,23 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import com.bizzan.bc.wallet.util.EthConvert; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Contract { + //合约精度 + private String decimals; + //合约地址 + private String address; + private BigInteger gasLimit; + private String eventTopic0; + public EthConvert.Unit getUnit(){ + if(StringUtils.isEmpty(decimals))return EthConvert.Unit.ETHER; + else return EthConvert.Unit.fromString(decimals); + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..995d1cd3 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,20 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..281423a0 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 5000L; + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..87226d17 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,64 @@ +package com.bizzan.bc.wallet.event; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("latest")) { + watcher.setCurrentBlockHeight(watcher.getNetworkBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数 + watcher.setConfirmation(watcherSetting.getConfirmation()); + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..ad0f3c2f --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}",deposit.getTxid(),deposit.getAddress(),deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..e3154762 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,45 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java new file mode 100644 index 00000000..538cc202 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplay.java @@ -0,0 +1,37 @@ +package com.bizzan.bc.wallet.util; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.service.AccountService; + +import lombok.Data; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +@Data +public class AccountReplay { + private Logger logger = LoggerFactory.getLogger(AccountReplay.class); + private AccountService accountService; + private int pageSize = 100; + + public AccountReplay(AccountService service,int pageSize){ + this.accountService = service; + this.pageSize = pageSize; + } + + public void run(final AccountReplayListener listener){ + long count = accountService.count(); + long totalPage = count/this.pageSize; + if(count%pageSize != 0){ + totalPage += 1; + } + logger.info("start replay account,total={},page={},pageSize={}",count,totalPage,pageSize); + for(int page = 0;page<=totalPage;page++){ + List accounts = accountService.find(page,pageSize); + accounts.forEach(account->{ + listener.replay(account); + }); + } + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java new file mode 100644 index 00000000..f20f0bfd --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/AccountReplayListener.java @@ -0,0 +1,8 @@ +package com.bizzan.bc.wallet.util; + +import com.bizzan.bc.wallet.entity.Account; + +public interface AccountReplayListener { + + void replay(Account account); +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java new file mode 100644 index 00000000..90c7a12d --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/EthConvert.java @@ -0,0 +1,66 @@ +package com.bizzan.bc.wallet.util; + +import java.math.BigDecimal; + +public class EthConvert { + private EthConvert() { } + + public static BigDecimal fromWei(String number, Unit unit) { + return fromWei(new BigDecimal(number), unit); + } + + public static BigDecimal fromWei(BigDecimal number, Unit unit) { + return number.divide(unit.getWeiFactor()); + } + + public static BigDecimal toWei(String number, Unit unit) { + return toWei(new BigDecimal(number), unit); + } + + public static BigDecimal toWei(BigDecimal number, Unit unit) { + return number.multiply(unit.getWeiFactor()); + } + + public enum Unit { + WEI("wei", 0), + KWEI("kwei", 3), + WWEI("wwei", 4), + MWEI("mwei", 6), + LWEI("lwei", 8), + GWEI("gwei", 9), + SZABO("szabo", 12), + FINNEY("finney", 15), + ETHER("ether", 18), + KETHER("kether", 21), + METHER("mether", 24), + GETHER("gether", 27); + + private String name; + private BigDecimal weiFactor; + + Unit(String name, int factor) { + this.name = name; + this.weiFactor = BigDecimal.TEN.pow(factor); + } + + public BigDecimal getWeiFactor() { + return weiFactor; + } + + @Override + public String toString() { + return name; + } + + public static Unit fromString(String name) { + if (name != null) { + for (Unit unit : Unit.values()) { + if (name.equalsIgnoreCase(unit.name)) { + return unit; + } + } + } + return Unit.valueOf(name); + } + } +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java new file mode 100644 index 00000000..d57b111f --- /dev/null +++ b/wallet/rpc-common/src/main/java/com/bizzan/bc/wallet/util/WalletOperationUtil.java @@ -0,0 +1,30 @@ +package com.bizzan.bc.wallet.util; + +import com.spark.blockchain.rpcclient.BitcoinException; +import com.spark.blockchain.rpcclient.BitcoinRPCClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author shenzucai + * @time 2018.04.19 22:43 + */ +public class WalletOperationUtil { + + private static Logger logger = LoggerFactory.getLogger(WalletOperationUtil.class); + + //前提,钱包已加锁并重启。 + //钱包解密 walletpassphrase [mintonly] + public static void walletpassphrase(BitcoinRPCClient rpcClient, String passphrase) throws BitcoinException { + + rpcClient.query("walletpassphrase", passphrase, 60); + + } + + //钱包加锁walletlock + public static void walletlock(BitcoinRPCClient rpcClient) throws BitcoinException { + + rpcClient.query("walletlock"); + + } +} diff --git a/wallet/usdt/.classpath b/wallet/usdt/.classpath new file mode 100644 index 00000000..a97cb0eb --- /dev/null +++ b/wallet/usdt/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/usdt/.gitignore b/wallet/usdt/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/usdt/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/usdt/.project b/wallet/usdt/.project new file mode 100644 index 00000000..8475ea98 --- /dev/null +++ b/wallet/usdt/.project @@ -0,0 +1,34 @@ + + + usdt + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866802 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/usdt/.settings/org.eclipse.core.resources.prefs b/wallet/usdt/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..abdea9ac --- /dev/null +++ b/wallet/usdt/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/wallet/usdt/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/usdt/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/usdt/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/usdt/.settings/org.eclipse.jdt.core.prefs b/wallet/usdt/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..ec976582 --- /dev/null +++ b/wallet/usdt/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,20 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/usdt/.settings/org.eclipse.m2e.core.prefs b/wallet/usdt/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/usdt/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/usdt/lib/bitcoin-rpc-1.2.0.jar b/wallet/usdt/lib/bitcoin-rpc-1.2.0.jar new file mode 100644 index 00000000..5ddd8cb4 Binary files /dev/null and b/wallet/usdt/lib/bitcoin-rpc-1.2.0.jar differ diff --git a/wallet/usdt/pom.xml b/wallet/usdt/pom.xml new file mode 100644 index 00000000..b98717fb --- /dev/null +++ b/wallet/usdt/pom.xml @@ -0,0 +1,103 @@ + + + + wallet-rpc + com.bizzan.bc.wallet + 1.2 + + 4.0.0 + + com.bizzan.bc.wallet + usdt + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + com.spark.bc + bitcoin-rpc + system + ${project.basedir}/lib/bitcoin-rpc-1.2.0.jar + + + org.apache.commons + commons-lang3 + + + com.alibaba + fastjson + + + com.bizzan.bc.wallet + rpc-common + 1.2 + + + org.projectlombok + lombok + + + com.mashape.unirest + unirest-java + 1.4.9 + + + + ${project.artifactId}-${version} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..260810cc --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,15 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableEurekaClient +@SpringBootApplication +@EnableScheduling +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java new file mode 100644 index 00000000..fe0240ef --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/component/UsdtWatcher.java @@ -0,0 +1,71 @@ +package com.bizzan.bc.wallet.component; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.config.JsonrpcClient; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.AccountService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class UsdtWatcher extends Watcher{ + private Logger logger = LoggerFactory.getLogger(UsdtWatcher.class); + @Autowired + private JsonrpcClient jsonrpcClient; + @Autowired + private AccountService accountService; + private String usdtPropertyId = "31"; + + public List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList<>(); + try { + for (Long blockHeight = startBlockNumber; blockHeight <= endBlockNumber; blockHeight++) { + List list = jsonrpcClient.omniListBlockTransactions(blockHeight); + for (String txid : list) { + Map map = jsonrpcClient.omniGetTransactions(txid); + if(map.get("propertyid") == null)continue; + String propertyid = map.get("propertyid").toString(); + String txId = map.get("txid").toString(); + String address = String.valueOf(map.get("referenceaddress")); + Boolean valid = Boolean.parseBoolean(map.get("valid").toString()); + if(propertyid.equals(this.usdtPropertyId) && valid) { + if (accountService.isAddressExist(address)) { + Deposit deposit = new Deposit(); + deposit.setTxid(txId); + deposit.setBlockHash(String.valueOf(map.get("blockhash"))); + deposit.setAmount(new BigDecimal(map.get("amount").toString())); + deposit.setAddress(address); + logger.info("receive usdt {}", String.valueOf(map.get("referenceaddress"))); + deposit.setBlockHeight(Long.valueOf(String.valueOf(map.get("block")))); + deposits.add(deposit); + } + } + } + } + } + catch (Exception e){ + e.printStackTrace(); + } + return deposits; + } + + @Override + public Long getNetworkBlockHeight() { + try { + return Long.valueOf(jsonrpcClient.getBlockCount()); + } + catch (Exception e){ + e.printStackTrace(); + } + return 0L; + } + +} diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java new file mode 100644 index 00000000..522f9277 --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/Constant.java @@ -0,0 +1,59 @@ +package com.bizzan.bc.wallet.config; + +/** + * + *

TODO

+ * @author: shangxl + * @Date : 2018年3月7日 下午5:37:00 + */ +public class Constant { + /** + * zcash币编码 + */ + public static final String ZCASH = "zec"; + /** + * tv编码 + */ + public static final String TV = "tv"; + /** + * usdt编码 + */ + public static final String USDT = "USDT"; + /** + * usdt的token Id + */ + public static final String PROPERTYID_USDT = "31"; + /** + * 精度 + */ + public static final String DECIMALS = "_DECIMALS"; + /** + * neo + */ + public static final String NEO = "NEO"; + /** + * bds + */ + public static final String BDS = "BDS"; + /** + * bts + */ + public static final String BTS = "BTS"; + /** + * gxs + */ + public static final String GXS = "GXS"; + /** + * eth编码 + */ + public static final String ETHER = "ETH"; + /** + * etc编码 + */ + public static final String ETC = "ETC"; + /** + * etz编码 + */ + public static final String ETZ = "ETZ"; + +} diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java new file mode 100644 index 00000000..a79ff947 --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/JsonrpcClient.java @@ -0,0 +1,166 @@ +package com.bizzan.bc.wallet.config; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.mashape.unirest.http.HttpResponse; +import com.mashape.unirest.http.Unirest; +import com.mashape.unirest.http.exceptions.UnirestException; +import com.spark.blockchain.rpcclient.BitcoinException; +import com.spark.blockchain.rpcclient.BitcoinRPCClient; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + +/** + * 基于比特币rpc接口开发新的功能 + *

+ * TODO + *

+ * + * @author: shangxl + * @Date : 2017年11月16日 下午6:10:02 + */ +public class JsonrpcClient extends BitcoinRPCClient { + + private Logger logger = LoggerFactory.getLogger(JsonrpcClient.class); + /** + *

+ * TODO + *

+ * + * @author: shangxl + * @param: @param + * rpcUrl + * @param: @throws + * MalformedURLException + */ + public JsonrpcClient(String rpcUrl) throws MalformedURLException { + super(rpcUrl); + } + + @Override + public String getNewAddress(String accountName) { + try { + if (StringUtils.isNotEmpty(accountName)) { + return super.getNewAddress(accountName); + } else { + return super.getNewAddress(); + } + } catch (BitcoinException e) { + logger.info("创建新币账户出错: accountName=" + accountName); + e.printStackTrace(); + return null; + } + } + + /** + * 获取 btc余额 + * @param address + * @return + */ + public BigDecimal getAddressBalance(String address) { + BigDecimal balance = BigDecimal.ZERO; + try { + List unspents = this.listUnspent(3, 99999999, address); + for(Unspent unspent:unspents){ + balance = balance.add(unspent.amount()); + } + return balance; + } + catch (Exception e){ + e.printStackTrace(); + } + return new BigDecimal("-1"); + } + + + + /** + * 根据地址获取usdt的账户余额 + *

+ * TODO + *

+ * + * @author: shangxl + * @param: @param + * address + * @param: @return + * @return: String + * @Date : 2017年12月18日 下午5:39:04 + * @throws: + */ + public BigDecimal omniGetBalance(String address) { + String balance="0"; + try { + Integer propertyid = Integer.valueOf(Constant.PROPERTYID_USDT); + Map map = (Map) query("omni_getbalance", new Object[] { address, propertyid }); + if (map != null) { + balance= map.get("balance").toString(); + } + } catch (BitcoinException e) { + e.printStackTrace(); + } + return new BigDecimal(balance); + } + + public Map omniGetTransactions(String txid){ + try { + return (Map) query("omni_gettransaction", new Object[]{txid}); + } catch (BitcoinException e) { + e.printStackTrace(); + return null; + } + } + + public List omniListBlockTransactions(Long blockHeight){ + try { + return (List) query("omni_listblocktransactions", new Object[]{blockHeight}); + } catch (BitcoinException e) { + e.printStackTrace(); + return null; + } + } + + /** + * usdt 转币 + *

TODO

+ * @author: shangxl + * @param: @return + * @return: String + * @Date : 2017年12月19日 下午3:38:31 + * @throws: + */ + public String omniSend(String fromaddress,String toaddress,BigDecimal amount){ + try { + return query("omni_send", new Object[]{fromaddress,toaddress,Integer.valueOf(Constant.PROPERTYID_USDT),amount.toPlainString()}).toString(); + } catch (BitcoinException e) { + logger.info("fromaddress="+fromaddress+" toaddress="+toaddress+" propertyid="+Constant.PROPERTYID_USDT+" amount="+amount); + e.printStackTrace(); + return null; + } + } + + public String omniSend(String fromaddress, String toaddress, BigDecimal amount, BigDecimal bitcoinFee){ + try { + return query("omni_send", new Object[]{fromaddress,toaddress,Integer.valueOf(Constant.PROPERTYID_USDT),amount.toPlainString(),fromaddress,bitcoinFee.toPlainString()}).toString(); + } catch (BitcoinException e) { + logger.info("fromaddress="+fromaddress+" toaddress="+toaddress+" propertyid="+Constant.PROPERTYID_USDT+" amount="+amount); + e.printStackTrace(); + return null; + } + } + + public static void main(String[] args) throws MalformedURLException { + JsonrpcClient client = new JsonrpcClient("http://bitcoin:bitcoin@127.0.0.1:8888/"); + System.out.println(client.getAddressBalance("3Dxrsd1DzqcvchAa3yNFAvXkNsQUZGdnS8")); + } +} diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java new file mode 100644 index 00000000..c013fa34 --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/config/RpcClientConfig.java @@ -0,0 +1,35 @@ +package com.bizzan.bc.wallet.config; + +import com.alibaba.fastjson.JSONObject; +import com.spark.blockchain.rpcclient.BitcoinRPCClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.net.MalformedURLException; + +/** + * 初始化RPC客户端 + */ +@Configuration +public class RpcClientConfig { + private Logger logger = LoggerFactory.getLogger(RpcClientConfig.class); + + @Bean + public JsonrpcClient setClient(@Value("${coin.rpc}") String uri){ + try { + logger.info("uri={}",uri); + JsonrpcClient client = new JsonrpcClient(uri); + logger.info("============================="); + logger.info("client={}",client); + logger.info("============================="); + return client; + } catch (MalformedURLException e) { + logger.info("init wallet failed"); + e.printStackTrace(); + return null; + } + } +} diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..3a1bee09 --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,174 @@ +package com.bizzan.bc.wallet.controller; + +import com.bizzan.bc.wallet.config.JsonrpcClient; +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.util.MessageResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.util.List; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + @Autowired + private JsonrpcClient rpcClient; + @Autowired + private Coin coin; + private Logger logger = LoggerFactory.getLogger(WalletController.class); + @Autowired + private AccountService accountService; + + @GetMapping("height") + public MessageResult getHeight(){ + try { + int height =rpcClient.getBlockCount(); + logger.info("get block height: lasted height={}", height); + MessageResult result = new MessageResult(0,"success"); + result.setData(height - 1); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"查询失败,error:"+e.getMessage()); + } + } + + @GetMapping("address/{account}") + public MessageResult getNewAddress(@PathVariable String account){ + logger.info("create new address :"+account); + String address = rpcClient.getNewAddress(account); + accountService.saveOne(account,address); + MessageResult result = new MessageResult(0,"success"); + result.setData(address); + return result; + } + + + @GetMapping("withdraw") + public MessageResult withdraw(String address, BigDecimal amount,BigDecimal fee){ + logger.info("withdraw:address={},amount={},fee={}",address,amount,fee); + try { + String txid = rpcClient.omniSend(coin.getWithdrawAddress(),address,amount); + MessageResult result = new MessageResult(0,"success"); + result.setData(txid); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("transfer") + public MessageResult transfer(String address, BigDecimal amount){ + logger.info("transfer:address={},amount={},fee={}",address,amount); + try { + List accounts = accountService.findAll(); + BigDecimal transferedAmt = BigDecimal.ZERO; + for(Account account:accounts){ + if(account.getAddress().equalsIgnoreCase(address))continue; + BigDecimal btcFee = rpcClient.getAddressBalance(account.getAddress()); + if(btcFee.compareTo(coin.getDefaultMinerFee()) < 0){ + logger.info("地址{}矿工费不足,最小为{},当前为{}",account.getAddress(),coin.getDefaultMinerFee(),btcFee); + continue; + } + BigDecimal availAmt = rpcClient.omniGetBalance(account.getAddress()); + + if(availAmt.compareTo(amount.subtract(transferedAmt)) > 0){ + availAmt = amount.subtract(transferedAmt); + } + if(availAmt.compareTo(BigDecimal.ZERO)<=0){ + continue; + } + //String txid = rpcClient.omniSend(account.getAddress(),address,amount.toPlainString()); + String txid = rpcClient.omniSend(account.getAddress(), address,availAmt); + if(txid != null) { + System.out.println("fromAddress"+account.getAddress()+",txid:"+txid); + transferedAmt = transferedAmt.add(availAmt); + } + if(transferedAmt.compareTo(amount) >= 0){ + break; + } + } + MessageResult result = new MessageResult(0,"success"); + result.setData(transferedAmt); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("transfer-from-address") + public MessageResult transferFromAddress(String fromAddress,String address, BigDecimal amount,BigDecimal fee){ + logger.info("transfer:fromeAddress={},address={},amount={},fee={}",fromAddress,address,amount,fee); + try { + BigDecimal transferedAmt = BigDecimal.ZERO; + if(fromAddress.equalsIgnoreCase(address)) return MessageResult.error(500,"转入转出地址不能一样"); + BigDecimal availAmt = rpcClient.omniGetBalance(fromAddress); + if(availAmt.compareTo(amount) > 0){ + availAmt = amount; + } + String txid = rpcClient.omniSend(fromAddress,address,amount); + if(txid != null) { + System.out.println("fromAddress"+fromAddress+",txid:"+txid); + transferedAmt = transferedAmt.add(availAmt); + } + MessageResult result = new MessageResult(0,"success"); + result.setData(transferedAmt); + return result; + } + catch (Exception e){ + e.printStackTrace(); + return MessageResult.error(500,"error:"+e.getMessage()); + } + } + + @GetMapping("balance") + public MessageResult balance(){ + BigDecimal amount = BigDecimal.ZERO; + try { + List accounts = accountService.findAll(); + logger.info("get all balance:address count={}",accounts.size()); + for(int i =0; i kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + logger.info("confirmed deposit {}",JSON.toJSON(deposit)); + if(!depositService.exists(deposit)) { + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java new file mode 100644 index 00000000..15dbd6a0 --- /dev/null +++ b/wallet/usdt/src/main/java/com/bizzan/bc/wallet/job/CoinCollectJob.java @@ -0,0 +1,54 @@ +package com.bizzan.bc.wallet.job; + +import com.bizzan.bc.wallet.config.JsonrpcClient; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.AccountReplay; +import com.spark.blockchain.rpcclient.BitcoinUtil; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; + +@Component +public class CoinCollectJob { + private Logger logger = LoggerFactory.getLogger(CoinCollectJob.class); + @Autowired + private AccountService accountService; + @Autowired + private JsonrpcClient rpcClient; + @Autowired + private Coin coin; + + /** + * 每两小时检查一次 + */ + @Scheduled(cron = "0 0 */2 * * ?") + public void rechargeMinerFee(){ + try { + AccountReplay accountReplay = new AccountReplay(accountService, 100); + accountReplay.run(account -> { + BigDecimal btcBalance = rpcClient.getAddressBalance(account.getAddress()); + if(btcBalance.compareTo(coin.getRechargeMinerFee()) < 0) { + BigDecimal usdtBalance = rpcClient.omniGetBalance(account.getAddress()); + if(usdtBalance.compareTo(coin.getMinCollectAmount()) >= 0) { + try { + String txid = BitcoinUtil.sendTransaction(rpcClient, coin.getWithdrawAddress(), account.getAddress(), coin.getRechargeMinerFee(), coin.getDefaultMinerFee()); + logger.info("BitcoinUtil.sendTransaction:address={},txid={}", account.getAddress(), txid); + } + catch (Exception e){ + e.printStackTrace(); + } + } + } + }); + } + catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/wallet/usdt/src/main/resources/application.properties b/wallet/usdt/src/main/resources/application.properties new file mode 100644 index 00000000..55c07f84 --- /dev/null +++ b/wallet/usdt/src/main/resources/application.properties @@ -0,0 +1,32 @@ +server.port=7002 +spring.application.name=service-rpc-usdt +#kafka +# \u00E6\u008C\u0087\u00E5\u00AE\u009Akafka \u00E4\u00BB\u00A3\u00E7\u0090\u0086\u00E5\u009C\u00B0\u00E5\u009D\u0080\u00EF\u00BC\u008C\u00E5\u008F\u00AF\u00E4\u00BB\u00A5\u00E5\u00A4\u009A\u00E4\u00B8\u00AA +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u00E6\u008C\u0087\u00E5\u00AE\u009A\u00E9\u00BB\u0098\u00E8\u00AE\u00A4\u00E6\u00B6\u0088\u00E8\u00B4\u00B9\u00E8\u0080\u0085group id +spring.kafka.consumer.group-id=default-group +# \u00E6\u008C\u0087\u00E5\u00AE\u009A\u00E9\u00BB\u0098\u00E8\u00AE\u00A4topic id +spring.kafka.template.default-topic= test +# \u00E6\u008C\u0087\u00E5\u00AE\u009Alistener \u00E5\u00AE\u00B9\u00E5\u0099\u00A8\u00E4\u00B8\u00AD\u00E7\u009A\u0084\u00E7\u00BA\u00BF\u00E7\u00A8\u008B\u00E6\u0095\u00B0\u00EF\u00BC\u008C\u00E7\u0094\u00A8\u00E4\u00BA\u008E\u00E6\u008F\u0090\u00E9\u00AB\u0098\u00E5\u00B9\u00B6\u00E5\u008F\u0091\u00E9\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u00E6\u00AF\u008F\u00E6\u00AC\u00A1\u00E6\u0089\u00B9\u00E9\u0087\u008F\u00E5\u008F\u0091\u00E9\u0080\u0081\u00E6\u00B6\u0088\u00E6\u0081\u00AF\u00E7\u009A\u0084\u00E6\u0095\u00B0\u00E9\u0087\u008F +spring.kafka.producer.batch-size= 1000 +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdasfdsafdsa@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u00E6\u00B3\u00A8\u00E5\u0086\u008C\u00E6\u0097\u00B6\u00E4\u00BD\u00BF\u00E7\u0094\u00A8ip\u00E8\u0080\u008C\u00E4\u00B8\u008D\u00E6\u0098\u00AF\u00E4\u00B8\u00BB\u00E6\u009C\u00BA\u00E5\u0090\u008D +eureka.instance.prefer-ip-address=true + +coin.rpc=http://bizzan:fdsafds@127.0.0.1:8333/ +coin.name=USDT +coin.unit=USDT +coin.password=123456 +coin.step=10 +coin.init-block-height=592417 +coin.withdraw-address=1QDEimf6f4VrDqCSBmgfh1ReW9L2vHvvg +#\u00E8\u00BD\u00AC\u00E8\u00B4\u00A6\u00E6\u0097\u00B6\u00E9\u00BB\u0098\u00E8\u00AE\u00A4\u00E6\u0094\u00AF\u00E4\u00BB\u0098\u00E7\u009A\u0084btc\u00E6\u0089\u008B\u00E7\u00BB\u00AD\u00E8\u00B4\u00B9 +coin.default-miner-fee=0.0001 +#\u00E6\u00AF\u008F\u00E6\u00AC\u00A1\u00E7\u00BB\u0099USDT\u00E5\u009C\u00B0\u00E5\u009D\u0080\u00E5\u0085\u0085\u00E5\u0080\u00BC\u00E7\u009A\u0084btc\u00E6\u0095\u00B0\u00E9\u0087\u008F +coin.recharge-miner-fee=0.0001 +coin.min-collect-amount=1 diff --git a/wallet/usdt/src/main/resources/logback-spring.xml b/wallet/usdt/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..11a03c0f --- /dev/null +++ b/wallet/usdt/src/main/resources/logback-spring.xml @@ -0,0 +1,41 @@ + + + logback + + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + true + + + /mnt/logs/usdt/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log + + + + + %d{yyyy-MM-dd HH:mm:ss} -%msg%n + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + \ No newline at end of file diff --git a/wallet/xmr/.classpath b/wallet/xmr/.classpath new file mode 100644 index 00000000..6330fa28 --- /dev/null +++ b/wallet/xmr/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wallet/xmr/.gitignore b/wallet/xmr/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/wallet/xmr/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wallet/xmr/.project b/wallet/xmr/.project new file mode 100644 index 00000000..9b918719 --- /dev/null +++ b/wallet/xmr/.project @@ -0,0 +1,34 @@ + + + xmr + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1739664866804 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/wallet/xmr/.settings/org.eclipse.core.resources.prefs b/wallet/xmr/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/wallet/xmr/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/wallet/xmr/.settings/org.eclipse.jdt.apt.core.prefs b/wallet/xmr/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/wallet/xmr/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/wallet/xmr/.settings/org.eclipse.jdt.core.prefs b/wallet/xmr/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..b40c25c5 --- /dev/null +++ b/wallet/xmr/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,27 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.springframework.lang.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.springframework.lang.NonNullApi +org.eclipse.jdt.core.compiler.annotation.nullable=org.springframework.lang.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/wallet/xmr/.settings/org.eclipse.m2e.core.prefs b/wallet/xmr/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/wallet/xmr/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/wallet/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar b/wallet/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar new file mode 100644 index 00000000..75903d1a Binary files /dev/null and b/wallet/xmr/lib/bitcoinj-core-0.13-alice-SNAPSHOT.jar differ diff --git a/wallet/xmr/lib/litecoinj-core-0.15.20190219.jar b/wallet/xmr/lib/litecoinj-core-0.15.20190219.jar new file mode 100644 index 00000000..b3e898f9 Binary files /dev/null and b/wallet/xmr/lib/litecoinj-core-0.15.20190219.jar differ diff --git a/wallet/xmr/pom.xml b/wallet/xmr/pom.xml new file mode 100644 index 00000000..8b0601bc --- /dev/null +++ b/wallet/xmr/pom.xml @@ -0,0 +1,120 @@ + + + + com.bizzan.bc.wallet + wallet-rpc + 1.2 + + 4.0.0 + com.bizzan.bc.wallet + xmr + ${project-version} + + + + com.lambdaworks + scrypt + 1.4.0 + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + com.github.briandilley.jsonrpc4j + jsonrpc4j + 1.4.6 + + + com.alibaba + fastjson + + + org.litecoin + litecoin-core + 0.15.20190219 + system + ${project.basedir}/lib/litecoinj-core-0.15.20190219.jar + + + com.google.guava + guava + 16.0.1 + + + + com.google.protobuf + protobuf-java + 2.5.0 + + + com.madgag.spongycastle + core + 1.51.0.0 + + + + ${project.artifactId}-${version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java new file mode 100644 index 00000000..a11e46b9 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/WalletRpcApplication.java @@ -0,0 +1,13 @@ +package com.bizzan.bc.wallet; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class WalletRpcApplication { + public static void main(String[] args){ + SpringApplication.run(WalletRpcApplication.class,args); + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java new file mode 100644 index 00000000..7daff17d --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/component/Watcher.java @@ -0,0 +1,193 @@ +package com.bizzan.bc.wallet.component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.event.DepositEvent; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.service.WatcherLogService; +import com.bizzan.bc.wallet.util.HttpClientUtil; + +import lombok.Data; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +@Component +public class Watcher extends Thread{ + + @Value("${bizzan.blockApi}") + private String blockApi; + + private Logger logger = LoggerFactory.getLogger(Watcher.class); + private boolean stop = false; + //默认同步间隔20秒 + private DepositEvent depositEvent; + private Coin coin; + private WatcherLogService watcherLogService; + private int confirmation = 3; + private Long currentBlockHeight = 0L; + private int step = 5; + private Long checkInterval = 2000L; + + @Autowired + private AccountService accountService; + + public void check(){ + try { + Thread.sleep(5000); // 避免连续访问btc.com + Long networkBlockNumber = getNetwortBlockHeight() - confirmation + 1; + Thread.sleep(5000); // 避免连续访问btc.com + if(currentBlockHeight < networkBlockNumber) { + long startBlockNumber = currentBlockHeight + 1; + currentBlockHeight = (networkBlockNumber - currentBlockHeight > step) ? currentBlockHeight + step : networkBlockNumber; + logger.info("replay block from {} to {}", startBlockNumber, networkBlockNumber); + List deposits = this.replayBlock(startBlockNumber, currentBlockHeight); + if(deposits != null) { + deposits.forEach(deposit -> { + depositEvent.onConfirmed(deposit); + }); + //记录日志 + watcherLogService.update(coin.getName(), currentBlockHeight); + }else { + // 未扫描成功 + currentBlockHeight = startBlockNumber - 1; + } + }else { + logger.info("already latest height {},nothing to do!", currentBlockHeight); + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + + private List replayBlock(Long startBlockNumber, Long endBlockNumber) { + List deposits = new ArrayList(); + try { + int[] addressIndex = {0}; + // 获取高度 + JSONObject param = new JSONObject(); + param.put("jsonrpc", "2.0"); + param.put("id", "0"); + param.put("method", "get_transfers"); + + JSONObject param2 = new JSONObject(); + param2.put("in", true); + param2.put("account_index", 0); + param2.put("filter_by_height", true); + param2.put("min_height", startBlockNumber); // 开始高度 + param2.put("max_height", endBlockNumber); // 结束高度 + + Map headerParam = new HashMap(); + headerParam.put("Content-Type", "application/json"); + + logger.info("获取区块区间交易: 开始区块:{}, 结束区块:{}", startBlockNumber, endBlockNumber); + String result = HttpClientUtil.doHttpPost(this.blockApi, param.toJSONString(), headerParam); + if(result != null) { + JSONObject obj = JSONObject.parseObject(result); + JSONArray incommings = obj.getJSONObject("result").getJSONArray("in"); + if(incommings != null) { + logger.info("发现交易,共 {} 条", incommings.size()); + for(int i = 0; i < incommings.size(); i++) { + JSONObject incommObj = incommings.getJSONObject(i); + + BigDecimal amount = incommObj.getBigDecimal("amount").divide(BigDecimal.valueOf(1000000000000L)); + String txId = incommObj.getString("txid"); + Long blockHeight = incommObj.getLong("height"); + String paymentId = incommObj.getString("payment_id"); + + // 解析UID + StringBuilder uidS = new StringBuilder(); + for(int j = 0; j < 8; j++) { + uidS.append(paymentId.charAt(j*8 + 1)); + } + Long uid = Long.parseLong(uidS.toString(), 16) + 345678; + + logger.info("发现用户充值记录: 数量:{},用户:{},区块:{},paymentID:{}", amount, uid, blockHeight, paymentId); + Deposit deposit = new Deposit(); + deposit.setUserId(uid); //此处无需对memo处理,wallet.jar会处理 + deposit.setTxid(txId); + deposit.setBlockHeight(blockHeight); + deposit.setBlockHash(""); + deposit.setAmount(amount); + deposit.setAddress(coin.getDepositAddress()); + deposit.setTime(new Date()); + deposits.add(deposit); + } + }else { + logger.info("没有发现交易!"); + } + }else { + logger.info("获取区块区间交易失败,返回空!!!( 开始区块:{}, 结束区块:{})", startBlockNumber, endBlockNumber); + } + } + catch (Exception e){ + e.printStackTrace(); + return null; + } + return deposits; + } + + @Override + public void run() { + stop = false; + long nextCheck = 0; + while(!(Thread.interrupted() || stop)) { + if (nextCheck <= System.currentTimeMillis()) { + try { + nextCheck = System.currentTimeMillis() + checkInterval; + logger.info("check transactions..."); + check(); + } catch (Exception ex) { + logger.info(ex.getMessage()); + } + } + else { + try { + Thread.sleep(Math.max(nextCheck - System.currentTimeMillis(), 60000)); + } catch (InterruptedException ex) { + logger.info(ex.getMessage()); + } + } + } + } + + public Long getNetwortBlockHeight() { + int[] addressIndex = {0}; + // 获取高度 + JSONObject param = new JSONObject(); + param.put("jsonrpc", "2.0"); + param.put("id", "0"); + param.put("method", "get_height"); + + Map headerParam = new HashMap(); + headerParam.put("Content-Type", "application/json"); + + try { + String result = HttpClientUtil.doHttpPost(this.blockApi, param.toJSONString(), headerParam); + if(!StringUtils.isEmpty(result)) { + JSONObject obj = JSONObject.parseObject(result); + logger.info("获取区块高度:{}", obj.getJSONObject("result").getLong("height")); + return obj.getJSONObject("result").getLong("height"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return 0L; + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java new file mode 100644 index 00000000..2271ce88 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/CoinConfig.java @@ -0,0 +1,33 @@ +package com.bizzan.bc.wallet.config; + + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.WatcherSetting; + +/** + * 自动配置币种参数 + */ +@Configuration +@ConditionalOnProperty(name = "coin.name") +public class CoinConfig { + + @Bean + @ConfigurationProperties(prefix = "coin") + public Coin getCoin(){ + Coin coin = new Coin(); + return coin; + } + + @Bean + @ConfigurationProperties(prefix = "watcher") + public WatcherSetting getWatcherSetting(){ + WatcherSetting setting = new WatcherSetting(); + return setting; + } + +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java new file mode 100644 index 00000000..97c0a34c --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/KafkaConfiguration.java @@ -0,0 +1,9 @@ +package com.bizzan.bc.wallet.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; + +@Configuration +@EnableKafka +public class KafkaConfiguration { +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java new file mode 100644 index 00000000..0c9bd546 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/config/MongodbConfig.java @@ -0,0 +1,74 @@ +package com.bizzan.bc.wallet.config; + +import com.bizzan.bc.wallet.converter.BigDecimalToDecimal128Converter; +import com.bizzan.bc.wallet.converter.Decimal128ToBigDecimalConverter; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.convert.CustomConversions; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@ConditionalOnProperty(name="spring.data.mongodb.uri") +public class MongodbConfig extends AbstractMongoConfiguration { + @Value("${spring.data.mongodb.uri}") + private String uri; + + + public MongoClientURI getMongoClientURI(){ + return new MongoClientURI(uri); + } + + @Override + protected String getDatabaseName() { + return this.getMongoClientURI().getDatabase(); + } + + @Override + public Mongo mongo() throws Exception { + MongoClient mongoClient = new MongoClient(this.getMongoClientURI()); + return mongoClient; + } + + @Bean + public MongoDbFactory dbFactory() throws Exception { + return new SimpleMongoDbFactory(this.mongo(),this.getDatabaseName()); + } + + @Bean + public MongoMappingContext mongoMappingContext() { + MongoMappingContext mappingContext = new MongoMappingContext(); + return mappingContext; + } + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDbFactory dbFactory) throws Exception { + DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext()); + List list = new ArrayList<>(); + list.add(new BigDecimalToDecimal128Converter());//自定义的类型转换器 + list.add(new Decimal128ToBigDecimalConverter());//自定义的类型转换器 + converter.setCustomConversions(new CustomConversions(list)); + return converter; + } + + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory dbFactory,MappingMongoConverter converter) throws Exception { + return new MongoTemplate(dbFactory, converter); + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java new file mode 100644 index 00000000..878bd687 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/controller/WalletController.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.controller; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + +import org.litecoinj.core.Address; +import org.litecoinj.core.ECKey; +import org.litecoinj.core.NetworkParameters; +import org.litecoinj.params.MainNetParams; +import org.litecoinj.wallet.UnreadableWalletException; +import org.litecoinj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bizzan.bc.wallet.service.AccountService; +import com.bizzan.bc.wallet.util.HttpClientUtil; +import com.bizzan.bc.wallet.util.MessageResult; + +@RestController +@RequestMapping("/rpc") +public class WalletController { + + @Value("${bizzan.blockApi}") + private String blockApi; + + @Autowired + private AccountService accountService; + + private Logger logger = LoggerFactory.getLogger(WalletController.class); + + @GetMapping("height") + public MessageResult getHeight(){ + int[] addressIndex = {0}; + // 获取高度 + JSONObject param = new JSONObject(); + param.put("jsonrpc", "2.0"); + param.put("id", "0"); + param.put("method", "get_height"); + + Map headerParam = new HashMap(); + headerParam.put("Content-Type", "application/json"); + + try { + String result = HttpClientUtil.doHttpPost(this.blockApi, param.toJSONString(), headerParam); + JSONObject obj = JSONObject.parseObject(result); + Long height = obj.getJSONObject("result").getLong("height"); + MessageResult ret = new MessageResult(0, "success"); + ret.setData(height); + return ret; + } catch (Exception e) { + e.printStackTrace(); + } + return MessageResult.error(500,"查询失败"); + } + +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java new file mode 100644 index 00000000..52a4bf6a --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/converter/BigDecimalToDecimal128Converter.java @@ -0,0 +1,18 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class BigDecimalToDecimal128Converter implements Converter { + + public Decimal128 convert(BigDecimal bigDecimal) { + return new Decimal128(bigDecimal); + } + +} \ No newline at end of file diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java new file mode 100644 index 00000000..5dcb95a0 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/converter/Decimal128ToBigDecimalConverter.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.converter; + +import org.bson.types.Decimal128; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.math.BigDecimal; + +@ReadingConverter +@WritingConverter +public class Decimal128ToBigDecimalConverter implements Converter { + + public BigDecimal convert(Decimal128 decimal128) { + return decimal128.bigDecimalValue(); + } +} \ No newline at end of file diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java new file mode 100644 index 00000000..4688b07f --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Account.java @@ -0,0 +1,17 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Account { + private String account; + private String address; + //私钥路径 + private String walletFile; + private BigDecimal balance = BigDecimal.ZERO; + //地址燃料余额,对Token,USDT有用 + private BigDecimal gas = BigDecimal.ZERO; +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java new file mode 100644 index 00000000..b00684dd --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/BalanceSum.java @@ -0,0 +1,10 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BalanceSum { + private BigDecimal totalBalance; +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java new file mode 100644 index 00000000..435324bd --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Coin.java @@ -0,0 +1,20 @@ +package com.bizzan.bc.wallet.entity; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.math.BigInteger; + +@Data +public class Coin { + private String name; + private String unit; + private String rpc; + private String withdrawAddress; + private String withdrawWallet; + private String withdrawWalletPassword; + private BigDecimal minCollectAmount; + private BigInteger gasLimit; + private String depositAddress; +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java new file mode 100644 index 00000000..b8183b09 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/Deposit.java @@ -0,0 +1,21 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Deposit { + private String txid; + private String blockHash; + private Long blockHeight; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + private BigDecimal amount; + private String address; + private int status = 0; + private Long userId = 0L; +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java new file mode 100644 index 00000000..a667202b --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherLog.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; +import java.util.Date; + +@Data +public class WatcherLog { + private String coinName; + private Long lastSyncHeight; + private Date lastSyncTime; +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java new file mode 100644 index 00000000..a0233bde --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/entity/WatcherSetting.java @@ -0,0 +1,11 @@ +package com.bizzan.bc.wallet.entity; + +import lombok.Data; + +@Data +public class WatcherSetting { + private String initBlockHeight = "latest"; + private Long interval = 20000L; // 间隔时间 + private int step = 5; + private int confirmation = 3; +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java new file mode 100644 index 00000000..ae776eb6 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/event/ApplicationEvent.java @@ -0,0 +1,67 @@ +package com.bizzan.bc.wallet.event; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.component.Watcher; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.entity.WatcherLog; +import com.bizzan.bc.wallet.entity.WatcherSetting; +import com.bizzan.bc.wallet.service.DepositService; +import com.bizzan.bc.wallet.service.WatcherLogService; + +@Service +public class ApplicationEvent implements ApplicationListener { + private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class); + @Autowired + private DepositEvent depositEvent; + @Autowired(required = false) + private Watcher watcher; + @Autowired + private Coin coin; + @Autowired + private WatcherLogService watcherLogService; + @Autowired + private WatcherSetting watcherSetting; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + if(watcher != null) { + logger.info("=======Initialize Block Data Watcher====="); + WatcherLog watcherLog = watcherLogService.findOne(coin.getName()); + logger.info("watcherLog:{}",watcherLog); + if (watcherLog != null ) { + watcher.setCurrentBlockHeight(watcherLog.getLastSyncHeight()); + } else if(watcherSetting.getInitBlockHeight().equalsIgnoreCase("lasted")) { + watcher.setCurrentBlockHeight(watcher.getNetwortBlockHeight()); + }else { + Long height = Long.parseLong(watcherSetting.getInitBlockHeight()); + watcher.setCurrentBlockHeight(height); + } + //初始化参数 + //设置每次同步区块数量 + watcher.setStep(watcherSetting.getStep()); + //设置任务执行间隔 + watcher.setCheckInterval(watcherSetting.getInterval()); + watcher.setDepositEvent(depositEvent); + //设置币种配置信息 + watcher.setCoin(coin); + watcher.setWatcherLogService(watcherLogService); + //设置交易需要的确认数(时间差) + watcher.setConfirmation(watcherSetting.getConfirmation()); + + new Thread(watcher).start(); + } + else{ + logger.error("=====启动程序失败====="); + } + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java new file mode 100644 index 00000000..12833b81 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/event/DepositEvent.java @@ -0,0 +1,31 @@ +package com.bizzan.bc.wallet.event; + +import com.alibaba.fastjson.JSON; +import com.bizzan.bc.wallet.entity.Deposit; +import com.bizzan.bc.wallet.service.DepositService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class DepositEvent { + private Logger logger = LoggerFactory.getLogger(DepositEvent.class); + @Autowired + private DepositService depositService; + @Autowired + private KafkaTemplate kafkaTemplate; + @Value("${coin.name}") + private String coinName; + + public synchronized void onConfirmed(Deposit deposit){ + if(!depositService.exists(deposit)) { + logger.info("confirmed deposit,tx={} address={} amount={}", deposit.getTxid(), deposit.getAddress(), deposit.getAmount()); + depositService.save(deposit); + kafkaTemplate.send("deposit",coinName, JSON.toJSONString(deposit)); + } + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java new file mode 100644 index 00000000..2c97e066 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/AccountService.java @@ -0,0 +1,217 @@ +package com.bizzan.bc.wallet.service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.BalanceSum; +import com.bizzan.bc.wallet.entity.Coin; +import com.mongodb.BasicDBObject; +import com.mongodb.WriteResult; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +@Service +public class AccountService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + /** + * 获取集合名称 + * @return + */ + public String getCollectionName(){ + return coin.getUnit() + "_address_book"; + } + + public String getCollectionName(String coinUnit){ + return coinUnit + "_address_book"; + } + + public void save(Account account){ + mongoTemplate.insert(account,getCollectionName()); + } + + /** + * 根据账户名查找 + * @param coinUnit + * @param username + * @return + */ + public Account findByName(String coinUnit,String username){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(username); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName(coinUnit)); + } + + public Account findByName(String username){ + return findByName(coin.getUnit(),username); + } + + /** + * 根据地址查找 + * @param address + * @return + */ + public Account findByAddress(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.findOne(query,Account.class,getCollectionName()); + } + + public void removeByName(String name){ + Query query = new Query(); + Criteria criteria = Criteria.where("account").is(name); + query.addCriteria(criteria); + mongoTemplate.remove(query,getCollectionName()); + } + + public boolean isAddressExist(String address){ + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address); + query.addCriteria(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + /** + * 保存账号,并且删除老的的账号 + * @param username + * @param fileName + * @param address + */ + public void saveOne(String username, String fileName, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address.toLowerCase()); + account.setWalletFile(fileName); + save(account); + } + + public void saveOne(String username, String address) { + removeByName(username); + Account account = new Account(); + account.setAccount(username); + account.setAddress(address); + save(account); + } + + + /** + * 获取所有账户 + * @return + */ + public List findAll() { + return mongoTemplate.findAll(Account.class,getCollectionName()); + } + + /** + * 获取账户数量 + * @return + */ + public long count(){ + Query query = new Query(); + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + query.with(sort); + return mongoTemplate.count(query,getCollectionName()); + } + + /** + * 分页获取账户 + * @param pageNo + * @param pageSize + * @return + */ + public List find(int pageNo,int pageSize){ + Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(pageNo, pageSize, sort); + Query query = new Query(); + query.with(page); + return mongoTemplate.find(query,Account.class,getCollectionName()); + } + + + /** + * 根据余额查询 + * @param minAmount + * @return + */ + public List findByBalance(BigDecimal minAmount) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 根据余额和手续费查询 + * @param minAmount + * @param gasLimit + * @return + */ + public List findByBalanceAndGas(BigDecimal minAmount,BigDecimal gasLimit) { + Query query = new Query(); + Criteria criteria = Criteria.where("balance").gte(minAmount); + criteria.andOperator(Criteria.where("gas").gte(gasLimit)); + query.addCriteria(criteria); + Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "balance")); + query.with(sort); + return mongoTemplate.find(query, Account.class, getCollectionName()); + } + + /** + * 查询钱包总额 + * + * @return + */ + public BigDecimal findBalanceSum() { + Aggregation aggregation = Aggregation. + newAggregation(Aggregation.group("max").sum("balance").as("totalBalance")) + .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build()); + AggregationResults results = mongoTemplate.aggregate(aggregation, getCollectionName(), BalanceSum.class); + List list = results.getMappedResults(); + return list.get(0).getTotalBalance().setScale(8, BigDecimal.ROUND_DOWN); + } + + + /** + * 更新余额 + * + * @param address + * @param balance + */ + public void updateBalance(String address, BigDecimal balance) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + WriteResult result = mongoTemplate.updateFirst(query, Update.update("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)), getCollectionName()); + } + + public void updateBalanceAndGas(String address, BigDecimal balance,BigDecimal gas) { + Query query = new Query(); + Criteria criteria = Criteria.where("address").is(address.toLowerCase()); + query.addCriteria(criteria); + Update update = new Update(); + update.set("balance", balance.setScale(8, BigDecimal.ROUND_DOWN)); + update.set("gas",gas); + WriteResult result = mongoTemplate.updateFirst(query,update, getCollectionName()); + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java new file mode 100644 index 00000000..f2673ec5 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/DepositService.java @@ -0,0 +1,50 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.Account; +import com.bizzan.bc.wallet.entity.Coin; +import com.bizzan.bc.wallet.entity.Deposit; + +import java.util.List; + +@Service +public class DepositService { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private Coin coin; + + public void save(Deposit tx){ + mongoTemplate.insert(tx,getCollectionName()); + } + + public String getCollectionName(){ + return coin.getUnit() + "_deposit"; + } + + public boolean exists(Deposit deposit){ + Criteria criteria = Criteria.where("address").is(deposit.getAddress()) + .andOperator(Criteria.where("txid").is(deposit.getTxid())); + Query query = new Query(criteria); + return mongoTemplate.exists(query,getCollectionName()); + } + + + public Deposit findLatest(){ + Sort.Order order = new Sort.Order(Sort.Direction.DESC,"blockHeight"); + Sort sort = new Sort(order); + PageRequest page = new PageRequest(0, 1, sort); + Query query = new Query(); + query.with(page); + Deposit result = mongoTemplate.findOne(query,Deposit.class,getCollectionName()); + return result; + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java new file mode 100644 index 00000000..81abd473 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/service/WatcherLogService.java @@ -0,0 +1,65 @@ +package com.bizzan.bc.wallet.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.stereotype.Service; + +import com.bizzan.bc.wallet.entity.WatcherLog; + +import java.util.Date; + +@Service +public class WatcherLogService { + @Autowired + private MongoTemplate mongoTemplate; + + public void update(String coinName,Long height){ + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight",height); + update.set("lastSyncTime",new Date()); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(height); + watcherLog.setLastSyncTime(new Date()); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } + + public WatcherLog findOne(String coinName){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + return mongoTemplate.findOne(query, WatcherLog.class,"watcher_log"); + } + + public void updateTime(String coinName, Date endTime) { + WatcherLog watcherLog = findOne(coinName); + if(watcherLog != null){ + Query query = new Query(); + Criteria criteria = Criteria.where("coinName").is(coinName); + query.addCriteria(criteria); + Update update = new Update(); + update.set("lastSyncHeight", 0); + update.set("lastSyncTime", endTime); + mongoTemplate.updateFirst(query, update, "watcher_log"); + } + else{ + watcherLog = new WatcherLog(); + watcherLog.setCoinName(coinName); + watcherLog.setLastSyncHeight(0L); + watcherLog.setLastSyncTime(endTime); + mongoTemplate.insert(watcherLog,"watcher_log"); + } + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java new file mode 100644 index 00000000..d046675b --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/HttpClientUtil.java @@ -0,0 +1,312 @@ +package com.bizzan.bc.wallet.util; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpClientUtil { + + private static String charSet = "UTF-8"; + private static CloseableHttpClient httpClient = null; + private static CloseableHttpResponse response = null; + + /** + * https的post请求 + * @param url + * @param jsonstr + * @param charset + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity se = new StringEntity(jsonStr); + se.setContentType("text/json"); + se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(se); + + response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + try { + //请求发起客户端 + httpClient = SSLClient.createSSLClientDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + //jsonObject = JSONObject.fromObject(content); + return content; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * http的post请求(用于key-value格式的参数) + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url,Map param, Map headerPram) throws ClientProtocolException, IOException{ + try { + //请求发起客户端 + httpClient = HttpClients.createDefault(); + //参数集合 + List postParams = new ArrayList(); + //遍历参数并添加到集合 + for(Map.Entry entry:param.entrySet()){ + postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + + //通过post方式访问 + HttpPost post = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + post.setHeader(entry.getKey(), entry.getValue()); + } + } + HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); + post.setEntity(paramEntity); + response = httpClient.execute(post); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity valueEntity = response.getEntity(); + String content = EntityUtils.toString(valueEntity); + return content; + }else { + return null; + } + }finally{ + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + } + + /** + * http的post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpPost(String url, String jsonStr, Map headerPram) throws ClientProtocolException, IOException { + try { + httpClient = HttpClients.createDefault(); + + // 创建httpPost + HttpPost httpPost = new HttpPost(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpPost.setHeader(entry.getKey(), entry.getValue()); + } + } + + StringEntity entity = new StringEntity(jsonStr, charSet); + entity.setContentType("text/json"); + entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); + httpPost.setEntity(entity); + //发送post请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + + /** + * http的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + */ + public static String doHttpGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException { + CloseableHttpClient httpclient = null; + CloseableHttpResponse response = null; + + try { + httpclient = HttpClients.createDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + //发送gey请求 + HttpGet httpGet = new HttpGet(url); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpclient.execute(httpGet); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return EntityUtils.toString(response.getEntity()); + } + }finally{ + if(httpclient != null){ + httpclient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } + /** + * https的Get请求 + * @param url + * @param param + * @return + * @throws IOException + * @throws ClientProtocolException + * @throws KeyStoreException + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ + public static String doHttpsGet(String url, Map param, Map headerPram) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + try { + httpClient = SSLClient.createSSLClientDefault(); + if(param != null && !param.isEmpty()) { + //参数集合 + List getParams = new ArrayList(); + for(Map.Entry entry:param.entrySet()){ + getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); + } + HttpGet httpGet = new HttpGet(url); + RequestConfig rconfig = RequestConfig.custom() + .setConnectionRequestTimeout(2000) + .setSocketTimeout(4000) + .setConnectTimeout(3000) + .build(); + httpGet.setConfig(rconfig); + if(headerPram != null && !headerPram.isEmpty()) { + for(Map.Entry entry:headerPram.entrySet()){ + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + response = httpClient.execute(httpGet); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + return EntityUtils.toString(resEntity, charSet); + } + } + }finally { + if(httpClient != null){ + httpClient.close(); + } + if(response != null){ + response.close(); + } + } + return null; + } +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java new file mode 100644 index 00000000..9339fe61 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/MessageResult.java @@ -0,0 +1,61 @@ +package com.bizzan.bc.wallet.util; + + +import com.alibaba.fastjson.JSONObject; + +public class MessageResult { + private Object data; + public MessageResult(int code , String msg){ + this.code = code; + this.message = msg; + } + public MessageResult(int code , String msg, Object object){ + this.code = code; + this.message = msg; + this.data = object; + } + public MessageResult() { + // TODO Auto-generated constructor stub + } + + public static MessageResult success(){ + return new MessageResult(0,"SUCCESS"); + } + + public static MessageResult success(String msg){ + return new MessageResult(0,msg); + } + + public static MessageResult error(int code,String msg){ + return new MessageResult(code,msg); + } + + private int code; + private String message; + private Object Data; + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + public String toString(){ + return JSONObject.toJSONString(this); + //return "{\"code\":"+code+",\"message\":\""+message+"\"}"; + } + public Object getData() { + return Data; + } + public void setData(Object data) { + Data = data; + } + +} diff --git a/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java new file mode 100644 index 00000000..42736ce7 --- /dev/null +++ b/wallet/xmr/src/main/java/com/bizzan/bc/wallet/util/SSLClient.java @@ -0,0 +1,29 @@ +package com.bizzan.bc.wallet.util; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; + +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; + +public class SSLClient { + public static CloseableHttpClient createSSLClientDefault() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException{ + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + +} \ No newline at end of file diff --git a/wallet/xmr/src/main/resources/application.properties b/wallet/xmr/src/main/resources/application.properties new file mode 100644 index 00000000..f17edd2d --- /dev/null +++ b/wallet/xmr/src/main/resources/application.properties @@ -0,0 +1,32 @@ +server.port=7010 +spring.application.name=service-rpc-xmr +#kafka +# Kafka\u5355\u673A\u914D\u7F6E +spring.kafka.bootstrap-servers=111.111.111.111:9092 +# \u9ED8\u8BA4\u7EC4 +spring.kafka.consumer.group-id=default-group +# \u9ED8\u8BA4\u4E3B\u9898 +spring.kafka.template.default-topic= test +# \u5728\u4FA6\u542C\u5668\u5BB9\u5668\u4E2D\u8FD0\u884C\u7684\u7EBF\u7A0B\u6570\u0087\u008F +spring.kafka.listener.concurrency= 3 +# \u8FD9\u6709\u52A9\u4E8E\u63D0\u5347\u5BA2\u6237\u7AEF\u548C\u670D\u52A1\u5668\u4E0A\u7684\u6027\u80FD\uFF0C\u6B64\u914D\u7F6E\u63A7\u5236\u9ED8\u8BA4\u6279\u91CF\u5927\u5C0F\uFF08\u4EE5\u5B57\u8282\u4E3A\u5355\u4F4D\uFF09\uFF0C\u9ED8\u8BA4\u503C\u4E3A16384\u0087\u008F +spring.kafka.producer.batch-size= 1000 + +# mongodb +spring.data.mongodb.uri=mongodb://bizzan:fdsafdsafds@111.111.111.111:27017/wallet + +eureka.client.serviceUrl.defaultZone=http://111.111.111.111:7000/eureka/ +# \u4EE5IP\u5730\u5740\u6CE8\u518C\u5230\u670D\u52A1\u4E2D\u5FC3\uFF0C\u76F8\u4E92\u6CE8\u518C\u4F7F\u7528IP\u5730\u5740\u0090\u008D +eureka.instance.prefer-ip-address=true + +bizzan.blockApi=http://127.0.0.1:18082/json_rpc + +coin.rpc= +coin.name=Monero +coin.unit=XMR +coin.depositAddress=47ddRY4X3AhVzcnZ6Rcg7KWA3iX8DLyMWJLT5u5ugQDHn9kf2nFx49hrnT66Ry4ukV2s9iP6FPzrP1rwYLGnFZnLpBGD8f + +watcher.init-block-height=1926300 +watcher.step=5 +watcher.confirmation=5 +watcher.interval=300000 diff --git a/wallet/xmr/src/test/java/SimpleTest.java b/wallet/xmr/src/test/java/SimpleTest.java new file mode 100644 index 00000000..c58acce6 --- /dev/null +++ b/wallet/xmr/src/test/java/SimpleTest.java @@ -0,0 +1,13 @@ +import org.junit.Test; + +import java.math.BigDecimal; + +public class SimpleTest { + @Test + public void testBigdecimal(){ + BigDecimal a = new BigDecimal("12.5"); + System.out.println(a); + a.subtract(BigDecimal.ONE); + System.out.println(a); + } +}