private static void CreateSubUser()
        {
            var client = new SubUserClient(Config.AccessKey, Config.SecretKey);
            var user1  = new UserList
            {
                userName = "******",
                note     = "note"
            };

            var request = new CreateSubUserRequest();

            request.userList    = new UserList[1];
            request.userList[0] = user1;

            var result = client.CreateSubUserAsync(request).Result;

            if (result != null)
            {
                if (result.code == (int)ResponseCode.Success && result.data != null)
                {
                    AppLogger.Info($"Create {result.data.Length} sub users");
                    foreach (var creation in result.data)
                    {
                        AppLogger.Info($"Create sub user success, uid: {creation.uid}, userName: {creation.userName}");
                    }
                }
                else
                {
                    AppLogger.Error($"Create sub user error: {result.message}");
                }
            }
        }
        private static void GetSubUserDepositAddress()
        {
            var walletClient = new SubUserClient(Config.AccessKey, Config.SecretKey);

            _logger.Start();
            var result = walletClient.GetSubUserDepositAddressAsync(Config.SubUserId, "btc").Result;

            _logger.StopAndLog();

            if (result != null)
            {
                if (result.data != null)
                {
                    AppLogger.Info($"Get sub user deposit address, id={result.data.Length}");
                    foreach (var a in result.data)
                    {
                        AppLogger.Info($"currency: {a.currency}, addr: {a.address}, chain: {a.chain}");
                    }
                }
                else
                {
                    AppLogger.Error($"Get sub user deposit address error: code={result.code}, message={result.message}");
                }
            }
        }
        private static void GetSubuserAccountBalance()
        {
            var accountClient = new SubUserClient(Config.AccessKey, Config.SecretKey);

            _logger.Start();
            var result = accountClient.GetSubUserAccountBalanceAsync(Config.SubUserId).Result;

            _logger.StopAndLog();

            if (result != null && result.data != null)
            {
                foreach (var a in result.data)
                {
                    int availableCount = 0;
                    AppLogger.Info($"account id: {a.id}, type: {a.type}");
                    foreach (var b in a.list)
                    {
                        if (Math.Abs(float.Parse(b.balance)) > 0.00001)
                        {
                            availableCount++;
                            AppLogger.Info($"currency: {b.currency}, type: {b.type}, balance: {b.balance}");
                        }
                    }
                    AppLogger.Info($"There are total {a.list.Length} accounts and available {availableCount} currencys in this account");
                }
                AppLogger.Info($"There are total {result.data.Length} accounts");
            }
        }
        private static void TransferCurrencyFromSubToMaster()
        {
            var accountClient = new SubUserClient(Config.AccessKey, Config.SecretKey);

            _logger.Start();
            var result = accountClient.TransferCurrencyFromSubToMasterAsync(Config.SubUserId, "ht", 0.01m).Result;

            _logger.StopAndLog();

            if (result != null)
            {
                switch (result.status)
                {
                case "ok":
                {
                    AppLogger.Info($"Transfer successfully, trade id: {result.data}");
                    break;
                }

                case "error":
                {
                    AppLogger.Info($"Transfer fail, error code: {result.errorCode}, error message: {result.errorMessage}");
                    break;
                }
                }
            }
        }
        private static void GetUID()
        {
            var client = new SubUserClient(Config.AccessKey, Config.SecretKey);

            var result = client.GetUIDAsync().Result;

            if (result != null)
            {
                if (result.code == (int)ResponseCode.Success)
                {
                    AppLogger.Info($"Get UID: {result.data}");
                }
                else
                {
                    AppLogger.Error($"Get UID error, code: {result.code}, message: {result.message}");
                }
            }
        }
        private static void LockSubUser()
        {
            var accountClient = new SubUserClient(Config.AccessKey, Config.SecretKey);

            _logger.Start();
            var result = accountClient.LockSubUserAsync(Config.SubUserId).Result;

            _logger.StopAndLog();

            if (result != null)
            {
                if (result.code == (int)ResponseCode.Success && result.data != null)
                {
                    AppLogger.Info($"Lock sub user {result.data.subUid} result: {result.data.userState}");
                }
                else
                {
                    AppLogger.Info($"Lock sub user error: {result.code}");
                }
            }
        }
        private static void GetSubUserDepositHistory()
        {
            var walletClient = new SubUserClient(Config.AccessKey, Config.SecretKey);

            _logger.Start();
            var request = new GetRequest()
                          .AddParam("subUid", Config.SubUserId);

            var result = walletClient.GetSubUserDepositHistoryAsync(request).Result;

            _logger.StopAndLog();

            if (result != null && result.data != null)
            {
                AppLogger.Info($"Get sub user deposit history, count={result.data.Length}");
                foreach (var h in result.data)
                {
                    AppLogger.Info($"Deposit history, id={h.id}, currency={h.currency}, amount={h.amount}, address={h.address}, updatedAt={h.updateTime}");
                }
            }
        }