コード例 #1
0
        public void AddAmount(IDbConnection con, IDbTransaction tx, string poolId, string coin, string address, decimal amount, string usage)
        {
            logger.LogInvoke();

            var now = DateTime.UtcNow;

            // record balance change
            var query = "INSERT INTO balance_changes(poolid, coin, address, amount, usage, created) " +
                        "VALUES(@poolid, @coin, @address, @amount, @usage, @created)";

            var balanceChange = new Entities.BalanceChange
            {
                PoolId  = poolId,
                Coin    = coin.ToString(),
                Created = now,
                Address = address,
                Amount  = amount,
                Usage   = usage,
            };

            con.Execute(query, balanceChange, tx);

            // update balance
            query = "SELECT * FROM balances WHERE poolid = @poolId AND coin = @coin AND address = @address";

            var balance = con.Query <Entities.Balance>(query, new { poolId, coin = coin.ToString(), address }, tx)
                          .FirstOrDefault();

            if (balance == null)
            {
                balance = new Entities.Balance
                {
                    PoolId  = poolId,
                    Coin    = coin.ToString(),
                    Created = now,
                    Address = address,
                    Amount  = amount,
                    Updated = now
                };

                query = "INSERT INTO balances(poolid, coin, address, amount, created, updated) " +
                        "VALUES(@poolid, @coin, @address, @amount, @created, @updated)";

                con.Execute(query, balance, tx);
            }

            else
            {
                query = "UPDATE balances SET amount = amount + @amount, updated = now() at time zone 'utc' " +
                        "WHERE poolid = @poolId AND coin = @coin AND address = @address";

                con.Execute(query, new
                {
                    poolId,
                    address,
                    coin = coin.ToString().ToUpper(),
                    amount
                }, tx);
            }
        }
コード例 #2
0
        public async Task ExecuteBalanceUpdate()
        {
            var dailyInterest = ANNUAL_INTEREST_RATE / 365;

            var accounts = await _context.Accounts.ToListAsync();

            foreach (var acc in accounts)
            {
                if (_context.Balances.Where(b => b.Timestamp == DateTime.Today).Any())
                {
                    continue;
                }

                Entities.Balance nb = new Entities.Balance()
                {
                    AccountId = acc.AccountId,
                    Timestamp = DateTime.Today,
                    Amount    = acc.Balance
                };

                _context.Balances.Add(nb);

                acc.Balance += acc.Balance * dailyInterest;
            }

            await _context.SaveChangesAsync();
        }
コード例 #3
0
        public async Task <int> AddAmountAsync(IDbConnection con, IDbTransaction tx, string poolId, string address, decimal amount, string usage, params string[] tags)
        {
            logger.LogInvoke();

            var now = DateTime.UtcNow;

            // record balance change
            var query = "INSERT INTO balance_changes(poolid, address, amount, usage, tags, created) " +
                        "VALUES(@poolid, @address, @amount, @usage, @tags, @created)";

            var balanceChange = new Entities.BalanceChange
            {
                PoolId  = poolId,
                Created = now,
                Address = address,
                Amount  = amount,
                Usage   = usage,
                Tags    = tags
            };

            await con.ExecuteAsync(query, balanceChange, tx);

            // update balance
            query = "SELECT * FROM balances WHERE poolid = @poolId AND address = @address";

            var balance = (await con.QueryAsync <Entities.Balance>(query, new { poolId, address }, tx))
                          .FirstOrDefault();

            if (balance == null)
            {
                balance = new Entities.Balance
                {
                    PoolId  = poolId,
                    Created = now,
                    Address = address,
                    Amount  = amount,
                    Updated = now
                };

                query = "INSERT INTO balances(poolid, address, amount, created, updated) " +
                        "VALUES(@poolid, @address, @amount, @created, @updated)";

                return(await con.ExecuteAsync(query, balance, tx));
            }

            else
            {
                query = "UPDATE balances SET amount = amount + @amount, updated = now() at time zone 'utc' " +
                        "WHERE poolid = @poolId AND address = @address";

                return(await con.ExecuteAsync(query, new
                {
                    poolId,
                    address,
                    amount
                }, tx));
            }
        }
コード例 #4
0
        public void AddAmount(IDbConnection con, IDbTransaction tx, string poolId, CoinType coin, string address,
                              decimal amount)
        {
            var query = "SELECT * FROM balances WHERE poolid = @poolId AND coin = @coin AND address = @address";

            var balance = con.Query <Entities.Balance>(query, new { poolId, coin = coin.ToString(), address }, tx)
                          .FirstOrDefault();

            var now = DateTime.UtcNow;

            if (balance == null)
            {
                balance = new Entities.Balance
                {
                    PoolId  = poolId,
                    Coin    = coin.ToString(),
                    Created = now,
                    Address = address,
                    Amount  = amount,
                    Updated = now
                };

                query = "INSERT INTO balances(poolid, coin, address, amount, created, updated) " +
                        "VALUES(@poolid, @coin, @address, @amount, @created, @updated)";

                con.Execute(query, balance, tx);
            }

            else
            {
                balance.Updated = now;
                balance.Amount += amount;

                query = "UPDATE balances SET amount = @amount, updated = @updated " +
                        "WHERE poolid = @poolId AND coin = @coin AND address = @address";
                con.Execute(query, balance, tx);
            }
        }
コード例 #5
0
        /// <summary>
        /// Get Balances for account
        /// </summary>
        /// <param name="asset">String of asset</param>
        /// <param name="pair">String of trading pair</param>
        /// <returns>Collection of Balance objects</returns>
        public List <Entities.Balance> GetBalance(string asset, string pair)
        {
            int i = 0;

            if (_thisExchange == Exchange.BINANCE)
            {
                var account = _bianceRepo.GetBalance().Result;

                if (account == null || account.balances == null)
                {
                    return(new List <Entities.Balance>());
                }

                return(account.balances.Where(b => b.asset.Equals(asset) || b.asset.Equals(pair)).ToList());
            }
            else if (_thisExchange == Exchange.GDAX)
            {
                var accountList = _gdaxRepo.GetBalance().Result.ToArray();

                var balances = new List <Entities.Balance>();

                for (i = 0; i < accountList.Count(); i++)
                {
                    if (accountList[i].Currency.Equals(asset) ||
                        accountList[i].Currency.Equals(pair))
                    {
                        var balance = new Entities.Balance
                        {
                            asset  = accountList[i].Currency,
                            free   = accountList[i].Available,
                            locked = accountList[i].Hold
                        };
                        balances.Add(balance);
                    }
                }

                return(balances);
            }
            else if (_thisExchange == Exchange.KUCOIN)
            {
                var accountList = _kuRepo.GetBalance().Result;

                while (accountList == null && i < 3)
                {
                    accountList = _kuRepo.GetBalance().Result;
                    i++;
                }

                var balances = new List <Entities.Balance>();

                if (accountList == null)
                {
                    return(balances);
                }

                accountList = accountList.ToArray();

                for (i = 0; i < accountList.Count(); i++)
                {
                    if (accountList[i].coinType.ToString().Equals(asset) ||
                        accountList[i].coinType.ToString().Equals(pair))
                    {
                        var balance = new Entities.Balance
                        {
                            asset  = accountList[i].coinType.ToString(),
                            free   = accountList[i].balance,
                            locked = accountList[i].freezeBalance
                        };
                        balances.Add(balance);
                    }
                }

                return(balances);
            }
            else
            {
                return(null);
            }
        }