Преглед изворни кода

Merge remote-tracking branch 'origin/master'

lxx пре 8 месеци
родитељ
комит
7eabef1ab7
77 измењених фајлова са 6389 додато и 34 уклоњено
  1. BIN
      .DS_Store
  2. 39 0
      binance/pom.xml
  3. 75 0
      binance/src/main/java/com/binance/connector/client/SpotClient.java
  4. 31 0
      binance/src/main/java/com/binance/connector/client/WebSocketApiClient.java
  5. 75 0
      binance/src/main/java/com/binance/connector/client/WebSocketStreamClient.java
  6. 17 0
      binance/src/main/java/com/binance/connector/client/enums/DefaultUrls.java
  7. 10 0
      binance/src/main/java/com/binance/connector/client/enums/HttpMethod.java
  8. 8 0
      binance/src/main/java/com/binance/connector/client/enums/RequestType.java
  9. 35 0
      binance/src/main/java/com/binance/connector/client/exceptions/BinanceClientException.java
  10. 10 0
      binance/src/main/java/com/binance/connector/client/exceptions/BinanceConnectorException.java
  11. 22 0
      binance/src/main/java/com/binance/connector/client/exceptions/BinanceServerException.java
  12. 186 0
      binance/src/main/java/com/binance/connector/client/impl/SpotClientImpl.java
  13. 142 0
      binance/src/main/java/com/binance/connector/client/impl/WebSocketApiClientImpl.java
  14. 292 0
      binance/src/main/java/com/binance/connector/client/impl/WebSocketStreamClientImpl.java
  15. 117 0
      binance/src/main/java/com/binance/connector/client/impl/spot/BSwap.java
  16. 62 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Blvt.java
  17. 34 0
      binance/src/main/java/com/binance/connector/client/impl/spot/C2C.java
  18. 63 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Convert.java
  19. 100 0
      binance/src/main/java/com/binance/connector/client/impl/spot/CryptoLoans.java
  20. 40 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Fiat.java
  21. 72 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Futures.java
  22. 52 0
      binance/src/main/java/com/binance/connector/client/impl/spot/GiftCard.java
  23. 279 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Margin.java
  24. 146 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Market.java
  25. 117 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Mining.java
  26. 49 0
      binance/src/main/java/com/binance/connector/client/impl/spot/NFT.java
  27. 32 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Pay.java
  28. 47 0
      binance/src/main/java/com/binance/connector/client/impl/spot/PortfolioMargin.java
  29. 32 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Rebate.java
  30. 114 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Savings.java
  31. 77 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Staking.java
  32. 259 0
      binance/src/main/java/com/binance/connector/client/impl/spot/SubAccount.java
  33. 125 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Trade.java
  34. 68 0
      binance/src/main/java/com/binance/connector/client/impl/spot/UserData.java
  35. 172 0
      binance/src/main/java/com/binance/connector/client/impl/spot/Wallet.java
  36. 44 0
      binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiAccount.java
  37. 27 0
      binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiGeneral.java
  38. 73 0
      binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiMarket.java
  39. 83 0
      binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiTrade.java
  40. 29 0
      binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiUserDataStream.java
  41. 77 0
      binance/src/main/java/com/binance/connector/client/utils/JSONParser.java
  42. 78 0
      binance/src/main/java/com/binance/connector/client/utils/ParameterChecker.java
  43. 23 0
      binance/src/main/java/com/binance/connector/client/utils/ProxyAuth.java
  44. 61 0
      binance/src/main/java/com/binance/connector/client/utils/RequestBuilder.java
  45. 58 0
      binance/src/main/java/com/binance/connector/client/utils/RequestHandler.java
  46. 105 0
      binance/src/main/java/com/binance/connector/client/utils/ResponseHandler.java
  47. 101 0
      binance/src/main/java/com/binance/connector/client/utils/UrlBuilder.java
  48. 98 0
      binance/src/main/java/com/binance/connector/client/utils/WebSocketConnection.java
  49. 46 0
      binance/src/main/java/com/binance/connector/client/utils/httpclient/HttpClientSingleton.java
  50. 15 0
      binance/src/main/java/com/binance/connector/client/utils/httpclient/WebSocketApiHttpClientSingleton.java
  51. 15 0
      binance/src/main/java/com/binance/connector/client/utils/httpclient/WebSocketStreamHttpClientSingleton.java
  52. 37 0
      binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/Ed25519SignatureGenerator.java
  53. 29 0
      binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/HmacSignatureGenerator.java
  54. 68 0
      binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/RsaSignatureGenerator.java
  55. 6 0
      binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/SignatureGenerator.java
  56. 66 0
      binance/src/main/java/com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.java
  57. 7 0
      binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketClosedCallback.java
  58. 7 0
      binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketClosingCallback.java
  59. 9 0
      binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketFailureCallback.java
  60. 7 0
      binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketMessageCallback.java
  61. 9 0
      binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketOpenCallback.java
  62. 9 0
      binance/src/main/resources/META-INF/maven/archetype.xml
  63. 15 0
      binance/src/main/resources/archetype-resources/pom.xml
  64. 13 0
      binance/src/main/resources/archetype-resources/src/main/java/App.java
  65. 38 0
      binance/src/main/resources/archetype-resources/src/test/java/AppTest.java
  66. 1907 0
      logs/sys-error.log
  67. 68 0
      logs/sys-info.log
  68. 1 0
      logs/sys-user.log
  69. 17 26
      pom.xml
  70. 11 0
      ruoyi-api/pom.xml
  71. 1 1
      ruoyi-api/src/main/resources/application-dev.yml
  72. 1 1
      ruoyi-api/target/classes/application-dev.yml
  73. 0 6
      ruoyi-common/pom.xml
  74. 33 0
      ruoyi-system/binance/.gitignore
  75. 72 0
      ruoyi-system/binance/pom.xml
  76. 13 0
      ruoyi-system/binance/src/main/java/com/binance/BinanceApplication.java
  77. 13 0
      ruoyi-system/binance/src/test/java/com/binance/BinanceApplicationTests.java

+ 39 - 0
binance/pom.xml

@@ -0,0 +1,39 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi</artifactId>
+        <version>3.8.5</version>
+    </parent>
+    <groupId>com.binance</groupId>
+    <artifactId>binance</artifactId>
+    <name>Archetype - binance</name>
+    <url>http://maven.apache.org</url>
+    <dependencies>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20230227</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.69</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 75 - 0
binance/src/main/java/com/binance/connector/client/SpotClient.java

@@ -0,0 +1,75 @@
+package com.binance.connector.client;
+
+import com.binance.connector.client.impl.spot.BSwap;
+import com.binance.connector.client.impl.spot.Blvt;
+import com.binance.connector.client.impl.spot.C2C;
+import com.binance.connector.client.impl.spot.Convert;
+import com.binance.connector.client.impl.spot.CryptoLoans;
+import com.binance.connector.client.impl.spot.Fiat;
+import com.binance.connector.client.impl.spot.Futures;
+import com.binance.connector.client.impl.spot.GiftCard;
+import com.binance.connector.client.impl.spot.Margin;
+import com.binance.connector.client.impl.spot.Market;
+import com.binance.connector.client.impl.spot.Mining;
+import com.binance.connector.client.impl.spot.NFT;
+import com.binance.connector.client.impl.spot.Pay;
+import com.binance.connector.client.impl.spot.PortfolioMargin;
+import com.binance.connector.client.impl.spot.Rebate;
+import com.binance.connector.client.impl.spot.Savings;
+import com.binance.connector.client.impl.spot.Staking;
+import com.binance.connector.client.impl.spot.SubAccount;
+import com.binance.connector.client.impl.spot.Trade;
+import com.binance.connector.client.impl.spot.UserData;
+import com.binance.connector.client.impl.spot.Wallet;
+import com.binance.connector.client.utils.ProxyAuth;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/SpotClient.class */
+public interface SpotClient {
+    void setShowLimitUsage(boolean z);
+
+    void setProxy(ProxyAuth proxyAuth);
+
+    void unsetProxy();
+
+    Blvt createBlvt();
+
+    BSwap createBswap();
+
+    C2C createC2C();
+
+    Convert createConvert();
+
+    CryptoLoans createCryptoLoans();
+
+    Fiat createFiat();
+
+    Futures createFutures();
+
+    GiftCard createGiftCard();
+
+    Market createMarket();
+
+    Margin createMargin();
+
+    Mining createMining();
+
+    NFT createNFT();
+
+    Pay createPay();
+
+    PortfolioMargin createPortfolioMargin();
+
+    Rebate createRebate();
+
+    Savings createSavings();
+
+    Staking createStaking();
+
+    SubAccount createSubAccount();
+
+    Trade createTrade();
+
+    UserData createUserData();
+
+    Wallet createWallet();
+}

+ 31 - 0
binance/src/main/java/com/binance/connector/client/WebSocketApiClient.java

@@ -0,0 +1,31 @@
+package com.binance.connector.client;
+
+import com.binance.connector.client.impl.websocketapi.WebSocketApiAccount;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiGeneral;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiMarket;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiTrade;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiUserDataStream;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosedCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosingCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketFailureCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketMessageCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketOpenCallback;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/WebSocketApiClient.class */
+public interface WebSocketApiClient {
+    void connect(WebSocketMessageCallback webSocketMessageCallback);
+
+    void connect(WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    void close();
+
+    WebSocketApiGeneral general();
+
+    WebSocketApiMarket market();
+
+    WebSocketApiTrade trade();
+
+    WebSocketApiAccount account();
+
+    WebSocketApiUserDataStream userDataStream();
+}

+ 75 - 0
binance/src/main/java/com/binance/connector/client/WebSocketStreamClient.java

@@ -0,0 +1,75 @@
+package com.binance.connector.client;
+
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosedCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosingCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketFailureCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketMessageCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketOpenCallback;
+import java.util.ArrayList;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/WebSocketStreamClient.class */
+public interface WebSocketStreamClient {
+    int aggTradeStream(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int aggTradeStream(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int tradeStream(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int tradeStream(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int klineStream(String str, String str2, WebSocketMessageCallback webSocketMessageCallback);
+
+    int klineStream(String str, String str2, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int miniTickerStream(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int miniTickerStream(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int allMiniTickerStream(WebSocketMessageCallback webSocketMessageCallback);
+
+    int allMiniTickerStream(WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int symbolTicker(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int symbolTicker(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int allTickerStream(WebSocketMessageCallback webSocketMessageCallback);
+
+    int allTickerStream(WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int rollingWindowTicker(String str, String str2, WebSocketMessageCallback webSocketMessageCallback);
+
+    int rollingWindowTicker(String str, String str2, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int allRollingWindowTicker(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int allRollingWindowTicker(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int bookTicker(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int bookTicker(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int allBookTickerStream(WebSocketMessageCallback webSocketMessageCallback);
+
+    int allBookTickerStream(WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int partialDepthStream(String str, int i, int i2, WebSocketMessageCallback webSocketMessageCallback);
+
+    int partialDepthStream(String str, int i, int i2, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int diffDepthStream(String str, int i, WebSocketMessageCallback webSocketMessageCallback);
+
+    int diffDepthStream(String str, int i, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int listenUserStream(String str, WebSocketMessageCallback webSocketMessageCallback);
+
+    int listenUserStream(String str, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    int combineStreams(ArrayList<String> arrayList, WebSocketMessageCallback webSocketMessageCallback);
+
+    int combineStreams(ArrayList<String> arrayList, WebSocketOpenCallback webSocketOpenCallback, WebSocketMessageCallback webSocketMessageCallback, WebSocketClosingCallback webSocketClosingCallback, WebSocketClosedCallback webSocketClosedCallback, WebSocketFailureCallback webSocketFailureCallback);
+
+    void closeConnection(int i);
+
+    void closeAllConnections();
+}

+ 17 - 0
binance/src/main/java/com/binance/connector/client/enums/DefaultUrls.java

@@ -0,0 +1,17 @@
+package com.binance.connector.client.enums;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/enums/DefaultUrls.class */
+public final class DefaultUrls {
+    public static final String PROD_URL = "https://api.binance.com";
+    //public static final String WS_URL = "wss://stream.binance.com:9443";
+    public static final String WS_URL = "wss://stream.c.b2c2.top";
+    public static final String WS_API_URL = "wss://ws-api.binance.com:443/ws-api/v3";
+    public static final String TESTNET_URL = "https://testnet.binance.vision";
+    public static final String TESTNET_WS_URL = "wss://testnet.binance.vision";
+    public static final String TESTNET_WS_API_URL = "wss://testnet.binance.vision/ws-api/v3";
+    public static final String MARKET_URL = "https://data-api.binance.vision";
+    public static final String MARKET_WS_URL = "wss://data-stream.binance.vision";
+
+    private DefaultUrls() {
+    }
+}

+ 10 - 0
binance/src/main/java/com/binance/connector/client/enums/HttpMethod.java

@@ -0,0 +1,10 @@
+package com.binance.connector.client.enums;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/enums/HttpMethod.class */
+public enum HttpMethod {
+    POST,
+    GET,
+    PUT,
+    DELETE,
+    INVALID
+}

+ 8 - 0
binance/src/main/java/com/binance/connector/client/enums/RequestType.java

@@ -0,0 +1,8 @@
+package com.binance.connector.client.enums;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/enums/RequestType.class */
+public enum RequestType {
+    PUBLIC,
+    WITH_API_KEY,
+    SIGNED
+}

+ 35 - 0
binance/src/main/java/com/binance/connector/client/exceptions/BinanceClientException.java

@@ -0,0 +1,35 @@
+package com.binance.connector.client.exceptions;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/exceptions/BinanceClientException.class */
+public class BinanceClientException extends RuntimeException {
+    private static final long serialVersionUID = 1;
+    private final int ERROR_CODE_0 = 0;
+    private final int httpStatusCode;
+    private final int errorCode;
+    private String errMsg;
+
+    public BinanceClientException(String fullErrMsg, int httpStatusCode) {
+        super(fullErrMsg);
+        this.httpStatusCode = httpStatusCode;
+        this.errorCode = 0;
+    }
+
+    public BinanceClientException(String fullErrMsg, String errMsg, int httpStatusCode, int errorCode) {
+        super(fullErrMsg);
+        this.httpStatusCode = httpStatusCode;
+        this.errorCode = errorCode;
+        this.errMsg = errMsg;
+    }
+
+    public int getErrorCode() {
+        return this.errorCode;
+    }
+
+    public int getHttpStatusCode() {
+        return this.httpStatusCode;
+    }
+
+    public String getErrMsg() {
+        return this.errMsg;
+    }
+}

+ 10 - 0
binance/src/main/java/com/binance/connector/client/exceptions/BinanceConnectorException.java

@@ -0,0 +1,10 @@
+package com.binance.connector.client.exceptions;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/exceptions/BinanceConnectorException.class */
+public class BinanceConnectorException extends RuntimeException {
+    private static final long serialVersionUID = 1;
+
+    public BinanceConnectorException(String fullErrMsg) {
+        super(fullErrMsg);
+    }
+}

+ 22 - 0
binance/src/main/java/com/binance/connector/client/exceptions/BinanceServerException.java

@@ -0,0 +1,22 @@
+package com.binance.connector.client.exceptions;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/exceptions/BinanceServerException.class */
+public class BinanceServerException extends RuntimeException {
+    private static final long serialVersionUID = 1;
+    private static final int invalidStatusCode = -1;
+    private final int httpStatusCode;
+
+    public BinanceServerException(String fullErrMsg) {
+        super(fullErrMsg);
+        this.httpStatusCode = invalidStatusCode;
+    }
+
+    public BinanceServerException(String fullErrMsg, int httpStatusCode) {
+        super(fullErrMsg);
+        this.httpStatusCode = httpStatusCode;
+    }
+
+    public int getHttpStatusCode() {
+        return this.httpStatusCode;
+    }
+}

+ 186 - 0
binance/src/main/java/com/binance/connector/client/impl/SpotClientImpl.java

@@ -0,0 +1,186 @@
+package com.binance.connector.client.impl;
+
+import com.binance.connector.client.SpotClient;
+import com.binance.connector.client.enums.DefaultUrls;
+import com.binance.connector.client.impl.spot.BSwap;
+import com.binance.connector.client.impl.spot.Blvt;
+import com.binance.connector.client.impl.spot.C2C;
+import com.binance.connector.client.impl.spot.Convert;
+import com.binance.connector.client.impl.spot.CryptoLoans;
+import com.binance.connector.client.impl.spot.Fiat;
+import com.binance.connector.client.impl.spot.Futures;
+import com.binance.connector.client.impl.spot.GiftCard;
+import com.binance.connector.client.impl.spot.Margin;
+import com.binance.connector.client.impl.spot.Market;
+import com.binance.connector.client.impl.spot.Mining;
+import com.binance.connector.client.impl.spot.NFT;
+import com.binance.connector.client.impl.spot.Pay;
+import com.binance.connector.client.impl.spot.PortfolioMargin;
+import com.binance.connector.client.impl.spot.Rebate;
+import com.binance.connector.client.impl.spot.Savings;
+import com.binance.connector.client.impl.spot.Staking;
+import com.binance.connector.client.impl.spot.SubAccount;
+import com.binance.connector.client.impl.spot.Trade;
+import com.binance.connector.client.impl.spot.UserData;
+import com.binance.connector.client.impl.spot.Wallet;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/SpotClientImpl.class */
+public class SpotClientImpl implements SpotClient {
+    private final String apiKey;
+    private final SignatureGenerator signatureGenerator;
+    private final String baseUrl;
+    private boolean showLimitUsage;
+    private ProxyAuth proxy;
+
+    public SpotClientImpl() {
+        this(DefaultUrls.PROD_URL);
+    }
+
+    public SpotClientImpl(String baseUrl) {
+        this("", (SignatureGenerator) null, baseUrl);
+    }
+
+    public SpotClientImpl(String baseUrl, boolean showLimitUsage) {
+        this(baseUrl);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public SpotClientImpl(String apiKey, String secretKey) {
+        this(apiKey, secretKey, DefaultUrls.PROD_URL);
+    }
+
+    public SpotClientImpl(String apiKey, String secretKey, String baseUrl) {
+        this(apiKey, new HmacSignatureGenerator(secretKey), baseUrl);
+    }
+
+    public SpotClientImpl(String apiKey, SignatureGenerator signatureGenerator, String baseUrl) {
+        this.showLimitUsage = false;
+        this.proxy = null;
+        this.apiKey = apiKey;
+        this.signatureGenerator = signatureGenerator;
+        this.baseUrl = baseUrl;
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public void setShowLimitUsage(boolean showLimitUsage) {
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public void setProxy(ProxyAuth proxy) {
+        this.proxy = proxy;
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public void unsetProxy() {
+        this.proxy = null;
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Blvt createBlvt() {
+        return new Blvt(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public BSwap createBswap() {
+        return new BSwap(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public C2C createC2C() {
+        return new C2C(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Convert createConvert() {
+        return new Convert(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public CryptoLoans createCryptoLoans() {
+        return new CryptoLoans(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Fiat createFiat() {
+        return new Fiat(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Futures createFutures() {
+        return new Futures(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public GiftCard createGiftCard() {
+        return new GiftCard(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Margin createMargin() {
+        return new Margin(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Market createMarket() {
+        return new Market(this.baseUrl, this.apiKey, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Mining createMining() {
+        return new Mining(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public NFT createNFT() {
+        return new NFT(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Pay createPay() {
+        return new Pay(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public PortfolioMargin createPortfolioMargin() {
+        return new PortfolioMargin(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Rebate createRebate() {
+        return new Rebate(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Savings createSavings() {
+        return new Savings(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Staking createStaking() {
+        return new Staking(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public SubAccount createSubAccount() {
+        return new SubAccount(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Trade createTrade() {
+        return new Trade(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public UserData createUserData() {
+        return new UserData(this.baseUrl, this.apiKey, this.showLimitUsage, this.proxy);
+    }
+
+    @Override // com.binance.connector.client.SpotClient
+    public Wallet createWallet() {
+        return new Wallet(this.baseUrl, this.apiKey, this.signatureGenerator, this.showLimitUsage, this.proxy);
+    }
+}

+ 142 - 0
binance/src/main/java/com/binance/connector/client/impl/WebSocketApiClientImpl.java

@@ -0,0 +1,142 @@
+package com.binance.connector.client.impl;
+
+import com.binance.connector.client.WebSocketApiClient;
+import com.binance.connector.client.enums.DefaultUrls;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiAccount;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiGeneral;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiMarket;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiTrade;
+import com.binance.connector.client.impl.websocketapi.WebSocketApiUserDataStream;
+import com.binance.connector.client.utils.RequestBuilder;
+import com.binance.connector.client.utils.WebSocketConnection;
+import com.binance.connector.client.utils.httpclient.WebSocketApiHttpClientSingleton;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import com.binance.connector.client.utils.websocketapi.WebSocketApiRequestHandler;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosedCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosingCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketFailureCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketMessageCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketOpenCallback;
+import okhttp3.OkHttpClient;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/WebSocketApiClientImpl.class */
+public class WebSocketApiClientImpl implements WebSocketApiClient {
+    private static final OkHttpClient client = WebSocketApiHttpClientSingleton.getHttpClient();
+    private final SignatureGenerator signatureGenerator;
+    private final String apiKey;
+    private final String baseUrl;
+    private final WebSocketOpenCallback noopOpenCallback;
+    private final WebSocketClosingCallback noopClosingCallback;
+    private final WebSocketClosedCallback noopClosedCallback;
+    private final WebSocketFailureCallback noopFailureCallback;
+    private WebSocketConnection connection;
+    private WebSocketApiRequestHandler requestHandler;
+    private WebSocketApiGeneral wsApiGeneral;
+    private WebSocketApiMarket wsApiMarket;
+    private WebSocketApiTrade wsApiTrade;
+    private WebSocketApiAccount wsApiAccount;
+    private WebSocketApiUserDataStream wsApiUserDataStream;
+
+    public WebSocketApiClientImpl() {
+        this("", null);
+    }
+
+    public WebSocketApiClientImpl(String baseUrl) {
+        this("", null, baseUrl);
+    }
+
+    public WebSocketApiClientImpl(String apiKey, SignatureGenerator signatureGenerator) {
+        this(apiKey, signatureGenerator, DefaultUrls.WS_API_URL);
+    }
+
+    public WebSocketApiClientImpl(String apiKey, SignatureGenerator signatureGenerator, String baseUrl) {
+        this.noopOpenCallback = response -> {
+        };
+        this.noopClosingCallback = (code, reason) -> {
+        };
+        this.noopClosedCallback = (code, reason) -> {
+        };
+        this.noopFailureCallback = (throwable, response) -> {
+        };
+        this.apiKey = apiKey;
+        this.signatureGenerator = signatureGenerator;
+        this.baseUrl = baseUrl;
+    }
+
+    private void checkRequestHandler() {
+        if (this.requestHandler == null) {
+            throw new BinanceConnectorException("No WebSocket API connection to submit request. Please connect first.");
+        }
+    }
+
+    private void checkCategoryInstance(Object categoryInstance, Class<?> categoryClass) {
+        if (categoryInstance != null) {
+            return;
+        }
+        if (categoryClass == WebSocketApiGeneral.class) {
+            this.wsApiGeneral = new WebSocketApiGeneral(this.requestHandler);
+        } else if (categoryClass == WebSocketApiMarket.class) {
+            this.wsApiMarket = new WebSocketApiMarket(this.requestHandler);
+        } else if (categoryClass == WebSocketApiTrade.class) {
+            this.wsApiTrade = new WebSocketApiTrade(this.requestHandler);
+        } else if (categoryClass == WebSocketApiAccount.class) {
+            this.wsApiAccount = new WebSocketApiAccount(this.requestHandler);
+        } else if (categoryClass == WebSocketApiUserDataStream.class) {
+            this.wsApiUserDataStream = new WebSocketApiUserDataStream(this.requestHandler);
+        }
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public void connect(WebSocketMessageCallback onMessageCallback) {
+        connect(this.noopOpenCallback, onMessageCallback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public void connect(WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        this.connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(this.baseUrl), client);
+        this.requestHandler = new WebSocketApiRequestHandler(this.connection, this.apiKey, this.signatureGenerator);
+        this.connection.connect();
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public void close() {
+        this.connection.close();
+        client.dispatcher().executorService().shutdown();
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public WebSocketApiGeneral general() {
+        checkRequestHandler();
+        checkCategoryInstance(this.wsApiGeneral, WebSocketApiGeneral.class);
+        return this.wsApiGeneral;
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public WebSocketApiMarket market() {
+        checkRequestHandler();
+        checkCategoryInstance(this.wsApiMarket, WebSocketApiMarket.class);
+        return this.wsApiMarket;
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public WebSocketApiTrade trade() {
+        checkRequestHandler();
+        checkCategoryInstance(this.wsApiTrade, WebSocketApiTrade.class);
+        return this.wsApiTrade;
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public WebSocketApiAccount account() {
+        checkRequestHandler();
+        checkCategoryInstance(this.wsApiAccount, WebSocketApiAccount.class);
+        return this.wsApiAccount;
+    }
+
+    @Override // com.binance.connector.client.WebSocketApiClient
+    public WebSocketApiUserDataStream userDataStream() {
+        checkRequestHandler();
+        checkCategoryInstance(this.wsApiUserDataStream, WebSocketApiUserDataStream.class);
+        return this.wsApiUserDataStream;
+    }
+}

+ 292 - 0
binance/src/main/java/com/binance/connector/client/impl/WebSocketStreamClientImpl.java

@@ -0,0 +1,292 @@
+package com.binance.connector.client.impl;
+
+import com.binance.connector.client.WebSocketStreamClient;
+import com.binance.connector.client.enums.DefaultUrls;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.RequestBuilder;
+import com.binance.connector.client.utils.UrlBuilder;
+import com.binance.connector.client.utils.WebSocketConnection;
+import com.binance.connector.client.utils.httpclient.WebSocketStreamHttpClientSingleton;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosedCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosingCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketFailureCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketMessageCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketOpenCallback;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/WebSocketStreamClientImpl.class */
+public class WebSocketStreamClientImpl implements WebSocketStreamClient {
+    private static final Logger logger = LoggerFactory.getLogger(WebSocketStreamClientImpl.class);
+    private static final OkHttpClient client = WebSocketStreamHttpClientSingleton.getHttpClient();
+    private final String baseUrl;
+    private final Map<Integer, WebSocketConnection> connections;
+    private final WebSocketOpenCallback noopOpenCallback;
+    private final WebSocketClosingCallback noopClosingCallback;
+    private final WebSocketClosedCallback noopClosedCallback;
+    private final WebSocketFailureCallback noopFailureCallback;
+
+    public WebSocketStreamClientImpl() {
+        this.connections = new HashMap();
+        this.noopOpenCallback = response -> {
+        };
+        this.noopClosingCallback = (code, reason) -> {
+        };
+        this.noopClosedCallback = (code, reason) -> {
+        };
+        this.noopFailureCallback = (throwable, response) -> {
+        };
+        this.baseUrl = DefaultUrls.WS_URL;
+    }
+
+    public WebSocketStreamClientImpl(String baseUrl) {
+        this.connections = new HashMap();
+        this.noopOpenCallback = response -> {
+        };
+        this.noopClosingCallback =( code, reason) -> {
+        };
+        this.noopClosedCallback = (code, reason) -> {
+        };
+        this.noopFailureCallback = (throwable, response) -> {
+        };
+        this.baseUrl = baseUrl;
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int aggTradeStream(String symbol, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return aggTradeStream(symbol.toLowerCase(), this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int aggTradeStream(String symbol, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@aggTrade", this.baseUrl, symbol.toLowerCase())));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int tradeStream(String symbol, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return tradeStream(symbol.toLowerCase(), this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int tradeStream(String symbol, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@trade", this.baseUrl, symbol.toLowerCase())));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int klineStream(String symbol, String interval, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return klineStream(symbol.toLowerCase(), interval, this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int klineStream(String symbol, String interval, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@kline_%s", this.baseUrl, symbol.toLowerCase(), interval)));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int miniTickerStream(String symbol, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return miniTickerStream(symbol.toLowerCase(), this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int miniTickerStream(String symbol, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@miniTicker", this.baseUrl, symbol.toLowerCase())));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allMiniTickerStream(WebSocketMessageCallback callback) {
+        return allMiniTickerStream(this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allMiniTickerStream(WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/!miniTicker@arr", this.baseUrl)));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int symbolTicker(String symbol, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return symbolTicker(symbol.toLowerCase(), this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int symbolTicker(String symbol, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@ticker", this.baseUrl, symbol.toLowerCase())));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allTickerStream(WebSocketMessageCallback callback) {
+        return allTickerStream(this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allTickerStream(WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/!ticker@arr", this.baseUrl)));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int rollingWindowTicker(String symbol, String windowSize, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(symbol, String.class, "windowSize");
+        if (new ArrayList<String>() { // from class: com.binance.connector.client.impl.WebSocketStreamClientImpl.1
+            {
+                add("1h");
+                add("4h");
+            }
+        }.contains(windowSize)) {
+            return rollingWindowTicker(symbol.toLowerCase(), windowSize, this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+        }
+        throw new BinanceConnectorException(String.format("\"%s\" is not a valid window size.", windowSize));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int rollingWindowTicker(String symbol, String windowSize, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(symbol, String.class, "windowSize");
+        if (new ArrayList<String>() { // from class: com.binance.connector.client.impl.WebSocketStreamClientImpl.2
+            {
+                add("1h");
+                add("4h");
+            }
+        }.contains(windowSize)) {
+            return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@ticker_%s", this.baseUrl, symbol.toLowerCase(), windowSize)));
+        }
+        throw new BinanceConnectorException(String.format("\"%s\" is not a valid window size.", windowSize));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allRollingWindowTicker(String windowSize, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(windowSize, String.class, "windowSize");
+        if (new ArrayList<String>() { // from class: com.binance.connector.client.impl.WebSocketStreamClientImpl.3
+            {
+                add("1h");
+                add("4h");
+            }
+        }.contains(windowSize.toLowerCase())) {
+            return allRollingWindowTicker(windowSize.toLowerCase(), this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+        }
+        throw new BinanceConnectorException(String.format("\"%s\" is not a valid window size.", windowSize.toLowerCase()));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allRollingWindowTicker(String windowSize, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(windowSize, String.class, "windowSize");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/!ticker_%s@arr", this.baseUrl, windowSize.toLowerCase())));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int bookTicker(String symbol, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return bookTicker(symbol.toLowerCase(), this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int bookTicker(String symbol, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@bookTicker", this.baseUrl, symbol.toLowerCase())));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allBookTickerStream(WebSocketMessageCallback callback) {
+        return allBookTickerStream(this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int allBookTickerStream(WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/!bookTicker", this.baseUrl)));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int partialDepthStream(String symbol, int levels, int speed, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return partialDepthStream(symbol.toLowerCase(), levels, speed, this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int partialDepthStream(String symbol, int levels, int speed, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@depth%s@%sms", this.baseUrl, symbol.toLowerCase(), Integer.valueOf(levels), Integer.valueOf(speed))));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int diffDepthStream(String symbol, int speed, WebSocketMessageCallback callback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return diffDepthStream(symbol.toLowerCase(), speed, this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int diffDepthStream(String symbol, int speed, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s@depth@%sms", this.baseUrl, symbol.toLowerCase(), Integer.valueOf(speed))));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int listenUserStream(String listenKey, WebSocketMessageCallback callback) {
+        return listenUserStream(listenKey, this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int listenUserStream(String listenKey, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(String.format("%s/ws/%s", this.baseUrl, listenKey)));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int combineStreams(ArrayList<String> streams, WebSocketMessageCallback callback) {
+        return combineStreams(streams, this.noopOpenCallback, callback, this.noopClosingCallback, this.noopClosedCallback, this.noopFailureCallback);
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public int combineStreams(ArrayList<String> streams, WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback) {
+        return createConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, RequestBuilder.buildWebSocketRequest(UrlBuilder.buildStreamUrl(this.baseUrl, streams)));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public void closeConnection(int connectionId) {
+        if (this.connections.containsKey(Integer.valueOf(connectionId))) {
+            this.connections.get(Integer.valueOf(connectionId)).close();
+            logger.info("Closing Connection ID {}", Integer.valueOf(connectionId));
+            this.connections.remove(Integer.valueOf(connectionId));
+            return;
+        }
+        logger.info("Connection ID {} does not exist!", Integer.valueOf(connectionId));
+    }
+
+    @Override // com.binance.connector.client.WebSocketStreamClient
+    public void closeAllConnections() {
+        if (!this.connections.isEmpty()) {
+            logger.info("Closing {} connections(s)", Integer.valueOf(this.connections.size()));
+            Iterator<Map.Entry<Integer, WebSocketConnection>> iter = this.connections.entrySet().iterator();
+            while (iter.hasNext()) {
+                iter.next().getValue().close();
+                iter.remove();
+            }
+        }
+        if (this.connections.isEmpty()) {
+            client.dispatcher().executorService().shutdown();
+            logger.info("All connections are closed!");
+        }
+    }
+
+    private int createConnection(WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback, Request request) {
+        WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onClosedCallback, onFailureCallback, request, client);
+        connection.connect();
+        int connectionId = connection.getConnectionId();
+        this.connections.put(Integer.valueOf(connectionId), connection);
+        return connectionId;
+    }
+}

+ 117 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/BSwap.java

@@ -0,0 +1,117 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/BSwap.class */
+public class BSwap {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String SWAP_POOLS = "/sapi/v1/bswap/pools";
+    private final String LIQUIDITY = "/sapi/v1/bswap/liquidity";
+    private final String LIQUIDITY_ADD = "/sapi/v1/bswap/liquidityAdd";
+    private final String LIQUIDITY_REMOVE = "/sapi/v1/bswap/liquidityRemove";
+    private final String LIQUIDITY_OPS = "/sapi/v1/bswap/liquidityOps";
+    private final String QUOTE = "/sapi/v1/bswap/quote";
+    private final String SWAP = "/sapi/v1/bswap/swap";
+    private final String POOL_CONFIGURE = "/sapi/v1/bswap/poolConfigure";
+    private final String ADD_LIQUIDITY_PREVIEW = "/sapi/v1/bswap/addLiquidityPreview";
+    private final String REMOVE_LIQUIDITY_PREVIEW = "/sapi/v1/bswap/removeLiquidityPreview";
+    private final String UNCLAIMED_REWARDS = "/sapi/v1/bswap/unclaimedRewards";
+    private final String CLAIM_REWARDS = "/sapi/v1/bswap/claimRewards";
+    private final String CLAIM_HISTORY = "/sapi/v1/bswap/claimedHistory";
+
+    public BSwap(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public BSwap(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String swapPools() {
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/bswap/pools", null, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String liquidity(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/liquidity", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String liquidityAdd(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "poolId", Long.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "quantity");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/liquidityAdd", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String liquidityRemove(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "poolId", Long.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "shareAmount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/liquidityRemove", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String liquidityOps(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/liquidityOps", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String quote(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "quoteAsset", String.class);
+        ParameterChecker.checkParameter(parameters, "baseAsset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "quoteQty");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/quote", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String swap(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "quoteAsset", String.class);
+        ParameterChecker.checkParameter(parameters, "baseAsset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "quoteQty");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/swap", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String swapHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/swap", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String poolConfigure(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/poolConfigure", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String addLiquidityPreview(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "poolId", Long.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        ParameterChecker.checkParameter(parameters, "quoteAsset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "quoteQty");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/addLiquidityPreview", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String removeLiquidityPreview(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "poolId", Long.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        ParameterChecker.checkParameter(parameters, "quoteAsset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "shareAmount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/removeLiquidityPreview", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String unclaimedRewards(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/unclaimedRewards", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String claimRewards(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/claimRewards", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String claimedHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bswap/claimedHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 62 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Blvt.java

@@ -0,0 +1,62 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Blvt.class */
+public class Blvt {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String BLVT_INFO = "/sapi/v1/blvt/tokenInfo";
+    private final String SUBSCRIBE = "/sapi/v1/blvt/subscribe";
+    private final String SUBSCRIPTION_RECORD = "/sapi/v1/blvt/subscribe/record";
+    private final String REDEEM = "/sapi/v1/blvt/redeem";
+    private final String REDEEM_RECORD = "/sapi/v1/blvt/redeem/record";
+    private final String USER_LIMIT = "/sapi/v1/blvt/userLimit";
+
+    public Blvt(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Blvt(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String blvtInfo(Map<String, Object> parameters) {
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/blvt/tokenInfo", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String subscribe(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "tokenName", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "cost");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/blvt/subscribe", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String subscriptionRecord(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/blvt/subscribe/record", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String redeem(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "tokenName", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/blvt/redeem", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String redeemRecord(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/blvt/redeem/record", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String userLimit(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/blvt/userLimit", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 34 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/C2C.java

@@ -0,0 +1,34 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/C2C.class */
+public class C2C {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String LIST_ORDER_HISTORY = "/sapi/v1/c2c/orderMatch/listUserOrderHistory";
+
+    public C2C(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public C2C(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String listUserOrderHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "tradeType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/c2c/orderMatch/listUserOrderHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 63 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Convert.java

@@ -0,0 +1,63 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Convert.class */
+public class Convert {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String TRADE_FLOW = "/sapi/v1/convert/tradeFlow";
+    private final String EXCHANGE_INFO = "/sapi/v1/convert/exchangeInfo";
+    private final String ASSET_QUANTITY_PRECISION = "/sapi/v1/convert/assetInfo";
+    private final String QUOTE_INQUIRY = "/sapi/v1/convert/getQuote";
+    private final String ACCEPT_QUOTE = "/sapi/v1/convert/acceptQuote";
+    private final String ORDER_STATUS = "/sapi/v1/convert/orderStatus";
+
+    public Convert(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Convert(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String tradeFlow(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "startTime", Long.class);
+        ParameterChecker.checkParameter(parameters, "endTime", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/convert/tradeFlow", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String exchangeInfo(Map<String, Object> parameters) {
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/sapi/v1/convert/exchangeInfo", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String assetQuantityPrecision(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/convert/assetInfo", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String quoteInquiry(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "fromAsset", String.class);
+        ParameterChecker.checkParameter(parameters, "toAsset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/convert/getQuote", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String acceptQuote(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "quoteId", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/convert/acceptQuote", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String orderStatus(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/convert/orderStatus", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 100 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/CryptoLoans.java

@@ -0,0 +1,100 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/CryptoLoans.class */
+public class CryptoLoans {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String LOAN_INCOME = "/sapi/v1/loan/income";
+    private final String LOAN_BORROW = "/sapi/v1/loan/borrow";
+    private final String LOAN_BORROW_HISTORY = "/sapi/v1/loan/borrow/history";
+    private final String LOAN_ONGOING_ORDERS = "/sapi/v1/loan/ongoing/orders";
+    private final String LOAN_REPAY = "/sapi/v1/loan/repay";
+    private final String LOAN_REPAY_HISTORY = "/sapi/v1/loan/repay/history";
+    private final String LOAN_ADJUST_LTV = "/sapi/v1/loan/adjust/ltv";
+    private final String LOAN_ADJUST_LTV_HISTORY = "/sapi/v1/loan/ltv/adjustment/history";
+    private final String LOANABLE_ASSETS_DATA = "/sapi/v1/loan/loanable/data";
+    private final String COLLATERAL_ASSETS_DATA = "/sapi/v1/loan/collateral/data";
+    private final String COLLATERAL_REPAY_RATE = "/sapi/v1/loan/repay/collateral/rate";
+    private final String CUSTOMIZE_MARGIN_CALL = "/sapi/v1/loan/customize/margin_call";
+
+    public CryptoLoans(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public CryptoLoans(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String loanIncome(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/income", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanBorrow(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "loanCoin", String.class);
+        ParameterChecker.checkParameter(parameters, "collateralCoin", String.class);
+        ParameterChecker.checkParameter(parameters, "loanTerm", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/borrow", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String loanBorrowHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/borrow/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanOngoingOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/ongoing/orders", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanRepay(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "orderId", Long.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/repay", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String loanRepayHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/repay/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanAdjustLTV(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "orderId", Long.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/adjust/ltv", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String loanAdjustLTVHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/ltv/adjustment/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanAssetsData(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/loanable/data", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String collateralAssetsData(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/collateral/data", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String collateralRepayRate(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "loanCoin", String.class);
+        ParameterChecker.checkParameter(parameters, "collateralCoin", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "repayAmount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/repay/collateral/rate", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String customizeMarginCall(Map<String, Object> parameters) {
+        ParameterChecker.checkRequiredParameter(parameters, "marginCall");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/loan/customize/margin_call", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+}

+ 40 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Fiat.java

@@ -0,0 +1,40 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Fiat.class */
+public class Fiat {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String ORDERS = "/sapi/v1/fiat/orders";
+    private final String PAYMENTS = "/sapi/v1/fiat/payments";
+
+    public Fiat(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Fiat(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String orders(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "transactionType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/fiat/orders", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String payments(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "transactionType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/fiat/payments", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 72 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Futures.java

@@ -0,0 +1,72 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Futures.class */
+public class Futures {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String FUTURES_TRANSFER = "/sapi/v1/futures/transfer";
+    private final String BORROW_HISTORY = "/sapi/v1/futures/loan/borrow/history";
+    private final String REPAY_HISTORY = "/sapi/v1/futures/loan/repay/history";
+    private final String WALLET = "/sapi/v2/futures/loan/wallet";
+    private final String ADJUST_COLLATERAL_HISTORY = "/sapi/v1/futures/loan/adjustCollateral/history";
+    private final String LIQUIDATION_HISTORY = "/sapi/v1/futures/loan/liquidationHistory";
+    private final String INTEREST_HISTORY = "/sapi/v1/futures/loan/interestHistory";
+
+    public Futures(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Futures(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String futuresTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        ParameterChecker.checkParameter(parameters, "type", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String futuresTransferHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkParameter(parameters, "startTime", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/transfer", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String borrowHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/loan/borrow/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String repayHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/loan/repay/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanWallet(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v2/futures/loan/wallet", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String adjustCollateralHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/loan/adjustCollateral/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String liquidationHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/loan/liquidationHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String interestHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/futures/loan/interestHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 52 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/GiftCard.java

@@ -0,0 +1,52 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/GiftCard.class */
+public class GiftCard {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String CREATE_CODE = "/sapi/v1/giftcard/createCode";
+    private final String REDEEM_CODE = "/sapi/v1/giftcard/redeemCode";
+    private final String VERIFY = "/sapi/v1/giftcard/verify";
+    private final String RSA_PUB = "/sapi/v1/giftcard/cryptography/rsa-public-key";
+
+    public GiftCard(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public GiftCard(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String createCode(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "token", String.class);
+        ParameterChecker.checkParameter(parameters, "amount", Double.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/giftcard/createCode", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String redeemCode(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "code", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/giftcard/redeemCode", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String verify(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "referenceNo", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/giftcard/verify", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String rsaPublicKey(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/giftcard/cryptography/rsa-public-key", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 279 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Margin.java

@@ -0,0 +1,279 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Margin.class */
+public class Margin {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String CROSS_MARGIN_TRANSFER = "/sapi/v1/margin/transfer";
+    private final String BORROW = "/sapi/v1/margin/loan";
+    private final String REPAY = "/sapi/v1/margin/repay";
+    private final String ASSET = "/sapi/v1/margin/asset";
+    private final String PAIR = "/sapi/v1/margin/pair";
+    private final String ALL_ASSETS = "/sapi/v1/margin/allAssets";
+    private final String ALL_PAIRS = "/sapi/v1/margin/allPairs";
+    private final String PRICE_INDEX = "/sapi/v1/margin/priceIndex";
+    private final String ORDER = "/sapi/v1/margin/order";
+    private final String OPEN_ORDERS = "/sapi/v1/margin/openOrders";
+    private final String TRANSFER_HISTORY = "/sapi/v1/margin/transfer";
+    private final String LOAN_RECORD = "/sapi/v1/margin/loan";
+    private final String REPAY_RECORD = "/sapi/v1/margin/repay";
+    private final String INTEREST_HISTORY = "/sapi/v1/margin/interestHistory";
+    private final String FORCE_LIQUIDATION_RECORD = "/sapi/v1/margin/forceLiquidationRec";
+    private final String ACCOUNT = "/sapi/v1/margin/account";
+    private final String ALL_ORDERS = "/sapi/v1/margin/allOrders";
+    private final String OCO_ORDER = "/sapi/v1/margin/order/oco";
+    private final String ORDER_LIST = "/sapi/v1/margin/orderList";
+    private final String GET_ALL_OCO = "/sapi/v1/margin/allOrderList";
+    private final String GET_OPEN_OCO = "/sapi/v1/margin/openOrderList";
+    private final String MY_TRADES = "/sapi/v1/margin/myTrades";
+    private final String MAX_BORROW = "/sapi/v1/margin/maxBorrowable";
+    private final String MAX_TRANSFERABLE = "/sapi/v1/margin/maxTransferable";
+    private final String ISOLATED_TRANSFER = "/sapi/v1/margin/isolated/transfer";
+    private final String ISOLATED_ACCOUNT = "/sapi/v1/margin/isolated/account";
+    private final String ISOLATED_ACCOUNT_LIMIT = "/sapi/v1/margin/isolated/accountLimit";
+    private final String ISOLATED_SYMBOL = "/sapi/v1/margin/isolated/pair";
+    private final String ALL_ISOLATED_SYMBOL = "/sapi/v1/margin/isolated/allPairs";
+    private final String BNB_BURN = "/sapi/v1/bnbBurn";
+    private final String INTEREST_RATE_HIST = "/sapi/v1/margin/interestRateHistory";
+    private final String CROSS_MARGIN_DATA = "/sapi/v1/margin/crossMarginData";
+    private final String ISOLATED_MARGIN_DATA = "/sapi/v1/margin/isolatedMarginData";
+    private final String ISOLATED_MARGIN_TIER = "/sapi/v1/margin/isolatedMarginTier";
+    private final String ORDER_RATE_LIMIT = "/sapi/v1/margin/rateLimit/order";
+    private final String DRIBBLET = "/sapi/v1/margin/dribblet";
+
+    public Margin(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Margin(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String crossMarginTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        ParameterChecker.checkParameter(parameters, "type", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String borrow(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/loan", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String repay(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/repay", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String asset(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/margin/asset", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String pair(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/margin/pair", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String allAssets() {
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/margin/allAssets", null, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String allPairs() {
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/margin/allPairs", null, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String priceIndex(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/margin/priceIndex", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String newOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "side", String.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/order", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String cancelOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/order", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String cancelOpenOrders(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/openOrders", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String transferHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/transfer", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String loanRecord(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/loan", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String repayRecord(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/repay", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String interestHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/interestHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String forceLiquidationRec(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/forceLiquidationRec", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String account(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/order", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getOpenOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/openOrders", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getAllOrders(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/allOrders", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String ocoOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "side", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "quantity");
+        ParameterChecker.checkRequiredParameter(parameters, "price");
+        ParameterChecker.checkRequiredParameter(parameters, "stopPrice");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/order/oco", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String cancelOcoOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/orderList", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String getOcoOrder(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/orderList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getAllOcoOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/allOrderList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getOcoOpenOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/openOrderList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String trades(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/myTrades", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String maxBorrow(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/maxBorrowable", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String maxTransferable(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/maxTransferable", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String isolatedTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "transFrom", String.class);
+        ParameterChecker.checkParameter(parameters, "transTo", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String getIsolatedTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/transfer", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String isolatedAccount(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String disableIsolatedAccount(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/account", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String enableIsolatedAccount(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/account", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String getIsolatedAccountLimit(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/accountLimit", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getIsolatedSymbol(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/pair", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getAllIsolatedSymbols(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolated/allPairs", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String bnbBurn(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bnbBurn", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String getBnbBurn(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/bnbBurn", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String interestRateHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/interestRateHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String crossMarginData(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/crossMarginData", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String isolatedMarginData(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolatedMarginData", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String isolatedMarginTier(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/isolatedMarginTier", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String orderRateLimit(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/rateLimit/order", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String dribblet(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/margin/dribblet", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 146 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Market.java

@@ -0,0 +1,146 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.utils.JSONParser;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import java.util.ArrayList;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Market.class */
+public class Market {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String PING = "/api/v3/ping";
+    private final String TIME = "/api/v3/time";
+    private final String EXCHANGE_INFO = "/api/v3/exchangeInfo";
+    private final String DEPTH = "/api/v3/depth";
+    private final String TRADES = "/api/v3/trades";
+    private final String HISTORICAL_TRADES = "/api/v3/historicalTrades";
+    private final String AGG_TRADES = "/api/v3/aggTrades";
+    private final String KLINES = "/api/v3/klines";
+    private final String UIKLINES = "/api/v3/uiKlines";
+    private final String AVG_PRICE = "/api/v3/avgPrice";
+    private final String TICKER_24H = "/api/v3/ticker/24hr";
+    private final String TICKER_SYMBOL = "/api/v3/ticker/price";
+    private final String BOOK_TICKER = "/api/v3/ticker/bookTicker";
+    private final String TICKER = "/api/v3/ticker";
+
+    public Market(String baseUrl, String apiKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String ping() {
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/ping", null, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String time() {
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/time", null, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String exchangeInfo(Map<String, Object> parameters) {
+        if (parameters.containsKey("symbol") && parameters.containsKey("symbols")) {
+            throw new BinanceConnectorException("symbol and symbols cannot be sent together.");
+        } else if ((!parameters.containsKey("symbol") || !parameters.containsKey("permissions")) && (!parameters.containsKey("symbols") || !parameters.containsKey("permissions"))) {
+            if (parameters.containsKey("symbols")) {
+                ParameterChecker.checkParameterType(parameters.get("symbols"), ArrayList.class, "symbols");
+                parameters.put("symbols", JSONParser.getJSONArray((ArrayList) parameters.get("symbols"), "symbols"));
+            }
+            if (parameters.containsKey("permissions")) {
+                ParameterChecker.checkParameterType(parameters.get("permissions"), ArrayList.class, "permissions");
+                parameters.put("permissions", JSONParser.getJSONArray((ArrayList) parameters.get("permissions"), "permissions"));
+            }
+            return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/exchangeInfo", parameters, HttpMethod.GET, this.showLimitUsage);
+        } else {
+            throw new BinanceConnectorException("permissions cannot be sent together with symbol or symbols.");
+        }
+    }
+
+    public String depth(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/depth", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String trades(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/trades", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String historicalTrades(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/api/v3/historicalTrades", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String aggTrades(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/aggTrades", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String klines(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "interval", String.class);
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/klines", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String uiKlines(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "interval", String.class);
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/uiKlines", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String averagePrice(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/avgPrice", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String ticker24H(Map<String, Object> parameters) {
+        if (!parameters.containsKey("symbol") || !parameters.containsKey("symbols")) {
+            if (parameters.containsKey("symbols")) {
+                ParameterChecker.checkParameterType(parameters.get("symbols"), ArrayList.class, "symbols");
+                parameters.put("symbols", JSONParser.getJSONArray((ArrayList) parameters.get("symbols"), "symbols"));
+            }
+            return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/ticker/24hr", parameters, HttpMethod.GET, this.showLimitUsage);
+        }
+        throw new BinanceConnectorException("symbol and symbols cannot be sent together.");
+    }
+
+    public String tickerSymbol(Map<String, Object> parameters) {
+        if (!parameters.containsKey("symbol") || !parameters.containsKey("symbols")) {
+            if (parameters.containsKey("symbols")) {
+                ParameterChecker.checkParameterType(parameters.get("symbols"), ArrayList.class, "symbols");
+                parameters.put("symbols", JSONParser.getJSONArray((ArrayList) parameters.get("symbols"), "symbols"));
+            }
+            return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/ticker/price", parameters, HttpMethod.GET, this.showLimitUsage);
+        }
+        throw new BinanceConnectorException("symbol and symbols cannot be sent together.");
+    }
+
+    public String bookTicker(Map<String, Object> parameters) {
+        if (!parameters.containsKey("symbol") || !parameters.containsKey("symbols")) {
+            if (parameters.containsKey("symbols")) {
+                ParameterChecker.checkParameterType(parameters.get("symbols"), ArrayList.class, "symbols");
+                parameters.put("symbols", JSONParser.getJSONArray((ArrayList) parameters.get("symbols"), "symbols"));
+            }
+            return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/ticker/bookTicker", parameters, HttpMethod.GET, this.showLimitUsage);
+        }
+        throw new BinanceConnectorException("symbol and symbols cannot be sent together.");
+    }
+
+    public String ticker(Map<String, Object> parameters) {
+        if (!parameters.containsKey("symbol") || !parameters.containsKey("symbols")) {
+            if (parameters.containsKey("symbols")) {
+                ParameterChecker.checkParameterType(parameters.get("symbols"), ArrayList.class, "symbols");
+                parameters.put("symbols", JSONParser.getJSONArray((ArrayList) parameters.get("symbols"), "symbols"));
+            } else {
+                ParameterChecker.checkParameter(parameters, "symbol", String.class);
+            }
+            return this.requestHandler.sendPublicRequest(this.baseUrl, "/api/v3/ticker", parameters, HttpMethod.GET, this.showLimitUsage);
+        }
+        throw new BinanceConnectorException("symbol and symbols cannot be sent together.");
+    }
+}

+ 117 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Mining.java

@@ -0,0 +1,117 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Mining.class */
+public class Mining {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String ALGO = "/sapi/v1/mining/pub/algoList";
+    private final String COIN_NAME = "/sapi/v1/mining/pub/coinList";
+    private final String DETAIL_MINER_LIST = "/sapi/v1/mining/worker/detail";
+    private final String MINER_LIST = "/sapi/v1/mining/worker/list";
+    private final String EARNING_LIST = "/sapi/v1/mining/payment/list";
+    private final String BONUS_LIST = "/sapi/v1/mining/payment/other";
+    private final String HASHRATE_RESALE_LIST = "/sapi/v1/mining/hash-transfer/config/details/list";
+    private final String HASHRATE_RESALE_DETAIL = "/sapi/v1/mining/hash-transfer/profit/details";
+    private final String HASHRATE_RESALE_REQUEST = "/sapi/v1/mining/hash-transfer/config";
+    private final String CANCEL_HASHRATE_RESALE_CONFIG = "/sapi/v1/mining/hash-transfer/config/cancel";
+    private final String STATSTICS_LIST = "/sapi/v1/mining/statistics/user/status";
+    private final String ACCOUNT_LIST = "/sapi/v1/mining/statistics/user/list";
+    private final String ACCOUNT_EARNING = "/sapi/v1/mining/payment/uid";
+
+    public Mining(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Mining(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String algorithm(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/pub/algoList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String coinName(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/pub/coinList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String detailMinerList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        ParameterChecker.checkParameter(parameters, "workerName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/worker/detail", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String minerList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/worker/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String earningList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/payment/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String bonusList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/payment/other", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String hashrateResaleList(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/hash-transfer/config/details/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String hashrateResaleDetail(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "configId", Integer.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/hash-transfer/profit/details", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String hashrateResaleRequest(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "endDate", Long.class);
+        ParameterChecker.checkParameter(parameters, "startDate", Long.class);
+        ParameterChecker.checkParameter(parameters, "toPoolUser", String.class);
+        ParameterChecker.checkParameter(parameters, "hashRate", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/hash-transfer/config", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String cancelHashrateResaleConfig(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "configId", Integer.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/hash-transfer/config/cancel", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String statsticsList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/statistics/user/status", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String accountList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        ParameterChecker.checkParameter(parameters, "userName", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/statistics/user/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String accountEarning(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "algo", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/mining/payment/uid", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 49 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/NFT.java

@@ -0,0 +1,49 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/NFT.class */
+public class NFT {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String TRANSACTIONS = "/sapi/v1/nft/history/transactions";
+    private final String DEPOSIT = "/sapi/v1/nft/history/deposit";
+    private final String WITHDRAW = "/sapi/v1/nft/history/withdraw";
+    private final String GET_ASSET = "/sapi/v1/nft/user/getAsset";
+
+    public NFT(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public NFT(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String transactionsHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "orderType", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/nft/history/transactions", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String depositHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/nft/history/deposit", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String withdrawHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/nft/history/withdraw", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getAsset(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/nft/user/getAsset", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 32 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Pay.java

@@ -0,0 +1,32 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Pay.class */
+public class Pay {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String TRANSACTIONS = "/sapi/v1/pay/transactions";
+
+    public Pay(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Pay(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String transactions(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/pay/transactions", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 47 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/PortfolioMargin.java

@@ -0,0 +1,47 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/PortfolioMargin.class */
+public class PortfolioMargin {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String ACCOUNT = "/sapi/v1/portfolio/account";
+    private final String COLLATERAL_RATE = "/sapi/v1/portfolio/collateralRate";
+    private final String PM_LOAN = "/sapi/v1/portfolio/pmLoan";
+    private final String REPAY = "/sapi/v1/portfolio/repay";
+
+    public PortfolioMargin(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public PortfolioMargin(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String getAccount(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/portfolio/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String collateralRate(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/portfolio/collateralRate", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String bankruptcyLoanRecord(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/portfolio/pmLoan", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String repay(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/portfolio/repay", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+}

+ 32 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Rebate.java

@@ -0,0 +1,32 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Rebate.class */
+public class Rebate {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String TAX_QUERY = "/sapi/v1/rebate/taxQuery";
+
+    public Rebate(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Rebate(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String taxQuery(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/rebate/taxQuery", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 114 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Savings.java

@@ -0,0 +1,114 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Savings.class */
+public class Savings {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String FLEXIBLE_PRODUCT = "/sapi/v1/lending/daily/product/list";
+    private final String PURCHASE_QUOTA = "/sapi/v1/lending/daily/userLeftQuota";
+    private final String PURCHASE_PRODUCT = "/sapi/v1/lending/daily/purchase";
+    private final String DAILY_REDEMPTION_QUOTA = "/sapi/v1/lending/daily/userRedemptionQuota";
+    private final String REDEEM_PRODUCT = "/sapi/v1/lending/daily/redeem";
+    private final String PRODUCT_POSTION = "/sapi/v1/lending/daily/token/position";
+    private final String ACTIVITY_PROJECT = "/sapi/v1/lending/project/list";
+    private final String PURCHASE_ACTIVITY = "/sapi/v1/lending/customizedFixed/purchase";
+    private final String PROJECT_POSITION = "/sapi/v1/lending/project/position/list";
+    private final String LENDING_ACCOUNT = "/sapi/v1/lending/union/account";
+    private final String PURCHASE_RECORD = "/sapi/v1/lending/union/purchaseRecord";
+    private final String REDEMPTION_RECORD = "/sapi/v1/lending/union/redemptionRecord";
+    private final String INTEREST_HISTORY = "/sapi/v1/lending/union/interestHistory";
+    private final String CHANGE_TO_DAILY_POSITION = "/sapi/v1/lending/positionChanged";
+
+    public Savings(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Savings(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String flexibleProducts(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/daily/product/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String purchaseQuotaFlexible(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/daily/userLeftQuota", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String purchaseFlexibleProduct(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/daily/purchase", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String dailyRedemptionQuota(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/daily/userRedemptionQuota", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String redeemFlexibleProduct(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/daily/redeem", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String flexibleProductPosition(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/daily/token/position", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String projectList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/project/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String purchaseProject(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "projectId", String.class);
+        ParameterChecker.checkParameter(parameters, "lot", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/customizedFixed/purchase", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String projectPosition(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/project/position/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String lendingAccount(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/union/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String purchaseRecord(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "lendingType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/union/purchaseRecord", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String redemptionRecord(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "lendingType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/union/redemptionRecord", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String interestHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "lendingType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/union/interestHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String changeToDailyPosition(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "projectId", String.class);
+        ParameterChecker.checkParameter(parameters, "lot", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/lending/positionChanged", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+}

+ 77 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Staking.java

@@ -0,0 +1,77 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Staking.class */
+public class Staking {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String PRODUCT_LIST = "/sapi/v1/staking/productList";
+    private final String PURCHASE = "/sapi/v1/staking/purchase";
+    private final String REDEEM = "/sapi/v1/staking/redeem";
+    private final String POSITION = "/sapi/v1/staking/position";
+    private final String STAKING_RECORD = "/sapi/v1/staking/stakingRecord";
+    private final String AUTO_STAKING = "/sapi/v1/staking/setAutoStaking";
+    private final String LEFT_QUOTA = "/sapi/v1/staking/personalLeftQuota";
+
+    public Staking(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Staking(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String productList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/productList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String purchase(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        ParameterChecker.checkParameter(parameters, "amount", Double.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/purchase", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String redeem(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/redeem", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String getPosition(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/position", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String stakingRecord(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        ParameterChecker.checkParameter(parameters, "txnType", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/stakingRecord", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String setAutoStaking(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        ParameterChecker.checkParameter(parameters, "positionId", String.class);
+        ParameterChecker.checkParameter(parameters, "renewable", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/setAutoStaking", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String personalLeftQuota(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "product", String.class);
+        ParameterChecker.checkParameter(parameters, "productId", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/staking/personalLeftQuota", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 259 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/SubAccount.java

@@ -0,0 +1,259 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/SubAccount.class */
+public class SubAccount {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String CREATE_SUB = "/sapi/v1/sub-account/virtualSubAccount";
+    private final String QUERY_SUB_LIST = "/sapi/v1/sub-account/list";
+    private final String QUERY_SPOT_TRANSFER_HIST = "/sapi/v1/sub-account/sub/transfer/history";
+    private final String FUTURES_TRANSFER = "/sapi/v1/sub-account/futures/internalTransfer";
+    private final String SUB_ACC_ASSETS = "/sapi/v3/sub-account/assets";
+    private final String SPOT_ASSET_SUMMARY = "/sapi/v1/sub-account/spotSummary";
+    private final String SUB_DEPOSIT_ADDRESS = "/sapi/v1/capital/deposit/subAddress";
+    private final String SUB_DEPOSIT_HISTORY = "/sapi/v1/capital/deposit/subHisrec";
+    private final String SUB_ACC_STATUS = "/sapi/v1/sub-account/status";
+    private final String ENABLE_MARGIN = "/sapi/v1/sub-account/margin/enable";
+    private final String SUB_ACC_MARGIN = "/sapi/v1/sub-account/margin/account";
+    private final String SUB_ACC_MARGIN_SUMMARY = "/sapi/v1/sub-account/margin/accountSummary";
+    private final String ENABLE_FUTURES = "/sapi/v1/sub-account/futures/enable";
+    private final String SUB_ACC_FUTURES = "/sapi/v1/sub-account/futures/account";
+    private final String SUB_ACC_FUTURES_SUMMARY = "/sapi/v1/sub-account/futures/accountSummary";
+    private final String SUB_ACC_POSITION_RISK = "/sapi/v1/sub-account/futures/positionRisk";
+    private final String SUB_ACC_FUTURES_TRANSFER = "/sapi/v1/sub-account/futures/transfer";
+    private final String SUB_ACC_MARGIN_TRANSFER = "/sapi/v1/sub-account/margin/transfer";
+    private final String SUB_TO_SUB = "/sapi/v1/sub-account/transfer/subToSub";
+    private final String SUB_TO_MASTER = "/sapi/v1/sub-account/transfer/subToMaster";
+    private final String SUB_TRANSFER_HIST = "/sapi/v1/sub-account/transfer/subUserHistory";
+    private final String SUB_UNIVERSAL_TRANSFER = "/sapi/v1/sub-account/universalTransfer";
+    private final String SUB_FUTURES_ACCOUNT_V2 = "/sapi/v2/sub-account/futures/account";
+    private final String SUB_FUTURES_ACCOUNT_SUMMARY_V2 = "/sapi/v2/sub-account/futures/accountSummary";
+    private final String SUB_FUTURES_POSITION_RISK_V2 = "/sapi/v2/sub-account/futures/positionRisk";
+    private final String ENABLE_LEVERAGE = "/sapi/v1/sub-account/blvt/enable";
+    private final String IP_RESTRICTION = "/sapi/v1/sub-account/subAccountApi/ipRestriction";
+    private final String IP_LIST = "/sapi/v1/sub-account/subAccountApi/ipRestriction/ipList";
+    private final String MANAGED_SUB_DEPOSIT = "/sapi/v1/managed-subaccount/deposit";
+    private final String MANAGED_SUB_DETAILS = "/sapi/v1/managed-subaccount/asset";
+    private final String MANAGED_SUB_WITHDRAW = "/sapi/v1/managed-subaccount/withdraw";
+    private final String MANAGED_SUB_SNAPSHOT = "/sapi/v1/managed-subaccount/accountSnapshot";
+    private final String IP_RESTRICTION_V2 = "/sapi/v2/sub-account/subAccountApi/ipRestriction";
+
+    public SubAccount(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public SubAccount(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String createVirtualSubAccount(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "subAccountString", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/virtualSubAccount", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String subAccountList(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/list", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String spotTransferHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/sub/transfer/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getFuturesInternalTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "futuresType", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/internalTransfer", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresInternalTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "fromEmail", String.class);
+        ParameterChecker.checkParameter(parameters, "toEmail", String.class);
+        ParameterChecker.checkParameter(parameters, "futuresType", Integer.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/internalTransfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String assets(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v3/sub-account/assets", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String spotAccountSummary(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/spotSummary", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String depositAddress(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "coin", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/deposit/subAddress", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String depositHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/deposit/subHisrec", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String accountStatus(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/status", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String enableMargin(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/margin/enable", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String marginAccount(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/margin/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String marginAccountSummary(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/margin/accountSummary", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String enableFutures(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/enable", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String futuresAccount(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresAccountSummary(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/accountSummary", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresPositionRisk(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/positionRisk", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        ParameterChecker.checkParameter(parameters, "type", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/futures/transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String marginTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        ParameterChecker.checkParameter(parameters, "type", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/margin/transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String subAccountToSubAccount(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "toEmail", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/transfer/subToSub", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String subAccountToMaster(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/transfer/subToMaster", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String transferHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/transfer/subUserHistory", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String universalTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "fromAccountType", String.class);
+        ParameterChecker.checkParameter(parameters, "toAccountType", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/universalTransfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String queryUniversalTransfer(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/universalTransfer", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresAccountV2(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "futuresType", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v2/sub-account/futures/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresAccountSummaryV2(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "futuresType", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v2/sub-account/futures/accountSummary", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String futuresPositionRiskV2(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "futuresType", Integer.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v2/sub-account/futures/positionRisk", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String enableLeverageToken(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "enableBlvt", Boolean.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/blvt/enable", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String getIpRestriction(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "subAccountApiKey", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/subAccountApi/ipRestriction", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String deleteIpList(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "subAccountApiKey", String.class);
+        ParameterChecker.checkParameter(parameters, "ipAddress", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/sub-account/subAccountApi/ipRestriction/ipList", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String managedSubDeposit(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "toEmail", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/managed-subaccount/deposit", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String managedSubDetails(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/managed-subaccount/asset", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String managedSubWithdraw(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "fromEmail", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/managed-subaccount/withdraw", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String managedSubAccountSnapshot(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/managed-subaccount/accountSnapshot", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String updateIpRestriction(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "email", String.class);
+        ParameterChecker.checkParameter(parameters, "subAccountApiKey", String.class);
+        ParameterChecker.checkParameter(parameters, "status", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v2/sub-account/subAccountApi/ipRestriction", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+}

+ 125 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Trade.java

@@ -0,0 +1,125 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Trade.class */
+public class Trade {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String TEST_NEW_ORDER = "/api/v3/order/test";
+    private final String ORDER = "/api/v3/order";
+    private final String ALL_OPEN_ORDERS = "/api/v3/openOrders";
+    private final String CANCEL_REPLACE = "/api/v3/order/cancelReplace";
+    private final String ALL_ORDERS = "/api/v3/allOrders";
+    private final String OCO_ORDER = "/api/v3/order/oco";
+    private final String OCO_LIST = "/api/v3/orderList";
+    private final String ALL_OCO_LIST = "/api/v3/allOrderList";
+    private final String ALL_OPEN_OCO_LIST = "/api/v3/openOrderList";
+    private final String ACCOUNT_INFO = "/api/v3/account";
+    private final String ACCOUNT_TRADES = "/api/v3/myTrades";
+    private final String RATE_LIMIT = "/api/v3/rateLimit/order";
+
+    public Trade(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Trade(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String testNewOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "side", String.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/order/test", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String newOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "side", String.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/order", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String cancelOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/order", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String cancelOpenOrders(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/openOrders", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String getOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/order", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String cancelReplace(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "side", String.class);
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        ParameterChecker.checkParameter(parameters, "cancelReplaceMode", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/order/cancelReplace", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String getOpenOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/openOrders", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getOrders(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/allOrders", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String ocoOrder(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "side", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "quantity");
+        ParameterChecker.checkRequiredParameter(parameters, "price");
+        ParameterChecker.checkRequiredParameter(parameters, "stopPrice");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/order/oco", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String cancelOCO(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/orderList", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String getOCOOrder(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/orderList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getOCOOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/allOrderList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getOpenOCOOrders(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/openOrderList", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String account(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/account", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String myTrades(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/myTrades", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String rateLimitOrder(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/api/v3/rateLimit/order", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 68 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/UserData.java

@@ -0,0 +1,68 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/UserData.class */
+public class UserData {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String SPOT_LISTEN_KEY = "/api/v3/userDataStream";
+    private final String MARGIN_LISTEN_KEY = "/sapi/v1/userDataStream";
+    private final String ISOLATED_LISTEN_KEY = "/sapi/v1/userDataStream/isolated";
+
+    public UserData(String baseUrl, String apiKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String createListenKey() {
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/api/v3/userDataStream", null, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String extendListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "listenKey", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/api/v3/userDataStream", parameters, HttpMethod.PUT, this.showLimitUsage);
+    }
+
+    public String closeListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "listenKey", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/api/v3/userDataStream", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String createMarginListenKey() {
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/userDataStream", null, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String extendMarginListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "listenKey", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/userDataStream", parameters, HttpMethod.PUT, this.showLimitUsage);
+    }
+
+    public String closeMarginListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "listenKey", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/userDataStream", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+
+    public String createIsolatedMarginListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/userDataStream/isolated", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String extendIsolatedMarginListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "listenKey", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/userDataStream/isolated", parameters, HttpMethod.PUT, this.showLimitUsage);
+    }
+
+    public String closeIsolatedMarginListenKey(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "symbol", String.class);
+        ParameterChecker.checkParameter(parameters, "listenKey", String.class);
+        return this.requestHandler.sendApiRequest(this.baseUrl, "/sapi/v1/userDataStream/isolated", parameters, HttpMethod.DELETE, this.showLimitUsage);
+    }
+}

+ 172 - 0
binance/src/main/java/com/binance/connector/client/impl/spot/Wallet.java

@@ -0,0 +1,172 @@
+package com.binance.connector.client.impl.spot;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.ProxyAuth;
+import com.binance.connector.client.utils.RequestHandler;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/spot/Wallet.class */
+public class Wallet {
+    private final String baseUrl;
+    private final RequestHandler requestHandler;
+    private final boolean showLimitUsage;
+    private final String SYSTEM_STATUS = "/sapi/v1/system/status";
+    private final String COIN_INFO = "/sapi/v1/capital/config/getall";
+    private final String ACC_SNAP = "/sapi/v1/accountSnapshot";
+    private final String DISABLE_FAST = "/sapi/v1/account/disableFastWithdrawSwitch";
+    private final String ENABLE_FAST = "/sapi/v1/account/enableFastWithdrawSwitch";
+    private final String WITHDRAW = "/sapi/v1/capital/withdraw/apply";
+    private final String DEPOSIT_HIST = "/sapi/v1/capital/deposit/hisrec";
+    private final String WITHDRAW_HIST = "/sapi/v1/capital/withdraw/history";
+    private final String DEPOSIT_ADD = "/sapi/v1/capital/deposit/address";
+    private final String ACC_STATUS = "/sapi/v1/account/status";
+    private final String API_TRADE_STATUS = "/sapi/v1/account/apiTradingStatus";
+    private final String DUST_LOG = "/sapi/v1/asset/dribblet";
+    private final String BNB_CONVERTABLE_ASSETS = "/sapi/v1/asset/dust-btc";
+    private final String DUST_TRANSFER = "/sapi/v1/asset/dust";
+    private final String ASSET_DIVIDEND = "/sapi/v1/asset/assetDividend";
+    private final String ASSET_DETAIL = "/sapi/v1/asset/assetDetail";
+    private final String TRADE_FEE = "/sapi/v1/asset/tradeFee";
+    private final String UNIVERSAL_TRANSFER = "/sapi/v1/asset/transfer";
+    private final String FUNDING_WALLET = "/sapi/v1/asset/get-funding-asset";
+    private final String API_PERMISSION = "/sapi/v1/account/apiRestrictions";
+    private final String USER_ASSET = "/sapi/v3/asset/getUserAsset";
+    private final String BUSD_CONVERT = "/sapi/v1/asset/convert-transfer";
+    private final String BUSD_CONVERT_HISTORY = "/sapi/v1/asset/convert-transfer/queryByPage";
+    private final String CLOUD_MINING_HISTORY = "/sapi/v1/asset/ledger-transfer/cloud-mining/queryByPage";
+
+    public Wallet(String baseUrl, String apiKey, String secretKey, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, new HmacSignatureGenerator(secretKey), proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public Wallet(String baseUrl, String apiKey, SignatureGenerator signatureGenerator, boolean showLimitUsage, ProxyAuth proxy) {
+        this.baseUrl = baseUrl;
+        this.requestHandler = new RequestHandler(apiKey, signatureGenerator, proxy);
+        this.showLimitUsage = showLimitUsage;
+    }
+
+    public String systemStatus() {
+        return this.requestHandler.sendPublicRequest(this.baseUrl, "/sapi/v1/system/status", null, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String coinInfo(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/config/getall", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String accountSnapshot(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/accountSnapshot", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String disableFastWithdraw(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/account/disableFastWithdrawSwitch", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String enableFastWithdraw(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/account/enableFastWithdrawSwitch", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String withdraw(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "coin", String.class);
+        ParameterChecker.checkParameter(parameters, "address", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/withdraw/apply", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String depositHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/deposit/hisrec", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String withdrawHistory(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/withdraw/history", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String depositAddress(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "coin", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/capital/deposit/address", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String accountStatus(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/account/status", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String apiTradingStatus(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/account/apiTradingStatus", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String dustLog(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/dribblet", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String bnbConvertableAssets(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/dust-btc", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String dustTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "asset", ArrayList.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/dust", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String assetDividend(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/assetDividend", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String assetDetail(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/assetDetail", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String tradeFee(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/tradeFee", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String universalTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkRequiredParameter(parameters, "amount");
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String queryUniversalTransfer(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "type", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/transfer", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String fundingWallet(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/get-funding-asset", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String apiPermission(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/account/apiRestrictions", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String getUserAsset(Map<String, Object> parameters) {
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v3/asset/getUserAsset", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String busdConvert(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "clientTranId", String.class);
+        ParameterChecker.checkParameter(parameters, "asset", String.class);
+        ParameterChecker.checkParameter(parameters, "amount", BigDecimal.class);
+        ParameterChecker.checkParameter(parameters, "targetAsset", String.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/convert-transfer", parameters, HttpMethod.POST, this.showLimitUsage);
+    }
+
+    public String busdConvertHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "startTime", Long.class);
+        ParameterChecker.checkParameter(parameters, "endTime", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/convert-transfer/queryByPage", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+
+    public String cloudMiningHistory(Map<String, Object> parameters) {
+        ParameterChecker.checkParameter(parameters, "startTime", Long.class);
+        ParameterChecker.checkParameter(parameters, "endTime", Long.class);
+        return this.requestHandler.sendSignedRequest(this.baseUrl, "/sapi/v1/asset/ledger-transfer/cloud-mining/queryByPage", parameters, HttpMethod.GET, this.showLimitUsage);
+    }
+}

+ 44 - 0
binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiAccount.java

@@ -0,0 +1,44 @@
+package com.binance.connector.client.impl.websocketapi;
+
+import com.binance.connector.client.utils.JSONParser;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.websocketapi.WebSocketApiRequestHandler;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/websocketapi/WebSocketApiAccount.class */
+public class WebSocketApiAccount {
+    private WebSocketApiRequestHandler handler;
+
+    public WebSocketApiAccount(WebSocketApiRequestHandler handler) {
+        this.handler = handler;
+    }
+
+    public void accountStatus(JSONObject parameters) {
+        this.handler.signedRequest("account.status", parameters);
+    }
+
+    public void accountRateLimitsOrders(JSONObject parameters) {
+        this.handler.signedRequest("account.rateLimits.orders", parameters);
+    }
+
+    public void accountAllOrders(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.signedRequest("allOrders", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void accountAllOcoOrders(JSONObject parameters) {
+        this.handler.signedRequest("allOrderLists", parameters);
+    }
+
+    public void accountTradeHistory(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.signedRequest("myTrades", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void accountPreventedMatches(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkOneOfParametersRequired(parameters, "preventedMatchId", "orderId");
+        ParameterChecker.checkOnlyOneOfParameters(parameters, "preventedMatchId", "orderId");
+        this.handler.signedRequest("myPreventedMatches", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+}

+ 27 - 0
binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiGeneral.java

@@ -0,0 +1,27 @@
+package com.binance.connector.client.impl.websocketapi;
+
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.websocketapi.WebSocketApiRequestHandler;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/websocketapi/WebSocketApiGeneral.class */
+public class WebSocketApiGeneral {
+    private WebSocketApiRequestHandler handler;
+
+    public WebSocketApiGeneral(WebSocketApiRequestHandler handler) {
+        this.handler = handler;
+    }
+
+    public void ping(JSONObject parameters) {
+        this.handler.publicRequest("ping", parameters);
+    }
+
+    public void serverTime(JSONObject parameters) {
+        this.handler.publicRequest("time", parameters);
+    }
+
+    public void exchangeInfo(JSONObject parameters) {
+        ParameterChecker.checkOnlyOneOfParameters(parameters, "symbol", "symbols", "permissions");
+        this.handler.publicRequest("exchangeInfo", parameters);
+    }
+}

+ 73 - 0
binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiMarket.java

@@ -0,0 +1,73 @@
+package com.binance.connector.client.impl.websocketapi;
+
+import com.binance.connector.client.utils.JSONParser;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.websocketapi.WebSocketApiRequestHandler;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/websocketapi/WebSocketApiMarket.class */
+public class WebSocketApiMarket {
+    private WebSocketApiRequestHandler handler;
+
+    public WebSocketApiMarket(WebSocketApiRequestHandler handler) {
+        this.handler = handler;
+    }
+
+    public void depth(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.publicRequest("depth", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void recentTrades(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.publicRequest("trades.recent", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void historicalTrades(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.apiRequest("trades.historical", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void aggTrades(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.publicRequest("trades.aggregate", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void klines(String symbol, String interval, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(interval, String.class, "interval");
+        this.handler.publicRequest("klines", JSONParser.addKeyValue(JSONParser.addKeyValue(parameters, "symbol", symbol), "interval", interval));
+    }
+
+    public void uiKlines(String symbol, String interval, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(interval, String.class, "interval");
+        this.handler.publicRequest("uiKlines", JSONParser.addKeyValue(JSONParser.addKeyValue(parameters, "symbol", symbol), "interval", interval));
+    }
+
+    public void avgPrice(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.publicRequest("avgPrice", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void ticker24H(JSONObject parameters) {
+        ParameterChecker.checkOnlyOneOfParameters(parameters, "symbol", "symbols");
+        this.handler.publicRequest("ticker.24hr", parameters);
+    }
+
+    public void ticker(JSONObject parameters) {
+        ParameterChecker.checkOnlyOneOfParameters(parameters, "symbol", "symbols");
+        ParameterChecker.checkOneOfParametersRequired(parameters, "symbol", "symbols");
+        this.handler.publicRequest("ticker", parameters);
+    }
+
+    public void tickerPrice(JSONObject parameters) {
+        ParameterChecker.checkOnlyOneOfParameters(parameters, "symbol", "symbols");
+        this.handler.publicRequest("ticker.price", parameters);
+    }
+
+    public void tickerBook(JSONObject parameters) {
+        ParameterChecker.checkOnlyOneOfParameters(parameters, "symbol", "symbols");
+        this.handler.publicRequest("ticker.book", parameters);
+    }
+}

+ 83 - 0
binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiTrade.java

@@ -0,0 +1,83 @@
+package com.binance.connector.client.impl.websocketapi;
+
+import com.binance.connector.client.utils.JSONParser;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.websocketapi.WebSocketApiRequestHandler;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/websocketapi/WebSocketApiTrade.class */
+public class WebSocketApiTrade {
+    private WebSocketApiRequestHandler handler;
+
+    public WebSocketApiTrade(WebSocketApiRequestHandler handler) {
+        this.handler = handler;
+    }
+
+    public void newOrder(String symbol, String side, String type, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(side, String.class, "side");
+        ParameterChecker.checkParameterType(type, String.class, "type");
+        this.handler.signedRequest("order.place", JSONParser.addKeyValue(JSONParser.addKeyValue(JSONParser.addKeyValue(parameters, "symbol", symbol), "side", side), "type", type));
+    }
+
+    public void testNewOrder(String symbol, String side, String type, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(side, String.class, "side");
+        ParameterChecker.checkParameterType(type, String.class, "type");
+        this.handler.signedRequest("order.test", JSONParser.addKeyValue(JSONParser.addKeyValue(JSONParser.addKeyValue(parameters, "symbol", symbol), "side", side), "type", type));
+    }
+
+    public void getOrder(String symbol, JSONObject parameters) {
+        ParameterChecker.checkOneOfParametersRequired(parameters, "orderId", "origClientOrderId");
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.signedRequest("order.status", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void cancelOrder(String symbol, JSONObject parameters) {
+        ParameterChecker.checkOneOfParametersRequired(parameters, "orderId", "origClientOrderId");
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.signedRequest("order.cancel", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void cancelReplaceOrder(String symbol, String cancelReplaceMode, String side, String type, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(cancelReplaceMode, String.class, "cancelReplaceMode");
+        ParameterChecker.checkParameterType(side, String.class, "side");
+        ParameterChecker.checkParameterType(type, String.class, "type");
+        ParameterChecker.checkOneOfParametersRequired(parameters, "cancelOrderId", "cancelOrigClientOrderId");
+        this.handler.signedRequest("order.cancelReplace", JSONParser.addKeyValue(JSONParser.addKeyValue(JSONParser.addKeyValue(JSONParser.addKeyValue(parameters, "symbol", symbol), "cancelReplaceMode", cancelReplaceMode), "side", side), "type", type));
+    }
+
+    public void getOpenOrders(JSONObject parameters) {
+        this.handler.signedRequest("openOrders.status", parameters);
+    }
+
+    public void cancelAllOpenOrders(String symbol, JSONObject parameters) {
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.signedRequest("openOrders.cancelAll", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void newOcoOrder(String symbol, String side, double price, double quantity, JSONObject parameters) {
+        ParameterChecker.checkOneOfParametersRequired(parameters, "stopPrice", "trailingDelta");
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        ParameterChecker.checkParameterType(side, String.class, "side");
+        ParameterChecker.checkParameterType(Double.valueOf(price), Double.class, "price");
+        ParameterChecker.checkParameterType(Double.valueOf(quantity), Double.class, "quantity");
+        this.handler.signedRequest("orderList.place", JSONParser.addKeyValue(JSONParser.addKeyValue(JSONParser.addKeyValue(JSONParser.addKeyValue(parameters, "symbol", symbol), "side", side), "price", Double.valueOf(price)), "quantity", Double.valueOf(quantity)));
+    }
+
+    public void getOcoOrder(JSONObject parameters) {
+        ParameterChecker.checkOneOfParametersRequired(parameters, "origClientOrderId", "orderListId");
+        this.handler.signedRequest("orderList.status", parameters);
+    }
+
+    public void cancelOcoOrder(String symbol, JSONObject parameters) {
+        ParameterChecker.checkOneOfParametersRequired(parameters, "listClientOrderId", "orderListId");
+        ParameterChecker.checkParameterType(symbol, String.class, "symbol");
+        this.handler.signedRequest("orderList.cancel", JSONParser.addKeyValue(parameters, "symbol", symbol));
+    }
+
+    public void getOpenOcoOrders(JSONObject parameters) {
+        this.handler.signedRequest("openOrderLists.status", parameters);
+    }
+}

+ 29 - 0
binance/src/main/java/com/binance/connector/client/impl/websocketapi/WebSocketApiUserDataStream.java

@@ -0,0 +1,29 @@
+package com.binance.connector.client.impl.websocketapi;
+
+import com.binance.connector.client.utils.JSONParser;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.websocketapi.WebSocketApiRequestHandler;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/impl/websocketapi/WebSocketApiUserDataStream.class */
+public class WebSocketApiUserDataStream {
+    private WebSocketApiRequestHandler handler;
+
+    public WebSocketApiUserDataStream(WebSocketApiRequestHandler handler) {
+        this.handler = handler;
+    }
+
+    public void userDataStreamStart(JSONObject parameters) {
+        this.handler.apiRequest("userDataStream.start", parameters);
+    }
+
+    public void userDataStreamPing(String listenKey, JSONObject parameters) {
+        ParameterChecker.checkParameterType(listenKey, String.class, "listenKey");
+        this.handler.apiRequest("userDataStream.ping", JSONParser.addKeyValue(parameters, "listenKey", listenKey));
+    }
+
+    public void userDataStreamStop(String listenKey, JSONObject parameters) {
+        ParameterChecker.checkParameterType(listenKey, String.class, "listenKey");
+        this.handler.apiRequest("userDataStream.stop", JSONParser.addKeyValue(parameters, "listenKey", listenKey));
+    }
+}

+ 77 - 0
binance/src/main/java/com/binance/connector/client/utils/JSONParser.java

@@ -0,0 +1,77 @@
+package com.binance.connector.client.utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/JSONParser.class */
+public final class JSONParser {
+    private JSONParser() {
+    }
+
+    public static String getJSONStringValue(String json, String key) {
+        try {
+            return new JSONObject(json).getString(key);
+        } catch (JSONException e) {
+            throw new JSONException(String.format("[JSONParser] Failed to get \"%s\"  from JSON object", key));
+        }
+    }
+
+    public static int getJSONIntValue(String json, String key) {
+        try {
+            return new JSONObject(json).getInt(key);
+        } catch (JSONException e) {
+            throw new JSONException(String.format("[JSONParser] Failed to get \"%s\" from JSON object", key));
+        }
+    }
+
+    public static String getJSONArray(ArrayList<?> symbols, String key) {
+        try {
+            return new JSONArray((Collection) symbols).toString();
+        } catch (JSONException e) {
+            throw new JSONException(String.format("[JSONParser] Failed to convert \"%s\" to JSON array", key));
+        }
+    }
+
+    public static String buildJSONString(Object id, String method, JSONObject parameters) {
+        try {
+            JSONObject json = new JSONObject();
+            json.put("id", id);
+            json.put("method", method);
+            json.put("params", parameters);
+            return json.toString();
+        } catch (JSONException e) {
+            throw new JSONException(String.format("[JSONParser] Failed to convert to JSON string", new Object[0]));
+        }
+    }
+
+    public static Map<String, Object> sortJSONObject(JSONObject parameters) {
+        LinkedList<String> keys = new LinkedList<>(parameters.keySet());
+        Map<String, Object> sortedParams = new LinkedHashMap<>();
+        keys.stream().sorted().forEach(key -> {
+            sortedParams.put(key, parameters.get(key));
+        });
+        return sortedParams;
+    }
+
+    public static JSONObject addKeyValue(JSONObject parameters, String key, Object value) {
+        if (parameters == null) {
+            parameters = new JSONObject();
+        }
+        return parameters.put(key, value);
+    }
+
+    public static Object pullValue(JSONObject parameters, String key) {
+        if (parameters == null) {
+            return null;
+        }
+        Object value = parameters.opt(key);
+        parameters.remove(key);
+        return value;
+    }
+}

+ 78 - 0
binance/src/main/java/com/binance/connector/client/utils/ParameterChecker.java

@@ -0,0 +1,78 @@
+package com.binance.connector.client.utils;
+
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.UUID;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/ParameterChecker.class */
+public final class ParameterChecker {
+    private static final int countStart = 0;
+    private static final int countFinal = 1;
+
+    private ParameterChecker() {
+    }
+
+    public static void checkParameter(Map<String, Object> parameters, String parameter, Class<?> t) {
+        checkRequiredParameter(parameters, parameter);
+        checkParameterType(parameters.get(parameter), t, parameter);
+    }
+
+    public static void checkRequiredParameter(Map<String, Object> parameters, String parameter) {
+        if (!parameters.containsKey(parameter)) {
+            throw new BinanceConnectorException(String.format("\"%s\" is a mandatory parameter!", parameter));
+        }
+    }
+
+    public static void checkParameterType(Object parameter, Class<?> t, String name) {
+        if (!t.isInstance(parameter)) {
+            throw new BinanceConnectorException(String.format("\"%s\" must be of %s type.", name, t));
+        } else if ((parameter instanceof String) && ((String) parameter).isEmpty()) {
+            throw new BinanceConnectorException(String.format("\"%s\" must not be empty.", name));
+        }
+    }
+
+    public static Object processId(Object id, String name) {
+        if (!(id instanceof Integer) && !(id instanceof String) && id != null) {
+            throw new BinanceConnectorException(name + " must be of Int or String type.");
+        } else if (id == null || ((id instanceof String) && ((String) id).isEmpty())) {
+            return UUID.randomUUID().toString();
+        } else {
+            return id;
+        }
+    }
+
+    public static void checkOnlyOneOfParameters(JSONObject params, String... parameters) {
+        if (params != null) {
+            int count = countStart;
+            int length = parameters.length;
+            for (int i = countStart; i < length; i += countFinal) {
+                if (params.has(parameters[i])) {
+                    count += countFinal;
+                }
+            }
+            if (count > countFinal) {
+                throw new BinanceConnectorException("Only one of the following parameters is allowed: " + Arrays.toString(parameters));
+            }
+        }
+    }
+
+    public static void checkOneOfParametersRequired(JSONObject params, String... parameters) {
+        String exceptMsg = "One of the following parameters is required: " + Arrays.toString(parameters);
+        if (params != null) {
+            int count = countStart;
+            int length = parameters.length;
+            for (int i = countStart; i < length; i += countFinal) {
+                if (!params.has(parameters[i])) {
+                    count += countFinal;
+                }
+            }
+            if (count == parameters.length) {
+                throw new BinanceConnectorException(exceptMsg);
+            }
+            return;
+        }
+        throw new BinanceConnectorException(exceptMsg);
+    }
+}

+ 23 - 0
binance/src/main/java/com/binance/connector/client/utils/ProxyAuth.java

@@ -0,0 +1,23 @@
+package com.binance.connector.client.utils;
+
+import java.net.Proxy;
+import okhttp3.Authenticator;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/ProxyAuth.class */
+public final class ProxyAuth {
+    private Proxy proxy;
+    private Authenticator auth;
+
+    public ProxyAuth(Proxy proxy, Authenticator auth) {
+        this.proxy = proxy;
+        this.auth = auth;
+    }
+
+    public Proxy getProxy() {
+        return this.proxy;
+    }
+
+    public Authenticator getAuth() {
+        return this.auth;
+    }
+}

+ 61 - 0
binance/src/main/java/com/binance/connector/client/utils/RequestBuilder.java

@@ -0,0 +1,61 @@
+package com.binance.connector.client.utils;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import okhttp3.MediaType;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/RequestBuilder.class */
+public final class RequestBuilder {
+    private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
+    private static final String USER_AGENT = "binance-connector-java/3.0.0rc3";
+    private static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
+
+    private RequestBuilder() {
+    }
+
+    public static Request buildPublicRequest(String fullUrl, HttpMethod httpMethod) {
+        try {
+            Request.Builder requestBuilder = new Request.Builder().addHeader("User-Agent", USER_AGENT).addHeader("Content-Type", CONTENT_TYPE).url(fullUrl);
+            switch (httpMethod) {
+                case POST:
+                    return requestBuilder.post(RequestBody.create("", JSON_TYPE)).build();
+                case GET:
+                    return requestBuilder.get().build();
+                case PUT:
+                    return requestBuilder.put(RequestBody.create("", JSON_TYPE)).build();
+                case DELETE:
+                    return requestBuilder.delete().build();
+                default:
+                    throw new BinanceConnectorException("Invalid HTTP method: " + httpMethod);
+            }
+        } catch (IllegalArgumentException e) {
+            throw new BinanceConnectorException("Invalid URL: " + e.getMessage());
+        }
+    }
+
+    public static Request buildApiKeyRequest(String fullUrl, HttpMethod httpMethod, String apiKey) {
+        try {
+            Request.Builder requestBuilder = new Request.Builder().addHeader("User-Agent", USER_AGENT).addHeader("Content-Type", CONTENT_TYPE).addHeader("X-MBX-APIKEY", apiKey).url(fullUrl);
+            switch (httpMethod) {
+                case POST:
+                    return requestBuilder.post(RequestBody.create("", JSON_TYPE)).build();
+                case GET:
+                    return requestBuilder.get().build();
+                case PUT:
+                    return requestBuilder.put(RequestBody.create("", JSON_TYPE)).build();
+                case DELETE:
+                    return requestBuilder.delete().build();
+                default:
+                    throw new BinanceConnectorException("Invalid HTTP method: " + httpMethod);
+            }
+        } catch (IllegalArgumentException e) {
+            throw new BinanceConnectorException("Invalid URL: " + e.getMessage());
+        }
+    }
+
+    public static Request buildWebSocketRequest(String fullUrl) {
+        return new Request.Builder().url(fullUrl).build();
+    }
+}

+ 58 - 0
binance/src/main/java/com/binance/connector/client/utils/RequestHandler.java

@@ -0,0 +1,58 @@
+package com.binance.connector.client.utils;
+
+import com.binance.connector.client.enums.HttpMethod;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.utils.signaturegenerator.Ed25519SignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.RsaSignatureGenerator;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/RequestHandler.class */
+public class RequestHandler {
+    private final String apiKey;
+    private final SignatureGenerator signatureGenerator;
+    private static final Logger logger = LoggerFactory.getLogger(RequestHandler.class);
+    private final ProxyAuth proxy;
+
+    public RequestHandler(String apiKey, ProxyAuth proxy) {
+        this(apiKey, null, proxy);
+    }
+
+    public RequestHandler(String apiKey, SignatureGenerator signatureGenerator, ProxyAuth proxy) {
+        this.apiKey = apiKey;
+        this.signatureGenerator = signatureGenerator;
+        this.proxy = proxy;
+    }
+
+    public String sendPublicRequest(String baseUrl, String urlPath, Map<String, Object> parameters, HttpMethod httpMethod, boolean showLimitUsage) {
+        String fullUrl = UrlBuilder.buildFullUrl(baseUrl, urlPath, parameters);
+        logger.info("{} {}", httpMethod, fullUrl);
+        return ResponseHandler.handleResponse(RequestBuilder.buildPublicRequest(fullUrl, httpMethod), showLimitUsage, this.proxy);
+    }
+
+    public String sendApiRequest(String baseUrl, String urlPath, Map<String, Object> parameters, HttpMethod httpMethod, boolean showLimitUsage) {
+        if (null == this.apiKey || this.apiKey.isEmpty()) {
+            throw new BinanceConnectorException("[RequestHandler] API key cannot be null or empty!");
+        }
+        String fullUrl = UrlBuilder.buildFullUrl(baseUrl, urlPath, parameters);
+        logger.info("{} {}", httpMethod, fullUrl);
+        return ResponseHandler.handleResponse(RequestBuilder.buildApiKeyRequest(fullUrl, httpMethod, this.apiKey), showLimitUsage, this.proxy);
+    }
+
+    public String sendSignedRequest(String baseUrl, String urlPath, Map<String, Object> parameters, HttpMethod httpMethod, boolean showLimitUsage) {
+        if (this.signatureGenerator.getClass() == HmacSignatureGenerator.class && (null == this.apiKey || this.apiKey.isEmpty())) {
+            throw new BinanceConnectorException("[RequestHandler] Secret key/API key cannot be null or empty!");
+        } else if ((this.signatureGenerator.getClass() == RsaSignatureGenerator.class || this.signatureGenerator.getClass() == Ed25519SignatureGenerator.class) && (null == this.apiKey || this.apiKey.isEmpty())) {
+            throw new BinanceConnectorException("[RequestHandler] Private key/API key cannot be null or empty!");
+        } else {
+            parameters.put("timestamp", UrlBuilder.buildTimestamp());
+            parameters.put("signature", this.signatureGenerator.getSignature(UrlBuilder.joinQueryParameters(parameters)));
+            String fullUrl = UrlBuilder.buildFullUrl(baseUrl, urlPath, parameters);
+            logger.info("{} {}", httpMethod, fullUrl);
+            return ResponseHandler.handleResponse(RequestBuilder.buildApiKeyRequest(fullUrl, httpMethod, this.apiKey), showLimitUsage, this.proxy);
+        }
+    }
+}

+ 105 - 0
binance/src/main/java/com/binance/connector/client/utils/ResponseHandler.java

@@ -0,0 +1,105 @@
+package com.binance.connector.client.utils;
+
+import com.binance.connector.client.exceptions.BinanceClientException;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.exceptions.BinanceServerException;
+import com.binance.connector.client.utils.httpclient.HttpClientSingleton;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.UnknownHostException;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import okhttp3.ResponseBody;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/ResponseHandler.class */
+public final class ResponseHandler {
+    private static OkHttpClient client;
+    private static final int HTTP_STATUS_CODE_400 = 400;
+    private static final int HTTP_STATUS_CODE_499 = 499;
+    private static final int HTTP_STATUS_CODE_500 = 500;
+
+    private ResponseHandler() {
+    }
+
+    public static String handleResponse(Request request, boolean showLimitUsage, ProxyAuth proxy) {
+        client = HttpClientSingleton.getHttpClient(proxy);
+        try {
+            Response response = client.newCall(request).execute();
+            Throwable th = null;
+            if (null == response) {
+                throw new BinanceServerException("[ResponseHandler] No response from server");
+            }
+            String responseAsString = getResponseBodyAsString(response.body());
+            if (response.code() >= HTTP_STATUS_CODE_400 && response.code() <= HTTP_STATUS_CODE_499) {
+                throw handleErrorResponse(responseAsString, response.code());
+            } else if (response.code() >= HTTP_STATUS_CODE_500) {
+                throw new BinanceServerException(responseAsString, response.code());
+            } else if (showLimitUsage) {
+                String limitUsage = getLimitUsage(response, responseAsString);
+                if (response != null) {
+                    if (0 != 0) {
+                        try {
+                            response.close();
+                        } catch (Throwable th2) {
+                            th.addSuppressed(th2);
+                        }
+                    } else {
+                        response.close();
+                    }
+                }
+                return limitUsage;
+            } else {
+                if (response != null) {
+                    if (0 != 0) {
+                        try {
+                            response.close();
+                        } catch (Throwable th3) {
+                            th.addSuppressed(th3);
+                        }
+                    } else {
+                        response.close();
+                    }
+                }
+                return responseAsString;
+            }
+        } catch (IOException | IllegalStateException e) {
+            String exceptionMsg = "OKHTTP Error: ";
+            if (proxy != null) {
+                if (e.getClass().equals(ConnectException.class)) {
+                    exceptionMsg = "Proxy Connection Error: ";
+                } else if (e.getClass().equals(UnknownHostException.class)) {
+                    exceptionMsg = "Proxy Unknown Host Error: ";
+                }
+            }
+            throw new BinanceConnectorException("[ResponseHandler] " + exceptionMsg + e.getMessage());
+        }
+    }
+
+    private static String getLimitUsage(Response response, String resposeBodyAsString) {
+        JSONObject json = new JSONObject();
+        json.put("x-sapi-used-ip-weight-1m", response.header("X-SAPI-USED-IP-WEIGHT-1M"));
+        json.put("x-sapi-used-uid-weight-1m", response.header("X-SAPI-USED-UID-WEIGHT-1M"));
+        json.put("x-mbx-used-weight", response.header("x-mbx-used-weight"));
+        json.put("x-mbx-used-weight-1m", response.header("x-mbx-used-weight-1m"));
+        json.put("data", resposeBodyAsString);
+        return json.toString();
+    }
+
+    private static BinanceClientException handleErrorResponse(String responseBody, int responseCode) {
+        try {
+            return new BinanceClientException(responseBody, JSONParser.getJSONStringValue(responseBody, "msg"), responseCode, JSONParser.getJSONIntValue(responseBody, "code"));
+        } catch (JSONException e) {
+            throw new BinanceClientException(responseBody, responseCode);
+        }
+    }
+
+    private static String getResponseBodyAsString(ResponseBody body) throws IOException {
+        if (null != body) {
+            return body.string();
+        }
+        return "";
+    }
+}

+ 101 - 0
binance/src/main/java/com/binance/connector/client/utils/UrlBuilder.java

@@ -0,0 +1,101 @@
+package com.binance.connector.client.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/UrlBuilder.class */
+public final class UrlBuilder {
+    private static final int DIFF_TILL_POSITION_INDEX = 1;
+    private static final int MAX_DECIMAL_DIGITS = 30;
+
+    /* renamed from: df */
+    private static DecimalFormat f0df;
+
+    private UrlBuilder() {
+    }
+
+    public static String buildFullUrl(String baseUrl, String urlPath, Map<String, Object> parameters) {
+        StringBuilder sb = new StringBuilder(baseUrl).append(urlPath);
+        if (parameters != null && !parameters.isEmpty()) {
+            sb.append("?");
+            sb.append(joinQueryParameters(parameters));
+        }
+        return sb.toString();
+    }
+
+    public static String buildStreamUrl(String baseUrl, ArrayList<String> streams) {
+        StringBuilder sb = new StringBuilder(baseUrl).append("/stream");
+        if (streams != null && !streams.isEmpty()) {
+            sb.append("?streams=");
+            sb.append(joinStreamUrls(streams));
+        }
+        return sb.toString();
+    }
+
+    public static String joinQueryParameters(Map<String, Object> params) {
+        return joinQueryParameters(new StringBuilder(), params).toString();
+    }
+
+    public static StringBuilder joinQueryParameters(StringBuilder sb, Map<String, Object> params) {
+        String value;
+        if (params != null && !params.isEmpty()) {
+            for (String key : params.keySet()) {
+                sb.append(key);
+                sb.append("=");
+                if (params.get(key) instanceof Double) {
+                    value = getFormatter().format(params.get(key));
+                } else {
+                    value = params.get(key).toString();
+                }
+                sb.append(urlEncode(value));
+                sb.append("&");
+            }
+            sb.deleteCharAt(sb.length() - DIFF_TILL_POSITION_INDEX);
+        }
+        return sb;
+    }
+
+    public static String joinStreamUrls(ArrayList<String> streams) {
+        return joinStreamUrls(new StringBuilder(), streams).toString();
+    }
+
+    public static StringBuilder joinStreamUrls(StringBuilder sb, ArrayList<String> streams) {
+        if (streams != null && !streams.isEmpty()) {
+            Iterator<String> it = streams.iterator();
+            while (it.hasNext()) {
+                sb.append(it.next());
+                sb.append("/");
+            }
+            sb.deleteCharAt(sb.length() - DIFF_TILL_POSITION_INDEX);
+        }
+        return sb;
+    }
+
+    public static String urlEncode(String s) {
+        try {
+            return URLEncoder.encode(s, StandardCharsets.UTF_8.name());
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(StandardCharsets.UTF_8.name() + " is unsupported", e);
+        }
+    }
+
+    public static String buildTimestamp() {
+        return String.valueOf(System.currentTimeMillis());
+    }
+
+    private static DecimalFormat getFormatter() {
+        if (null == f0df) {
+            f0df = new DecimalFormat("#,##0.###", new DecimalFormatSymbols(Locale.ENGLISH));
+            f0df.setMaximumFractionDigits(MAX_DECIMAL_DIGITS);
+            f0df.setGroupingUsed(false);
+        }
+        return f0df;
+    }
+}

+ 98 - 0
binance/src/main/java/com/binance/connector/client/utils/WebSocketConnection.java

@@ -0,0 +1,98 @@
+package com.binance.connector.client.utils;
+
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosedCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketClosingCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketFailureCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketMessageCallback;
+import com.binance.connector.client.utils.websocketcallback.WebSocketOpenCallback;
+import java.util.concurrent.atomic.AtomicInteger;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import okhttp3.WebSocket;
+import okhttp3.WebSocketListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/WebSocketConnection.class */
+public class WebSocketConnection extends WebSocketListener {
+    private static final int NORMAL_CLOSURE_STATUS = 1000;
+    private static OkHttpClient client;
+    private final Request request;
+    private final String streamName;
+    private final WebSocketOpenCallback onOpenCallback;
+    private final WebSocketMessageCallback onMessageCallback;
+    private final WebSocketClosingCallback onClosingCallback;
+    private final WebSocketClosedCallback onClosedCallback;
+    private final WebSocketFailureCallback onFailureCallback;
+    private static final AtomicInteger connectionCounter = new AtomicInteger(0);
+    private static final Logger logger = LoggerFactory.getLogger(WebSocketConnection.class);
+    private final int connectionId = connectionCounter.incrementAndGet();
+    private WebSocket webSocket = null;
+    private final Object mutex = new Object();
+
+    public WebSocketConnection(WebSocketOpenCallback onOpenCallback, WebSocketMessageCallback onMessageCallback, WebSocketClosingCallback onClosingCallback, WebSocketClosedCallback onClosedCallback, WebSocketFailureCallback onFailureCallback, Request request, OkHttpClient client2) {
+        this.onOpenCallback = onOpenCallback;
+        this.onMessageCallback = onMessageCallback;
+        this.onClosingCallback = onClosingCallback;
+        this.onClosedCallback = onClosedCallback;
+        this.onFailureCallback = onFailureCallback;
+        this.request = request;
+        this.streamName = request.url().host() + request.url().encodedPath();
+        client = client2;
+    }
+
+    public void connect() {
+        synchronized (this.mutex) {
+            if (null == this.webSocket) {
+                logger.info("[Connection {}] Connecting to {}", Integer.valueOf(this.connectionId), this.streamName);
+                this.webSocket = client.newWebSocket(this.request, this);
+            } else {
+                logger.info("[Connection {}] is already connected to {}", Integer.valueOf(this.connectionId), this.streamName);
+            }
+        }
+    }
+
+    public int getConnectionId() {
+        return this.connectionId;
+    }
+
+    public void send(String message) {
+        if (null == this.webSocket) {
+            throw new BinanceConnectorException("No WebSocket connection. Please connect first!");
+        }
+        this.webSocket.send(message);
+    }
+
+    public void close() {
+        if (null != this.webSocket) {
+            logger.info("[Connection {}] Closing connection to {}", Integer.valueOf(this.connectionId), this.streamName);
+            this.webSocket.close((int) NORMAL_CLOSURE_STATUS, (String) null);
+        }
+    }
+
+    public void onOpen(WebSocket ws, Response response) {
+        logger.info("[Connection {}] Connected to Server", Integer.valueOf(this.connectionId));
+        this.onOpenCallback.onOpen(response);
+    }
+
+    public void onClosing(WebSocket ws, int code, String reason) {
+        WebSocketConnection.super.onClosing(ws, code, reason);
+        this.onClosingCallback.onClosing(code, reason);
+    }
+
+    public void onClosed(WebSocket ws, int code, String reason) {
+        WebSocketConnection.super.onClosed(ws, code, reason);
+        this.onClosedCallback.onClosed(code, reason);
+    }
+
+    public void onMessage(WebSocket ws, String text) {
+        this.onMessageCallback.onMessage(text);
+    }
+
+    public void onFailure(WebSocket ws, Throwable t, Response response) {
+        logger.error("[Connection {}] Failure", Integer.valueOf(this.connectionId), t);
+        this.onFailureCallback.onFailure(t, response);
+    }
+}

+ 46 - 0
binance/src/main/java/com/binance/connector/client/utils/httpclient/HttpClientSingleton.java

@@ -0,0 +1,46 @@
+package com.binance.connector.client.utils.httpclient;
+
+import com.binance.connector.client.utils.ProxyAuth;
+import java.net.Proxy;
+import okhttp3.OkHttpClient;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/httpclient/HttpClientSingleton.class */
+public final class HttpClientSingleton {
+    private static OkHttpClient httpClient = null;
+
+    private HttpClientSingleton() {
+    }
+
+    private static void createHttpClient(ProxyAuth proxy) {
+        if (proxy == null) {
+            httpClient = new OkHttpClient();
+        } else if (proxy.getAuth() == null) {
+            httpClient = new OkHttpClient.Builder().proxy(proxy.getProxy()).build();
+        } else {
+            httpClient = new OkHttpClient.Builder().proxy(proxy.getProxy()).proxyAuthenticator(proxy.getAuth()).build();
+        }
+    }
+
+    private static void verifyHttpClient(ProxyAuth proxy) {
+        Proxy prevProxy = httpClient.proxy();
+        if ((proxy != null && !proxy.getProxy().equals(prevProxy)) || (proxy == null && prevProxy != null)) {
+            createHttpClient(proxy);
+        }
+    }
+
+    public static OkHttpClient getHttpClient(ProxyAuth proxy) {
+        if (httpClient == null) {
+            createHttpClient(proxy);
+        } else {
+            verifyHttpClient(proxy);
+        }
+        return httpClient;
+    }
+
+    public static OkHttpClient getHttpClient() {
+        if (httpClient == null) {
+            createHttpClient(null);
+        }
+        return httpClient;
+    }
+}

+ 15 - 0
binance/src/main/java/com/binance/connector/client/utils/httpclient/WebSocketApiHttpClientSingleton.java

@@ -0,0 +1,15 @@
+package com.binance.connector.client.utils.httpclient;
+
+import okhttp3.OkHttpClient;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/httpclient/WebSocketApiHttpClientSingleton.class */
+public final class WebSocketApiHttpClientSingleton {
+    private static final OkHttpClient httpClient = new OkHttpClient();
+
+    private WebSocketApiHttpClientSingleton() {
+    }
+
+    public static OkHttpClient getHttpClient() {
+        return httpClient;
+    }
+}

+ 15 - 0
binance/src/main/java/com/binance/connector/client/utils/httpclient/WebSocketStreamHttpClientSingleton.java

@@ -0,0 +1,15 @@
+package com.binance.connector.client.utils.httpclient;
+
+import okhttp3.OkHttpClient;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/httpclient/WebSocketStreamHttpClientSingleton.class */
+public final class WebSocketStreamHttpClientSingleton {
+    private static final OkHttpClient httpClient = new OkHttpClient();
+
+    private WebSocketStreamHttpClientSingleton() {
+    }
+
+    public static OkHttpClient getHttpClient() {
+        return httpClient;
+    }
+}

+ 37 - 0
binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/Ed25519SignatureGenerator.java

@@ -0,0 +1,37 @@
+package com.binance.connector.client.utils.signaturegenerator;
+
+import com.binance.connector.client.utils.ParameterChecker;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.security.Security;
+import java.util.Base64;
+import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters;
+import org.bouncycastle.crypto.signers.Ed25519Signer;
+import org.bouncycastle.crypto.util.PrivateKeyFactory;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.util.io.pem.PemReader;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/signaturegenerator/Ed25519SignatureGenerator.class */
+public final class Ed25519SignatureGenerator implements SignatureGenerator {
+    private Ed25519PrivateKeyParameters privateKey;
+    private final int offset = 0;
+
+    public Ed25519SignatureGenerator(String privateKey) throws FileNotFoundException, IOException {
+        ParameterChecker.checkParameterType(privateKey, String.class, "privateKey");
+        Security.addProvider(new BouncyCastleProvider());
+        PemReader pemReader = new PemReader(new FileReader(privateKey));
+        this.privateKey = (Ed25519PrivateKeyParameters) PrivateKeyFactory.createKey(pemReader.readPemObject().getContent());
+        pemReader.close();
+    }
+
+    @Override // com.binance.connector.client.utils.signaturegenerator.SignatureGenerator
+    public String getSignature(String data) {
+        byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8);
+        Ed25519Signer signer = new Ed25519Signer();
+        signer.init(true, this.privateKey);
+        signer.update(dataBytes, 0, dataBytes.length);
+        return Base64.getEncoder().encodeToString(signer.generateSignature());
+    }
+}

+ 29 - 0
binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/HmacSignatureGenerator.java

@@ -0,0 +1,29 @@
+package com.binance.connector.client.utils.signaturegenerator;
+
+import com.binance.connector.client.utils.ParameterChecker;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import org.apache.commons.codec.binary.Hex;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/signaturegenerator/HmacSignatureGenerator.class */
+public final class HmacSignatureGenerator implements SignatureGenerator {
+    private static final String HMAC_SHA256 = "HmacSHA256";
+    private String apiSecret;
+
+    public HmacSignatureGenerator(String apiSecret) {
+        ParameterChecker.checkParameterType(apiSecret, String.class, "apiSecret");
+        this.apiSecret = apiSecret;
+    }
+
+    @Override // com.binance.connector.client.utils.signaturegenerator.SignatureGenerator
+    public String getSignature(String data) {
+        try {
+            SecretKeySpec secretKeySpec = new SecretKeySpec(this.apiSecret.getBytes(), HMAC_SHA256);
+            Mac mac = Mac.getInstance(HMAC_SHA256);
+            mac.init(secretKeySpec);
+            return Hex.encodeHexString(mac.doFinal(data.getBytes()));
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to calculate hmac-sha256", e);
+        }
+    }
+}

+ 68 - 0
binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/RsaSignatureGenerator.java

@@ -0,0 +1,68 @@
+package com.binance.connector.client.utils.signaturegenerator;
+
+import com.binance.connector.client.utils.ParameterChecker;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.KeyFactory;
+import java.security.Signature;
+import java.security.interfaces.RSAPrivateKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Base64;
+import javax.crypto.EncryptedPrivateKeyInfo;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/signaturegenerator/RsaSignatureGenerator.class */
+public final class RsaSignatureGenerator implements SignatureGenerator {
+    private static final String RSA_SHA256 = "SHA256withRSA";
+    private static final String RSA = "RSA";
+    private RSAPrivateKey privateKey;
+
+    public RsaSignatureGenerator(String privateKey) {
+        this(privateKey, null);
+    }
+
+    public RsaSignatureGenerator(String privateKey, String password) {
+        ParameterChecker.checkParameterType(privateKey, String.class, "privateKey");
+        try {
+            this.privateKey = parsePrivateKey(new File(privateKey).exists() ? new String(Files.readAllBytes(Paths.get(privateKey, new String[0]))) : privateKey, password);
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to find/read private key at given file path", e);
+        } catch (Exception e2) {
+            throw new RuntimeException("Failed to parse RSA private key", e2);
+        }
+    }
+
+    @Override // com.binance.connector.client.utils.signaturegenerator.SignatureGenerator
+    public String getSignature(String data) {
+        try {
+            Signature privateSignature = Signature.getInstance(RSA_SHA256);
+            privateSignature.initSign(this.privateKey);
+            privateSignature.update(data.getBytes());
+            return Base64.getEncoder().encodeToString(privateSignature.sign());
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to calculate rsa-sha256", e);
+        }
+    }
+
+    private RSAPrivateKey parsePrivateKey(String privateKeyPem, String password) throws Exception {
+        String parsedPem;
+        PKCS8EncodedKeySpec encodedKeySpec;
+        String parsedPem2 = privateKeyPem.replace("\n", "").trim();
+        if (password != null) {
+            parsedPem = parsedPem2.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----", "").replace("-----END ENCRYPTED PRIVATE KEY-----", "");
+        } else {
+            parsedPem = parsedPem2.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");
+        }
+        byte[] encoded = Base64.getDecoder().decode(parsedPem);
+        if (password != null) {
+            EncryptedPrivateKeyInfo pkInfo = new EncryptedPrivateKeyInfo(encoded);
+            encodedKeySpec = pkInfo.getKeySpec(SecretKeyFactory.getInstance(pkInfo.getAlgName()).generateSecret(new PBEKeySpec(password.toCharArray())));
+        } else {
+            encodedKeySpec = new PKCS8EncodedKeySpec(encoded);
+        }
+        return (RSAPrivateKey) KeyFactory.getInstance(RSA).generatePrivate(encodedKeySpec);
+    }
+}

+ 6 - 0
binance/src/main/java/com/binance/connector/client/utils/signaturegenerator/SignatureGenerator.java

@@ -0,0 +1,6 @@
+package com.binance.connector.client.utils.signaturegenerator;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/signaturegenerator/SignatureGenerator.class */
+public interface SignatureGenerator {
+    String getSignature(String str);
+}

+ 66 - 0
binance/src/main/java/com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.java

@@ -0,0 +1,66 @@
+package com.binance.connector.client.utils.websocketapi;
+
+import com.binance.connector.client.enums.RequestType;
+import com.binance.connector.client.exceptions.BinanceConnectorException;
+import com.binance.connector.client.utils.JSONParser;
+import com.binance.connector.client.utils.ParameterChecker;
+import com.binance.connector.client.utils.UrlBuilder;
+import com.binance.connector.client.utils.WebSocketConnection;
+import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator;
+import org.json.JSONObject;
+
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.class */
+public class WebSocketApiRequestHandler {
+    private final SignatureGenerator signatureGenerator;
+    private final String apiKey;
+    private WebSocketConnection connection;
+
+    public WebSocketApiRequestHandler(WebSocketConnection connection, String apiKey, SignatureGenerator signatureGenerator) {
+        if (connection == null) {
+            throw new BinanceConnectorException("[WebSocketApiRequestHandler] WebSocketConnection cannot be null");
+        }
+        this.connection = connection;
+        this.apiKey = apiKey;
+        this.signatureGenerator = signatureGenerator;
+    }
+
+    public void publicRequest(String method) {
+        request(RequestType.PUBLIC, method, null);
+    }
+
+    public void publicRequest(String method, JSONObject parameters) {
+        request(RequestType.PUBLIC, method, parameters);
+    }
+
+    public void apiRequest(String method, JSONObject parameters) {
+        request(RequestType.WITH_API_KEY, method, parameters);
+    }
+
+    public void signedRequest(String method, JSONObject parameters) {
+        request(RequestType.SIGNED, method, parameters);
+    }
+
+    public void request(RequestType requestType, String method, JSONObject parameters) {
+        Object requestId = ParameterChecker.processId(JSONParser.pullValue(parameters, "requestId"), "requestId");
+        ParameterChecker.checkParameterType(method, String.class, "method");
+        switch (requestType) {
+            case PUBLIC:
+                this.connection.send(JSONParser.buildJSONString(requestId, method, parameters));
+                return;
+            case WITH_API_KEY:
+                ParameterChecker.checkParameterType(this.apiKey, String.class, "apiKey");
+                this.connection.send(JSONParser.buildJSONString(requestId, method, JSONParser.addKeyValue(parameters, "apiKey", this.apiKey)));
+                return;
+            case SIGNED:
+                ParameterChecker.checkParameterType(this.apiKey, String.class, "apiKey");
+                JSONObject parameters2 = JSONParser.addKeyValue(parameters, "apiKey", this.apiKey);
+                parameters2.put("timestamp", UrlBuilder.buildTimestamp());
+                ParameterChecker.checkParameterType(this.signatureGenerator, SignatureGenerator.class, "signatureGenerator");
+                parameters2.put("signature", this.signatureGenerator.getSignature(UrlBuilder.joinQueryParameters(JSONParser.sortJSONObject(parameters2))));
+                this.connection.send(JSONParser.buildJSONString(requestId, method, parameters2));
+                return;
+            default:
+                throw new BinanceConnectorException("[WebSocketApiRequestHandler] Invalid request type: " + requestType);
+        }
+    }
+}

+ 7 - 0
binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketClosedCallback.java

@@ -0,0 +1,7 @@
+package com.binance.connector.client.utils.websocketcallback;
+
+@FunctionalInterface
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/websocketcallback/WebSocketClosedCallback.class */
+public interface WebSocketClosedCallback {
+    void onClosed(int i, String str);
+}

+ 7 - 0
binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketClosingCallback.java

@@ -0,0 +1,7 @@
+package com.binance.connector.client.utils.websocketcallback;
+
+@FunctionalInterface
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/websocketcallback/WebSocketClosingCallback.class */
+public interface WebSocketClosingCallback {
+    void onClosing(int i, String str);
+}

+ 9 - 0
binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketFailureCallback.java

@@ -0,0 +1,9 @@
+package com.binance.connector.client.utils.websocketcallback;
+
+import okhttp3.Response;
+
+@FunctionalInterface
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/websocketcallback/WebSocketFailureCallback.class */
+public interface WebSocketFailureCallback {
+    void onFailure(Throwable th, Response response);
+}

+ 7 - 0
binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketMessageCallback.java

@@ -0,0 +1,7 @@
+package com.binance.connector.client.utils.websocketcallback;
+
+@FunctionalInterface
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/websocketcallback/WebSocketMessageCallback.class */
+public interface WebSocketMessageCallback {
+    void onMessage(String str);
+}

+ 9 - 0
binance/src/main/java/com/binance/connector/client/utils/websocketcallback/WebSocketOpenCallback.java

@@ -0,0 +1,9 @@
+package com.binance.connector.client.utils.websocketcallback;
+
+import okhttp3.Response;
+
+@FunctionalInterface
+/* loaded from: binance-connector-java-3.0.0rc3.jar:com/binance/connector/client/utils/websocketcallback/WebSocketOpenCallback.class */
+public interface WebSocketOpenCallback {
+    void onOpen(Response response);
+}

+ 9 - 0
binance/src/main/resources/META-INF/maven/archetype.xml

@@ -0,0 +1,9 @@
+<archetype>
+  <id>binance</id>
+  <sources>
+    <source>src/main/java/App.java</source>
+  </sources>
+  <testSources>
+    <source>src/test/java/AppTest.java</source>
+  </testSources>
+</archetype>

+ 15 - 0
binance/src/main/resources/archetype-resources/pom.xml

@@ -0,0 +1,15 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>$com.binance</groupId>
+  <artifactId>$binance</artifactId>
+  <version>$3.8.5</version>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

+ 13 - 0
binance/src/main/resources/archetype-resources/src/main/java/App.java

@@ -0,0 +1,13 @@
+package $com.binance;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

+ 38 - 0
binance/src/main/resources/archetype-resources/src/test/java/AppTest.java

@@ -0,0 +1,38 @@
+package $com.binance;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

+ 1907 - 0
logs/sys-error.log

@@ -0,0 +1,1907 @@
+21:33:25.399 [restartedMain] ERROR c.a.d.p.DruidDataSource - [init,929] - init datasource error, url: jdbc:mysql://localhost:3306/echo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
+java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1444)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)
+	at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:194)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
+	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
+	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
+	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
+	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
+	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
+	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
+	at jdk.proxy2/jdk.proxy2.$Proxy160.query(Unknown Source)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
+	at jdk.proxy2/jdk.proxy2.$Proxy127.selectList(Unknown Source)
+	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
+	at jdk.proxy3/jdk.proxy3.$Proxy159.selectConfigList(Unknown Source)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.loadingConfigCache(SysConfigServiceImpl.java:177)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.init(SysConfigServiceImpl.java:40)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
+	at com.ruoyi.ApiApplication.main(ApiApplication.java:26)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
+21:33:25.401 [restartedMain] ERROR c.a.d.p.DruidDataSource - [init,971] - {dataSource-1} init error
+java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1444)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)
+	at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:194)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
+	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
+	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
+	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
+	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
+	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
+	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
+	at jdk.proxy2/jdk.proxy2.$Proxy160.query(Unknown Source)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
+	at jdk.proxy2/jdk.proxy2.$Proxy127.selectList(Unknown Source)
+	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
+	at jdk.proxy3/jdk.proxy3.$Proxy159.selectConfigList(Unknown Source)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.loadingConfigCache(SysConfigServiceImpl.java:177)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.init(SysConfigServiceImpl.java:40)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
+	at com.ruoyi.ApiApplication.main(ApiApplication.java:26)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
+21:33:25.416 [Druid-ConnectionPool-Create-244672564] ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException, url: jdbc:mysql://localhost:3306/echo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8, errorCode 1045, state 28000
+java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910)
+21:33:25.427 [restartedMain] ERROR o.s.b.SpringApplication - [reportFailure,870] - Application run failed
+org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisStreamConfig' defined in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-api/target/classes/com/ruoyi/config/RedisStreamConfig.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketRunner': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketConfigdd': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
+	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
+	at com.ruoyi.ApiApplication.main(ApiApplication.java:26)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketRunner': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketConfigdd': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+	... 22 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketConfigdd': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 34 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 48 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 64 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 80 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 96 common frames omitted
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 112 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
+	... 131 common frames omitted
+Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
+	at jdk.proxy2/jdk.proxy2.$Proxy127.selectList(Unknown Source)
+	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
+	at jdk.proxy3/jdk.proxy3.$Proxy159.selectConfigList(Unknown Source)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.loadingConfigCache(SysConfigServiceImpl.java:177)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.init(SysConfigServiceImpl.java:40)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
+	... 143 common frames omitted
+Caused by: org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
+	... 157 common frames omitted
+Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:83)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
+	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
+	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
+	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
+	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
+	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
+	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
+	at jdk.proxy2/jdk.proxy2.$Proxy160.query(Unknown Source)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
+	... 162 common frames omitted
+Caused by: java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1444)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)
+	at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:194)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	... 174 common frames omitted
+21:53:12.696 [restartedMain] ERROR c.a.d.p.DruidDataSource - [init,929] - init datasource error, url: jdbc:mysql://localhost:3306/echo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
+java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1444)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)
+	at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:194)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
+	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
+	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
+	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
+	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
+	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
+	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
+	at jdk.proxy2/jdk.proxy2.$Proxy160.query(Unknown Source)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
+	at jdk.proxy2/jdk.proxy2.$Proxy127.selectList(Unknown Source)
+	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
+	at jdk.proxy3/jdk.proxy3.$Proxy159.selectConfigList(Unknown Source)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.loadingConfigCache(SysConfigServiceImpl.java:177)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.init(SysConfigServiceImpl.java:40)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
+	at com.ruoyi.ApiApplication.main(ApiApplication.java:26)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
+21:53:12.698 [restartedMain] ERROR c.a.d.p.DruidDataSource - [init,971] - {dataSource-1} init error
+java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1444)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)
+	at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:194)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
+	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
+	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
+	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
+	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
+	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
+	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
+	at jdk.proxy2/jdk.proxy2.$Proxy160.query(Unknown Source)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
+	at jdk.proxy2/jdk.proxy2.$Proxy127.selectList(Unknown Source)
+	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
+	at jdk.proxy3/jdk.proxy3.$Proxy159.selectConfigList(Unknown Source)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.loadingConfigCache(SysConfigServiceImpl.java:177)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.init(SysConfigServiceImpl.java:40)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
+	at com.ruoyi.ApiApplication.main(ApiApplication.java:26)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
+21:53:12.712 [Druid-ConnectionPool-Create-2120067750] ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException, url: jdbc:mysql://localhost:3306/echo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8, errorCode 1045, state 28000
+java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910)
+21:53:12.727 [restartedMain] ERROR o.s.b.SpringApplication - [reportFailure,870] - Application run failed
+org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisStreamConfig' defined in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-api/target/classes/com/ruoyi/config/RedisStreamConfig.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketRunner': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketConfigdd': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
+	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
+	at com.ruoyi.ApiApplication.main(ApiApplication.java:26)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketRunner': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketConfigdd': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+	... 22 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketConfigdd': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 34 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TSecondCoinConfigServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 48 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 64 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TOwnCoinOrderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 80 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAppUserServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 96 common frames omitted
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673)
+	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329)
+	... 112 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
+	... 131 common frames omitted
+Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
+	at jdk.proxy2/jdk.proxy2.$Proxy127.selectList(Unknown Source)
+	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
+	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
+	at jdk.proxy3/jdk.proxy3.$Proxy159.selectConfigList(Unknown Source)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.loadingConfigCache(SysConfigServiceImpl.java:177)
+	at com.ruoyi.system.service.impl.SysConfigServiceImpl.init(SysConfigServiceImpl.java:40)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
+	... 143 common frames omitted
+Caused by: org.apache.ibatis.exceptions.PersistenceException: 
+### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+### The error may exist in file [/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-system/target/classes/mapper/system/SysConfigMapper.xml]
+### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
+### The error occurred while executing a query
+### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
+	... 157 common frames omitted
+Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:83)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
+	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
+	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
+	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:68)
+	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
+	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
+	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
+	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)
+	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
+	at jdk.proxy2/jdk.proxy2.$Proxy160.query(Unknown Source)
+	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
+	... 162 common frames omitted
+Caused by: java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
+	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
+	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
+	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
+	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
+	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118)
+	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232)
+	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703)
+	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786)
+	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1444)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
+	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)
+	at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:194)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	... 174 common frames omitted
+21:56:58.333 [restartedMain] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - 
+
+***************************
+APPLICATION FAILED TO START
+***************************
+
+Description:
+
+Web server failed to start. Port 8220 was already in use.
+
+Action:
+
+Identify and stop the process that's listening on port 8220 or configure this application to listen on another port.
+
+21:56:58.376 [SimpleAsyncTaskExecutor-1] ERROR o.s.d.r.s.DefaultStreamMessageListenerContainer$LoggingErrorHandler - [handleError,388] - Unexpected error occurred in scheduled task.
+java.lang.IllegalStateException: JedisConnectionFactory was destroyed and cannot be used anymore
+	at org.springframework.util.Assert.state(Assert.java:76)
+	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.assertInitialized(JedisConnectionFactory.java:970)
+	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:508)
+	at org.springframework.data.redis.core.RedisConnectionUtils.fetchConnection(RedisConnectionUtils.java:193)
+	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:144)
+	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:105)
+	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:209)
+	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:189)
+	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:176)
+	at org.springframework.data.redis.stream.DefaultStreamMessageListenerContainer.lambda$getReadFunction$4(DefaultStreamMessageListenerContainer.java:258)
+	at org.springframework.data.redis.stream.StreamPollTask.readRecords(StreamPollTask.java:166)
+	at org.springframework.data.redis.stream.StreamPollTask.doLoop(StreamPollTask.java:147)
+	at org.springframework.data.redis.stream.StreamPollTask.run(StreamPollTask.java:132)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:56:58.846 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 10] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:56:58.847 [Async-Service-1] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:56:58.961 [Async-Service-2] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:56:58.961 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 2] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.630 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 14] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.630 [Async-Service-3] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.648 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 8] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.648 [Async-Service-4] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.651 [Async-Service-5] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.651 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 1] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.662 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 6] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.662 [Async-Service-6] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.663 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 7] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.663 [Async-Service-7] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.669 [Async-Service-8] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.669 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 9] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.686 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 4] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.686 [Async-Service-9] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.763 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 12] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.764 [Async-Service-10] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.764 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 11] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.764 [Async-Service-11] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.811 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 15] Failure
+java.lang.IllegalStateException: JedisConnectionFactory was destroyed and cannot be used anymore
+	at org.springframework.util.Assert.state(Assert.java:76)
+	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.assertInitialized(JedisConnectionFactory.java:970)
+	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:508)
+	at org.springframework.data.redis.core.RedisConnectionUtils.fetchConnection(RedisConnectionUtils.java:193)
+	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:144)
+	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:105)
+	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:209)
+	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:189)
+	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96)
+	at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:236)
+	at com.ruoyi.common.core.redis.RedisCache.setCacheObject(RedisCache.java:35)
+	at com.ruoyi.socket.manager.WebSocketUserManager.savePriceRdies(WebSocketUserManager.java:853)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)
+	at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$EnhancerBySpringCGLIB$$f03a653f.savePriceRdies(<generated>)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$initMarketThreadRun$1(MarketThreadBinanceImpl.java:222)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.902 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 13] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:00.902 [Async-Service-12] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:01.029 [Async-Service-13] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:01.029 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 5] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:01.459 [OkHttp https://stream.c.b2c2.top/...] ERROR c.b.c.c.u.WebSocketConnection - [onFailure,116] - [Connection 3] Failure
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.createEvent(MarketThreadBinanceImpl.java:123)
+	at com.ruoyi.socket.service.impl.MarketThreadBinanceImpl.lambda$marketThreadRun$0(MarketThreadBinanceImpl.java:105)
+	at com.binance.connector.client.utils.WebSocketConnection.onMessage(WebSocketConnection.java:111)
+	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.kt:333)
+	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.kt:245)
+	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:106)
+	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
+	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
+	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)
+21:57:01.459 [Async-Service-14] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler - [handleUncaughtException,39] - Unexpected exception occurred invoking async method: public void com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(java.lang.String)
+com.alibaba.fastjson2.JSONException: illegal input, offset 1, char [
+	at com.alibaba.fastjson2.JSONReader.read(JSONReader.java:1450)
+	at com.alibaba.fastjson2.JSON.parseObject(JSON.java:215)
+	at com.alibaba.fastjson2.JSONObject.parseObject(JSONObject.java:1970)
+	at com.ruoyi.socket.manager.WebSocketUserManager.binanceKlineSendMeg(WebSocketUserManager.java:187)
+	at com.ruoyi.socket.manager.WebSocketUserManager$$FastClassBySpringCGLIB$$5b8788d8.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
+	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
+	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
+	at java.base/java.lang.Thread.run(Thread.java:1623)

+ 68 - 0
logs/sys-info.log

@@ -0,0 +1,68 @@
+21:33:21.793 [background-preinit] INFO  o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 6.2.5.Final
+21:33:21.802 [restartedMain] INFO  c.r.ApiApplication - [logStarting,55] - Starting ApiApplication using Java 20 on huangjianfengdeMacBook-Pro-2.local with PID 41656 (/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-api/target/classes started by huangjianfeng in /Users/huangjianfeng/development/区块链数字/echo-git/echo2)
+21:33:21.803 [restartedMain] INFO  c.r.ApiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "dev"
+21:33:23.479 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8220"]
+21:33:23.479 [restartedMain] INFO  o.a.c.c.StandardService - [log,173] - Starting service [Tomcat]
+21:33:23.479 [restartedMain] INFO  o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.75]
+21:33:23.536 [restartedMain] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext
+21:33:25.401 [restartedMain] INFO  c.a.d.p.DruidDataSource - [init,996] - {dataSource-1} inited
+21:33:25.403 [restartedMain] INFO  c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ...
+21:33:25.404 [restartedMain] INFO  c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed
+21:33:25.405 [restartedMain] INFO  o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat]
+21:53:09.304 [background-preinit] INFO  o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 6.2.5.Final
+21:53:09.310 [restartedMain] INFO  c.r.ApiApplication - [logStarting,55] - Starting ApiApplication using Java 20 on huangjianfengdeMacBook-Pro-2.local with PID 46911 (/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-api/target/classes started by huangjianfeng in /Users/huangjianfeng/development/区块链数字/echo-git/echo2)
+21:53:09.311 [restartedMain] INFO  c.r.ApiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "dev"
+21:53:10.793 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8220"]
+21:53:10.793 [restartedMain] INFO  o.a.c.c.StandardService - [log,173] - Starting service [Tomcat]
+21:53:10.793 [restartedMain] INFO  o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.75]
+21:53:10.850 [restartedMain] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext
+21:53:12.698 [restartedMain] INFO  c.a.d.p.DruidDataSource - [init,996] - {dataSource-1} inited
+21:53:12.700 [restartedMain] INFO  c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ...
+21:53:12.701 [restartedMain] INFO  c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed
+21:53:12.702 [restartedMain] INFO  o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat]
+21:56:51.229 [background-preinit] INFO  o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 6.2.5.Final
+21:56:51.237 [restartedMain] INFO  c.r.ApiApplication - [logStarting,55] - Starting ApiApplication using Java 20 on huangjianfengdeMacBook-Pro-2.local with PID 47967 (/Users/huangjianfeng/development/区块链数字/echo-git/echo2/ruoyi-api/target/classes started by huangjianfeng in /Users/huangjianfeng/development/区块链数字/echo-git/echo2)
+21:56:51.240 [restartedMain] INFO  c.r.ApiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "dev"
+21:56:52.912 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8220"]
+21:56:52.912 [restartedMain] INFO  o.a.c.c.StandardService - [log,173] - Starting service [Tomcat]
+21:56:52.912 [restartedMain] INFO  o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.75]
+21:56:52.972 [restartedMain] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext
+21:56:55.126 [restartedMain] INFO  c.a.d.p.DruidDataSource - [init,996] - {dataSource-1} inited
+21:56:56.700 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 1] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/btcusdt@kline_1m
+21:56:56.704 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 2] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/solusdt@kline_1m
+21:56:56.705 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 3] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/blzusdt@kline_1m
+21:56:56.705 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 4] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/adausdt@kline_1m
+21:56:56.705 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 5] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/dogeusdt@kline_1m
+21:56:56.706 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 6] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/trxusdt@kline_1m
+21:56:56.706 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 7] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/usdtusdt@kline_1m
+21:56:56.706 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 8] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/xrpusdt@kline_1m
+21:56:56.706 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 9] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/runeusdt@kline_1m
+21:56:56.707 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 10] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/leverusdt@kline_1m
+21:56:56.707 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 11] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/ltcusdt@kline_1m
+21:56:56.707 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 12] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/maticusdt@kline_1m
+21:56:56.707 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 13] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/bnbusdt@kline_1m
+21:56:56.708 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 14] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/ethusdt@kline_1m
+21:56:56.735 [restartedMain] INFO  c.b.c.c.u.WebSocketConnection - [connect,65] - [Connection 15] Connecting to stream.c.b2c2.top/ws/!ticker@arr/ws/!ticker@arr
+21:56:58.268 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-8220"]
+21:56:58.278 [restartedMain] INFO  sys-user - [shutdownAsyncManager,31] - ====关闭后台任务任务线程池====
+21:56:58.284 [restartedMain] INFO  c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ...
+21:56:58.314 [restartedMain] INFO  c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed
+21:56:58.318 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Pausing ProtocolHandler ["http-nio-8220"]
+21:56:58.318 [restartedMain] INFO  o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat]
+21:56:58.322 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Stopping ProtocolHandler ["http-nio-8220"]
+21:56:58.322 [restartedMain] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Destroying ProtocolHandler ["http-nio-8220"]
+21:56:58.476 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 1] Connected to Server
+21:56:58.481 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 2] Connected to Server
+21:56:58.489 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 10] Connected to Server
+21:56:58.502 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 8] Connected to Server
+21:56:58.526 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 6] Connected to Server
+21:56:58.540 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 9] Connected to Server
+21:56:58.554 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 14] Connected to Server
+21:56:58.554 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 5] Connected to Server
+21:56:58.561 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 4] Connected to Server
+21:56:58.562 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 11] Connected to Server
+21:56:58.563 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 12] Connected to Server
+21:56:58.570 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 7] Connected to Server
+21:56:58.579 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 13] Connected to Server
+21:56:58.579 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 15] Connected to Server
+21:56:59.513 [OkHttp https://stream.c.b2c2.top/...] INFO  c.b.c.c.u.WebSocketConnection - [onOpen,93] - [Connection 3] Connected to Server

+ 1 - 0
logs/sys-user.log

@@ -0,0 +1 @@
+21:56:58.278 [restartedMain] INFO  sys-user - [shutdownAsyncManager,31] - ====关闭后台任务任务线程池====

+ 17 - 26
pom.xml

@@ -48,11 +48,6 @@
                 <artifactId>libthrift</artifactId>
                 <version>0.16.0</version>
             </dependency>
-            <dependency>
-                <groupId>com.binance.dex</groupId>
-                <artifactId>dex-java-sdk</artifactId>
-                <version>1.0.0</version>
-            </dependency>
             <dependency>
                 <groupId>org.bitcoinj</groupId>
                 <artifactId>bitcoinj-core</artifactId>
@@ -211,6 +206,7 @@
         <module>ruoyi-generator</module>
         <module>ruoyi-common</module>
         <module>ruoyi-api</module>
+        <module>binance</module>
     </modules>
     <packaging>pom</packaging>
 
@@ -229,31 +225,34 @@
         </plugins>
     </build>
 
+
+
     <repositories>
         <repository>
-            <id>echo2-group</id>
-            <name>echo2-group</name>
-            <url>https://nexus.ok6.cc/repository/echo2-group/</url>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
             <releases>
                 <enabled>true</enabled>
             </releases>
         </repository>
-    </repositories>
 
-    <distributionManagement>
         <repository>
-            <id>echo2-group</id>
-            <name>echo2-group</name>
-            <url>https://nexus.ok6.cc/repository/echo2-group/</url>
-            <uniqueVersion>true</uniqueVersion>
+            <id>maven-nexus</id>
+            <name>echo2</name>
+            <url>http://127.0.0.1:28081/repository/echo2/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
         </repository>
-    </distributionManagement>
+
+    </repositories>
 
     <pluginRepositories>
         <pluginRepository>
-            <id>echo2-group</id>
-            <name>echo2-group</name>
-            <url>https://nexus.ok6.cc/repository/echo2-group/</url>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
             <releases>
                 <enabled>true</enabled>
             </releases>
@@ -263,12 +262,4 @@
         </pluginRepository>
     </pluginRepositories>
 
-<!--    <repositories>-->
-<!--        <repository>-->
-<!--            <id>datastax-oss</id>-->
-<!--            <name>DataStax OSS Repository</name>-->
-<!--            <url>https://datastax.bintray.com/java-driver-bom</url>-->
-<!--        </repository>-->
-<!--    </repositories>-->
-
 </project>

+ 11 - 0
ruoyi-api/pom.xml

@@ -49,6 +49,17 @@
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
 
+
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+
+
+
+
+
+
 <!--
         &lt;!&ndash; 定时任务&ndash;&gt;
         <dependency>

+ 1 - 1
ruoyi-api/src/main/resources/application-dev.yml

@@ -38,7 +38,7 @@ spring:
             master:
                 url: jdbc:mysql://localhost:3306/echo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
                 username: root
-                password: qiNiu202505
+                password: root
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭

+ 1 - 1
ruoyi-api/target/classes/application-dev.yml

@@ -38,7 +38,7 @@ spring:
             master:
                 url: jdbc:mysql://localhost:3306/echo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
                 username: root
-                password: qiNiu202505
+                password: root
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭

+ 0 - 6
ruoyi-common/pom.xml

@@ -396,12 +396,6 @@
             <artifactId>huobi-linear-swap-api</artifactId>
             <version>1.0.1</version>
         </dependency>
-        <dependency>
-            <groupId>io.github.binance</groupId>
-            <artifactId>binance-connector-java</artifactId>
-            <version>3.0.0rc3</version>
-        </dependency>
-
         <!-- 谷歌验证码 -->
         <dependency>
             <groupId>com.google.zxing</groupId>

+ 33 - 0
ruoyi-system/binance/.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 72 - 0
ruoyi-system/binance/pom.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.binance</groupId>
+    <artifactId>binance</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>binance</name>
+    <description>binance</description>
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.binance.BinanceApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
ruoyi-system/binance/src/main/java/com/binance/BinanceApplication.java

@@ -0,0 +1,13 @@
+package com.binance;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BinanceApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(BinanceApplication.class, args);
+    }
+
+}

+ 13 - 0
ruoyi-system/binance/src/test/java/com/binance/BinanceApplicationTests.java

@@ -0,0 +1,13 @@
+package com.binance;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class BinanceApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}