예제 #1
0
        public BlockchainAddress FindByAddressAndPrivateKey(string address, string privatekey)
        {
            var cmd = new MySqlCommand("select * from BlockchainAddress where Address = @Address And PrivateKey = @PrivateKey ",
                                       ConnectionHelper.GetConnection());

            cmd.Parameters.AddWithValue("@Address", address);
            cmd.Parameters.AddWithValue("@PrivateKey", privatekey);
            BlockchainAddress blockchainAddress = null;

            var reader = cmd.ExecuteReader();

            if (reader.Read())
            {
                blockchainAddress = new BlockchainAddress();
                {
                    Address    = reader.GetString("address");
                    PrivateKey = reader.GetString("privatekey");
                    Balance    = reader.GetString("balance");
                };
            }

            ConnectionHelper.GetConnection();


            return(blockchainAddress);
        }
        public BlockchainAddress FindByAddressAndPrivateKey(string address, string privatekey)
        {
            var cmd = new MySqlCommand(
                "select * from BlockchainAddress where Address = @Address And PrivateKey = @PrivateKey ",
                ConnectionHelper.GetConnection());

            cmd.Parameters.AddWithValue("@Address", address);
            cmd.Parameters.AddWithValue("@PrivateKey", privatekey);
            var reader = cmd.ExecuteReader();

            if (!reader.Read())
            {
                return(null);
            }

            var blockchainAddress = new BlockchainAddress
            {
                Address    = reader.GetString("Address"),
                PrivateKey = reader.GetString("PrivateKey"),
                Balance    = reader.GetString("Balance")
            };

            reader.Close();

            Console.WriteLine("address" + blockchainAddress.Address);
            ConnectionHelper.GetConnection();

            return(blockchainAddress);
        }
예제 #3
0
        public BlockchainAddress FindByAddressAndPrivateKey(string address, string privateKey)
        {
            // Tạo connection đến db, lấy ra trong bảng shb account những tài khoản có username, password trùng.
            var cmd = new MySqlCommand(
                "select * from blockchain where address = @address and privateKey = @privateKey",
                ConnectionHelper.GetConnection());

            cmd.Parameters.AddWithValue("@address", address);
            cmd.Parameters.AddWithValue("@privateKey", privateKey);
            // Tạo ra một đối tượng của lớp shbAccount.
            BlockchainAddress blockchainAddress = null;
            // Đóng Connection và trả về đối tượng này.
            var dataReader = cmd.ExecuteReader();

            if (dataReader.Read())
            {
                blockchainAddress = new BlockchainAddress()
                {
                    Address    = dataReader.GetString("address"),
                    PrivateKey = dataReader.GetString("privateKey"),
                    Balance    = dataReader.GetDouble("balance")
                };
            }
            ConnectionHelper.CloseConnection();
            // Trong trường hợp không tìm thấy tài khoản thì trả về null.
            return(blockchainAddress);
        }
예제 #4
0
        public BlockchainAddress GetAddressesInfo(string id, string networkName)
        {
            try
            {
                BlockchainAddress blockchainAddresses = null;
                switch (networkName)
                {
                case CryptoCurrency.BTC:
                    blockchainAddresses = new BitcoinAddressRepository(Connection)
                                          .FindById(id);
                    break;

                case CryptoCurrency.ETH:
                    blockchainAddresses = new EthereumAddressRepository(Connection)
                                          .FindById(id);
                    break;

                case CryptoCurrency.VAKA:
                    blockchainAddresses = new VakacoinAccountRepository(Connection)
                                          .FindById(id);
                    break;

                default:
                    throw new Exception("Network name is not defined!");
                }

                return(blockchainAddresses);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
예제 #5
0
        public object UpdateData(string address, string publicKey)
        {
            SecurityContext.DemandPermissions(new UserSecurityProvider(SecurityContext.CurrentAccount.ID), Core.Users.Constants.Action_EditUser);
            var currentAddressString = BlockchainLoginProvider.GetAddress();

            if (!string.IsNullOrEmpty(currentAddressString))
            {
                var currentAddress = JsonConvert.DeserializeObject <BlockchainAddress>(currentAddressString);
                if (currentAddress.PublicKey.Equals(publicKey))
                {
                    return new { isset = true }
                }
                ;

                LogManager.GetLogger("ASC.Api.Documents").InfoFormat("User {0} updates address", SecurityContext.CurrentAccount.ID);
            }

            var account = new BlockchainAddress {
                Address = address, PublicKey = publicKey
            };
            var accountString = JsonConvert.SerializeObject(account);

            BlockchainLoginProvider.UpdateData(accountString);

            return(new
            {
                isset = !string.IsNullOrEmpty(BlockchainLoginProvider.GetAddress())
            });
        }
예제 #6
0
        public bool UpdateBalance(BlockchainAddress currentLoggedInAddress, BlockchainTransaction transaction)
        {
            ConnectionHelper.GetConnect();
            var trans = ConnectionHelper.GetConnect().BeginTransaction();

            try
            {
                var cmd = new MySqlCommand("SELECT balance FROM blockchainaccounts  WHERE address = @address", ConnectionHelper.GetConnect());
                cmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var    dataReader     = cmd.ExecuteReader();
                double currentBalance = 0;
                if (dataReader.Read())
                {
                    currentBalance = dataReader.GetDouble("balance");
                }
                dataReader.Close();
                if (transaction.Type == BlockchainTransaction.TransactionType.WITHDRAW &&
                    currentBalance < (double)transaction.Amount)
                {
                    throw new Exception("Không đủ tiền trong tài khoản.");
                }

                if (transaction.Type == BlockchainTransaction.TransactionType.WITHDRAW)
                {
                    currentBalance -= (double)transaction.Amount;
                }
                if (transaction.Type == BlockchainTransaction.TransactionType.DEPOSIT)
                {
                    currentBalance += (double)transaction.Amount;
                }
                var cmd1 = new MySqlCommand("UPDATE blockchainaccounts SET balance = @balance WHERE address = @address", ConnectionHelper.GetConnect());
                cmd1.Parameters.AddWithValue("@balance", currentBalance);
                cmd1.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var updateResult = cmd1.ExecuteNonQuery();
                var cmd2         = new MySqlCommand("INSERT INTO blockchaintransactions (transactionId, senderAddress, receiverAddress, type, amount, createdAt, updatedAt, status) values ( @transactionId, @senderAddress, @receiverAddress, @type, @amount, @createdAt, @updatedAt, @status) ", ConnectionHelper.GetConnect());
                cmd2.Parameters.AddWithValue("@transactionId", transaction.TransactionId);
                cmd2.Parameters.AddWithValue("@senderAddress", transaction.SenderAddress);
                cmd2.Parameters.AddWithValue("@receiverAddress", transaction.ReceiverAddress);
                cmd2.Parameters.AddWithValue("@type", transaction.Type);
                cmd2.Parameters.AddWithValue("@amount", transaction.Amount);
                cmd2.Parameters.AddWithValue("@createdAt", transaction.CreatedAtMLS);
                cmd2.Parameters.AddWithValue("@updatedAt", transaction.UpdatedAtMLS);
                cmd2.Parameters.AddWithValue("@status", transaction.Status);
                var transactionResult = cmd2.ExecuteNonQuery();
                if (updateResult != 1 || transactionResult != 1)
                {
                    throw new Exception("Không thể thêm giao dịch hoặc update tài khoản.");
                }
                trans.Commit();
            }
            catch (Exception e)
            {
                trans.Rollback();
                Console.WriteLine(e);
                return(false);
            }
            ConnectionHelper.CloseConnect();
            return(true);
        }
예제 #7
0
        public IEnumerable <BlockchainAddress> GetAccessAddresses(string fileId)
        {
            var accountsString = BlockchainAddress.GetAddress(fileId);

            var accounts = accountsString.Select(JsonConvert.DeserializeObject <BlockchainAddress>);

            return(accounts);
        }
예제 #8
0
        public bool Save(BlockchainAddress blockchainAddress)
        {
            var cmd = new MySqlCommand("INSERT INTO blockchainaccounts (address, privateKey, balance) values (@address, @privateKey, @balance)", ConnectionHelper.GetConnect());

            cmd.Parameters.AddWithValue("@address", blockchainAddress.Address);
            cmd.Parameters.AddWithValue("@privateKey", blockchainAddress.PrivateKey);
            cmd.Parameters.AddWithValue("@balance", blockchainAddress.Balance);
            var result = cmd.ExecuteNonQuery();

            ConnectionHelper.CloseConnect();
            return(result == 1);
        }
        public async Task <WalletInfo> GenerateAddress(Currency currency, Guid userId)
        {
            logger.LogInformation("Start {Method} {Currency} {UserId}", nameof(GenerateAddress), currency, userId);

            NewWalletAddress result = null;

            //var customKey = CreateKey(userId);
            try
            {
                result = await addressService.GenerateAddress(currency);
            }
            catch (Exception e)
            {
                logger.LogWarning("Wallet was not created {Method} {UserId} {Exception}", nameof(GenerateAddress), userId, e.ToString());

                logger.LogError("Wallet was not created {Method} {UserId} {Exception}", nameof(GenerateAddress), userId, e.ToString());
            }

            if (result == null)
            {
                logger.LogError("Wallet was not created {Method} {UserId}", nameof(GenerateAddress), userId);
                //TODO: Try to use another gateway?
                return(null);
            }

            var blockchainAddress = new BlockchainAddress()
            {
                Type             = BlockchainAddressType.Deposit,
                DateCreated      = DateTime.UtcNow,
                GatewayCode      = defaultGatewayCode,
                Address          = result.Address,
                VerificationCode = result.VerificationCode,
                UserId           = userId,
                IsActive         = true,
                Currency         = currency
            };

            context.BlockchainAddresses.Add(blockchainAddress);
            await context.SaveChangesAsync();

            logger.LogInformation("Wallet created {WalletId};Address:{Address};UserId:{UserId}", blockchainAddress.Id, result.Address, blockchainAddress.UserId);

            return(new WalletInfo()
            {
                WalletId = blockchainAddress.Id,
                Address = blockchainAddress.Address,
                Currency = blockchainAddress.Currency
            });
        }
예제 #10
0
        private static void GenerateTransactionMenu(GiaoDich giaoDich)
        {
            while (true)
            {
                Console.WriteLine("Please select the transaction type.");
                Console.WriteLine("==================================");
                Console.WriteLine("1. Withdraw.");
                Console.WriteLine("2. Deposit.");
                Console.WriteLine("3. Transfer.");
                Console.WriteLine("4. Exit.");
                Console.WriteLine("===================================");
                Console.WriteLine("Please enter your choice: ");
                var choice1 = int.Parse(Console.ReadLine());
                switch (choice1)
                {
                case 1:
                    giaoDich.Withdraw();
                    break;

                case 2:
                    giaoDich.Deposit();
                    break;

                case 3:
                    giaoDich.Transfer();
                    break;

                case 4:
                    break;

                default:
                    Console.WriteLine("Wrong choice, please try again!");
                    break;
                }

                if (choice1 == 4)
                {
                    Console.WriteLine("Bye! see you again!");
                    currentLoggedInAccount = null;
                    currentLoggedInAddress = null;
                    break;
                }
            }
        }
예제 #11
0
        public BlockchainAddress FindByAddress(string address)
        {
            var cmd = new MySqlCommand("SELECT * FROM blockchainaccounts  WHERE address = @address", ConnectionHelper.GetConnect());

            cmd.Parameters.AddWithValue("@address", address);
            var dataReader = cmd.ExecuteReader();
            BlockchainAddress blockchainAddress = null;

            if (dataReader.Read())
            {
                blockchainAddress = new BlockchainAddress
                {
                    Address    = dataReader.GetString(0),
                    PrivateKey = dataReader.GetString(1),
                    Balance    = dataReader.GetDouble(2),
                };
            }
            ConnectionHelper.CloseConnect();
            return(blockchainAddress);
        }
예제 #12
0
        public BlockchainAddress GetAddress(string addrress)
        {
            ConnectionHelper.GetConnection();
            var queryString = "select * from `blockchain` where `address` = @address";
            var cmd         = new MySqlCommand(queryString, ConnectionHelper.GetConnection());

            cmd.Parameters.AddWithValue("@address", addrress);
            var dataReader = cmd.ExecuteReader();
            BlockchainAddress blockchainAddress = null;

            if (dataReader.Read())
            {
                blockchainAddress = new BlockchainAddress()
                {
                    Address    = dataReader.GetString("address"),
                    PrivateKey = dataReader.GetString("privateKey"),
                    Balance    = dataReader.GetDouble("balance"),
                };
            }
            dataReader.Close();
            ConnectionHelper.CloseConnection();
            return(blockchainAddress);
        }
        public BlockchainAddress FindByAddressAndPrivateKey(string address, string privateKey)
        {
            var cmd = new MySqlCommand(
                "select * from BlockChainAccount where address = @address and privateKey = @privateKey",
                ConnectionHelper.GetConnection());

            cmd.Parameters.AddWithValue("@address", address);
            cmd.Parameters.AddWithValue("@privateKey", privateKey);
            BlockchainAddress blockchainAddress = null;
            var dataReader = cmd.ExecuteReader();

            if (dataReader.Read())
            {
                blockchainAddress = new BlockchainAddress()
                {
                    Address    = dataReader.GetString("address"),
                    PrivateKey = dataReader.GetString("privateKey"),
                    Balance    = dataReader.GetDouble("balance")
                };
            }
            ConnectionHelper.CloseConnection();
            return(blockchainAddress);
        }
예제 #14
0
//        public Wallet FindByAddress(string address)
//        {
//            try
//            {
//                string query = $"SELECT * FROM {TableName} WHERE Address = '{address}'";
//                List<Wallet> wallets = FindBySql(query);
//                if (wallets == null || wallets.Count == 0)
//                    return null;
//                return wallets[0];
//            }
//            catch (Exception e)
//            {
//                Console.WriteLine(e);
//                return null;
//            }
//        }

        public Wallet FindByAddressAndNetworkName(string address, string networkName)
        {
            try
            {
                var walletId = "";
                BlockchainAddress blockchainAddress = null;
                switch (networkName)
                {
                case CryptoCurrency.BTC:
                    blockchainAddress = new BitcoinAddressRepository(Connection).FindByAddress(address);
                    break;

                case CryptoCurrency.ETH:
                    blockchainAddress = new EthereumAddressRepository(Connection).FindByAddress(address);
                    break;

                case CryptoCurrency.VAKA:
                    blockchainAddress = new VakacoinAccountRepository(Connection).FindByAddress(address);
                    break;
                }

                if (blockchainAddress == null)
                {
                    return(null);
                }

                walletId = blockchainAddress.WalletId;

                return(FindById(walletId));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        private static string ProcessSave(string fileId, TrackerData fileData)
        {
            Guid userId;
            var  comments = new List <string>();

            if (fileData.Status == TrackerStatus.Corrupted)
            {
                comments.Add(FilesCommonResource.ErrorMassage_SaveCorrupted);
            }

            if (fileData.Users == null || fileData.Users.Count == 0 || !Guid.TryParse(fileData.Users[0], out userId))
            {
                userId = FileTracker.GetEditingBy(fileId).FirstOrDefault();
            }

            File file;

            using (var fileDao = Global.DaoFactory.GetFileDao())
            {
                file = fileDao.GetFile(fileId);
            }

            var docKey = DocumentServiceHelper.GetDocKey(file);

            if (!fileData.Key.Equals(docKey))
            {
                Global.Logger.ErrorFormat("DocService saving file {0} ({1}) with key {2}", fileId, docKey, fileData.Key);

                StoringFileAfterError(fileId, userId.ToString(), DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url));
                return("0");
            }

            try
            {
                SecurityContext.AuthenticateMe(userId);
            }
            catch (Exception ex)
            {
                Global.Logger.Info("DocService save error: anonymous author - " + userId, ex);
                if (!userId.Equals(ASC.Core.Configuration.Constants.Guest.ID))
                {
                    comments.Add(FilesCommonResource.ErrorMassage_SaveAnonymous);
                }
            }

            file = null;
            var saved = false;

            if (string.IsNullOrEmpty(fileData.Url))
            {
                try
                {
                    comments.Add(FilesCommonResource.ErrorMassage_SaveUrlLost);

                    file = EntryManager.CompleteVersionFile(fileId, 0, false, false);

                    using (var fileDao = Global.DaoFactory.GetFileDao())
                    {
                        fileDao.UpdateComment(file.ID, file.Version, string.Join("; ", comments));
                    }

                    file = null;
                    Global.Logger.ErrorFormat("DocService save error. Empty url. File id: '{0}'. UserId: {1}. DocKey '{2}'", fileId, userId, fileData.Key);
                }
                catch (Exception ex)
                {
                    Global.Logger.Error(string.Format("DocService save error. Version update. File id: '{0}'. UserId: {1}. DocKey '{2}'", fileId, userId, fileData.Key), ex);
                }
            }
            else
            {
                if (fileData.Encrypted)
                {
                    comments.Add(FilesCommonResource.CommentEditEncrypt);
                }

                try
                {
                    file  = EntryManager.SaveEditing(fileId, null, DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url), null, string.Empty, string.Join("; ", comments), false, fileData.Encrypted);
                    saved = fileData.Status == TrackerStatus.MustSave;
                }
                catch (Exception ex)
                {
                    Global.Logger.Error(string.Format("DocService save error. File id: '{0}'. UserId: {1}. DocKey '{2}'. DownloadUri: {3}", fileId, userId, fileData.Key, fileData.Url), ex);

                    StoringFileAfterError(fileId, userId.ToString(), DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url));
                }
            }

            FileTracker.Remove(fileId);

            if (file != null)
            {
                var user = CoreContext.UserManager.GetUsers(userId);
                if (user != null)
                {
                    FilesMessageService.Send(file, MessageInitiator.DocsService, MessageAction.UserFileUpdated, user.DisplayUserName(false), file.Title);
                }

                SaveHistory(file, (fileData.History ?? "").ToString(), DocumentServiceConnector.ReplaceDocumentAdress(fileData.ChangesUrl));
            }

            Global.SocketManager.FilesChangeEditors(fileId, true);

            return(string.Format("{{\"error\":{0}{1}}}",
                                 saved
                                     ? "0"  //error:0 - saved
                                     : "1", //error:1 - some error
                                 saved && file != null && file.Encrypted
                                     ? string.Format(",\"addresses\":[{0}]", string.Join(",", BlockchainAddress.GetAddress(file.ID.ToString())))
                                     : string.Empty
                                 ));
        }
예제 #16
0
        public bool UpdateBalance(BlockchainAddress currentLoggedInAccount, BlockchainTransaction transaction)
        {
            ConnectionHelper.GetConnection();
            var tranB = ConnectionHelper.GetConnection().BeginTransaction();

            try
            {
                var cmd = new MySqlCommand("select * from Blockchain where Address ,@address",
                                           ConnectionHelper.GetConnection());
                cmd.Parameters.AddWithValue("@senderAddress", currentLoggedInAccount.PrivateKey);
                BlockchainAddress blockchainAddress = null;
                var    reader = cmd.ExecuteReader();
                double currentAccountBalance = 0;

                if (reader.Read())
                {
                    currentAccountBalance = reader.GetDouble("balance");
                }

                reader.Close();
                if (currentAccountBalance < 0)
                {
                    Console.WriteLine("Không đủ tiền trong tài khoản.");
                    return(false);
                }

                if (transaction.Type == 1)
                {
                    if (currentAccountBalance < transaction.Amount)
                    {
                        Console.WriteLine("Khong du tien thuc hien giao dich");
                        return(false);
                    }
                    currentAccountBalance -= transaction.Amount;
                }
                else if (transaction.Type == 2)
                {
                    currentAccountBalance += transaction.Amount;
                }

                var updateQuery =
                    "update `BlockChain` set `balance` = @balance where accountNumber = @accountNumber";
                var sqlCmd = new MySqlCommand(updateQuery, ConnectionHelper.GetConnection());
                sqlCmd.Parameters.AddWithValue("@balance", currentAccountBalance);
                sqlCmd.Parameters.AddWithValue("@accountNumber", currentLoggedInAccount.PrivateKey);
                var updateResult            = sqlCmd.ExecuteNonQuery();
                var historyTransactionQuery =
                    "insert into `BlockTransaction` (transactionId, type, senderAccountNumber, receiverAccountNumber, amount, message) " +
                    "values (@id, @type, @senderAccountNumber, @receiverAccountNumber, @amount, @message)";
                var historyTransactionCmd =
                    new MySqlCommand(historyTransactionQuery, ConnectionHelper.GetConnection());

                historyTransactionCmd.Parameters.AddWithValue("@amount", transaction.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@type", transaction.Type);
                historyTransactionCmd.Parameters.AddWithValue("@receiver", transaction.ReceiverAddress);
                historyTransactionCmd.Parameters.AddWithValue("@created",
                                                              transaction.CreatedAtMLS);
                historyTransactionCmd.Parameters.AddWithValue("@update",
                                                              transaction.UpdatedAtMLS);
                var historyResult = historyTransactionCmd.ExecuteNonQuery();

                if (updateResult != 1 || historyResult != 1)
                {
                }

                tranB.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                tranB.Rollback();
                return(false);
            }

            ConnectionHelper.CloseConnection();
            return(true);
        }
        public bool Tranfer(BlockchainAddress currentLoggedInAddress, BlockchainTransaction transactionHb)
        {
            var conn = ConnectionHelper.GetConnection();

            var myTransaction = conn.BeginTransaction();

            try
            {
                var balanceSender = new MySqlCommand("select * from blockchainaddress where address = @address ",
                                                     conn, myTransaction);
                balanceSender.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);

                double currentAccountBalance = 0;
                var    reader = balanceSender.ExecuteReader();
                if (reader.Read())
                {
                    currentAccountBalance = reader.GetDouble("balance");
                }

                reader.Close();
                currentAccountBalance -= transactionHb.Amount;

                var updateQuery = ("update blockchainaddress set balance = @balance where address = @address");
                var sqlCmd      = new MySqlCommand(updateQuery, conn, myTransaction);
                sqlCmd.Parameters.AddWithValue("@balance", currentAccountBalance);
                sqlCmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var updateRs = sqlCmd.ExecuteNonQuery();

                var balanceReceiver = new MySqlCommand("select * from blockchainaddress where address = @address ",
                                                       conn, myTransaction);
                balanceReceiver.Parameters.AddWithValue("@address", transactionHb.ReceiverAddress);
                double receiverBalance = 0;
                var    readerReceiver  = balanceReceiver.ExecuteReader();

                if (readerReceiver.Read())
                {
                    receiverBalance = readerReceiver.GetDouble("balance");
                }

                readerReceiver.Close();

                receiverBalance += (transactionHb.Amount * 200);


                var updateQueryReceiver =
                    ("update blockchainaddress set balance = @balance where address = @address");
                var sqlCmdReceiver = new MySqlCommand(updateQueryReceiver, conn, myTransaction);
                sqlCmdReceiver.Parameters.AddWithValue("@balance", receiverBalance);
                sqlCmdReceiver.Parameters.AddWithValue("@address", transactionHb.ReceiverAddress);
                var updateResultReceiver = sqlCmdReceiver.ExecuteNonQuery();

                var historyTransactionQuery =
                    "insert into blockchaintransaction (TransactionId, Type, SenderAddress, ReceiverAddress, Amount, CreatedAtMLS, UpdatedAtMLS, Status) " +
                    "values (@id, @type, @senderAddress, @receiverAddress, @amount, @createdAtMLS, @updatedAtMLS, @status)";
                var historyTransactionCmd =
                    new MySqlCommand(historyTransactionQuery, conn, myTransaction);
                historyTransactionCmd.Parameters.AddWithValue("@id", transactionHb.TransactionId);
                historyTransactionCmd.Parameters.AddWithValue("@type", transactionHb.Type);
                historyTransactionCmd.Parameters.AddWithValue("@senderAddress",
                                                              transactionHb.SenderAddress);
                historyTransactionCmd.Parameters.AddWithValue("@receiverAddress",
                                                              transactionHb.ReceiverAddress);
                historyTransactionCmd.Parameters.AddWithValue("@amount", transactionHb.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@createdAtMLS", transactionHb.CreatedAtMLS);
                historyTransactionCmd.Parameters.AddWithValue("@updatedAtMLS", transactionHb.UpdateAtMLS);
                historyTransactionCmd.Parameters.AddWithValue("@status", transactionHb.Status);
                var historyResult = historyTransactionCmd.ExecuteNonQuery();

                if (updateRs != 1 || historyResult != 1 || updateResultReceiver != 1)
                {
                    throw new Exception("Không thể thêm giao dịch hoặc update tài khoản.");
                }

                myTransaction.Commit();
                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                myTransaction.Rollback();
                return(false);
            }
            finally
            {
                conn.Close();
            }
        }
        public bool UpdateBalance(BlockchainAddress currentAddress, BlockchainTransaction blockchainTransaction)
        {
            ConnectionHelper.GetConnection();
            var tran = ConnectionHelper.GetConnection().BeginTransaction();

            try
            {
                var cmd = new MySqlCommand("select * from BlockchainAddress where Address = @Address",
                                           ConnectionHelper.GetConnection());
                cmd.Parameters.AddWithValue("@Address", currentAddress.Address);
                var    reader = cmd.ExecuteReader();
                double currentAddressBalance = 0;

                if (reader.Read())
                {
                    currentAddressBalance = reader.GetDouble("balance");
                }

                reader.Close();
                if (currentAddressBalance < 0)
                {
                    Console.WriteLine("Khong du tien");
                    return(false);
                }

                if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.WITHDRAW)
                {
                    if (currentAddressBalance < blockchainTransaction.Amount)
                    {
                        Console.WriteLine("Khong du tien de thuc hien giao dich");
                        return(false);
                    }

                    currentAddressBalance -= blockchainTransaction.Amount;
                }
                else if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.DEPOSIT)
                {
                    currentAddressBalance += blockchainTransaction.Amount;
                }

                var updateQuery =
                    "update `blockchainaddress` set `balance` = @balance where Address = @Address";
                var sqlCmd = new MySqlCommand(updateQuery, ConnectionHelper.GetConnection());
                sqlCmd.Parameters.AddWithValue("@balance", currentAddressBalance);
                sqlCmd.Parameters.AddWithValue("@address", currentAddress.Address);
                var updateResult = sqlCmd.ExecuteNonQuery();


                var historyTransactionQuery =
                    "insert into `blockchaintransaction` (TransactionId, Type, Amount, SenderAddress, ReceiverAddress, CreatedAtMLS, UpdateAtMLS)" +
                    "values (@id, @type, @amount, @SenderAddress, @ReceiverAddress, @CreatedAtMLS, @UpdateAtMLS)";

                var historyTransactionCmd = new MySqlCommand(historyTransactionQuery, ConnectionHelper.GetConnection());
                historyTransactionCmd.Parameters.AddWithValue("@id", blockchainTransaction.TransactionId);
                historyTransactionCmd.Parameters.AddWithValue("@amount", blockchainTransaction.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@type", blockchainTransaction.Type);
                historyTransactionCmd.Parameters.AddWithValue("@message", blockchainTransaction.Status);
                historyTransactionCmd.Parameters.AddWithValue("@SenderAddress",
                                                              blockchainTransaction.SenderAddress);
                historyTransactionCmd.Parameters.AddWithValue("@ReceiverAddress",
                                                              blockchainTransaction.ReceiverAddress);
                historyTransactionCmd.Parameters.AddWithValue("@CreatedAtMLS",
                                                              blockchainTransaction.CreatedAtMLS);
                historyTransactionCmd.Parameters.AddWithValue("@UpdateAtMLS",
                                                              blockchainTransaction.UpdateAtMLS);
                var historyResult = historyTransactionCmd.ExecuteNonQuery();
                if (updateResult != 1 || historyResult != 1)
                {
                    throw new Exception("Khong the giao dich hoac them tai khoan.");
                }

                tran.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                tran.Rollback();
                return(false);
            }

            ConnectionHelper.GetConnection();
            return(true);
        }
예제 #19
0
        public bool UpdateBalanceBlockchain(BlockchainAddress currentLoggedInAddress,
                                            BlockchainTransaction blockchainTransaction)
        {
            // 4. Commit transaction.
            ConnectionHelper.GetConnection();
            var transaction1 = ConnectionHelper.GetConnection().BeginTransaction(); // mở giao dịch.

            try
            {
                var cmd = new MySqlCommand("select balance from blockchain where address = @address",
                                           ConnectionHelper.GetConnection());
                cmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                BlockchainAddress blockchainAddress = null;
                var    dataReader            = cmd.ExecuteReader();
                double currentAddressBalance = 0;
                if (dataReader.Read())
                {
                    currentAddressBalance = dataReader.GetDouble("balance");
                }



                dataReader.Close();
                if (currentAddressBalance < 0)
                {
                    Console.WriteLine("Not enough money in the account.");
                    return(false);
                }

                if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.WITHDRAW &&
                    currentAddressBalance < blockchainTransaction.Amount)
                {
                    throw new Exception("Not enough money in the account.");
                }

                if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.WITHDRAW)
                {
                    currentAddressBalance -= blockchainTransaction.Amount;
                }

                else if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.DEPOSIT)
                {
                    currentAddressBalance += blockchainTransaction.Amount;
                }
                else if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.TRANSFER)
                {
                }

                var updateQuery =
                    "update `blockchain` set `balance` = @balance where address = @address";
                var sqlCmd = new MySqlCommand(updateQuery, ConnectionHelper.GetConnection());
                sqlCmd.Parameters.AddWithValue("@balance", currentAddressBalance);
                sqlCmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var updateResult = sqlCmd.ExecuteNonQuery();

                var historyTransactionQuery =
                    "insert into `blockchaintransaction` (transactionId, type, senderAddress, receiverAddress, amount, message, createAtMLS, updateAtMLS, status) " +
                    "values (@transactionId, @type, @senderAddress, @receiverAddress, @amount, @message, @createAtMLS, @updateAtMLS, @status)";
                var historyTransactionCmd =
                    new MySqlCommand(historyTransactionQuery, ConnectionHelper.GetConnection());
                historyTransactionCmd.Parameters.AddWithValue("@transactionId", blockchainTransaction.TransactionId);
                historyTransactionCmd.Parameters.AddWithValue("@amount", blockchainTransaction.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@type", blockchainTransaction.Type);
                historyTransactionCmd.Parameters.AddWithValue("@message", blockchainTransaction.Message);
                historyTransactionCmd.Parameters.AddWithValue("@createAtMLS", blockchainTransaction.CreateAtMlS);
                historyTransactionCmd.Parameters.AddWithValue("@updateAtMLS", blockchainTransaction.UpdateAtMlS);
                historyTransactionCmd.Parameters.AddWithValue("@status", blockchainTransaction.Status);
                historyTransactionCmd.Parameters.AddWithValue("@senderAddress",
                                                              blockchainTransaction.SenderAddress);
                historyTransactionCmd.Parameters.AddWithValue("@receiverAddress",
                                                              blockchainTransaction.ReceiverAddress);
                var historyResult = historyTransactionCmd.ExecuteNonQuery();

                if (updateResult != 1 || historyResult != 1)
                {
                    throw new Exception("cannot add a transaction or update an account, please check again.");
                }

                transaction1.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                transaction1.Rollback(); // lưu giao dịch vào.
                return(false);
            }
            ConnectionHelper.CloseConnection();
            return(true);
        }
예제 #20
0
        public bool Transfer(BlockchainAddress currentLoggedInAddress, BlockchainTransaction blockchainTransaction)
        {
            ConnectionHelper.GetConnection();
            var transaction1 = ConnectionHelper.GetConnection().BeginTransaction(); // mở giao dịch.

            try
            {
                // Kiểm tra số dư tài khoản.
                var selectBalance =
                    "select balance from blockchain where address = @address";
                var cmdSelect = new MySqlCommand(selectBalance, ConnectionHelper.GetConnection());
                cmdSelect.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var    dataReader            = cmdSelect.ExecuteReader();
                double currentAccountBalance = 0;
                if (dataReader.Read())
                {
                    currentAccountBalance = dataReader.GetDouble("balance");
                }

                dataReader.Close();

                if (currentAccountBalance < blockchainTransaction.Amount)
                {
                    throw new Exception("Not enough money in the account.");
                }

                currentAccountBalance -= blockchainTransaction.Amount;
                //Tiến hành trừ tiền tài khoản gửi.



                // Update tài khoản.

                var updateQuery =
                    "update `blockchain` set `balance` = @balance where address = @address";
                var sqlCmd = new MySqlCommand(updateQuery, ConnectionHelper.GetConnection());
                sqlCmd.Parameters.AddWithValue("@balance", currentAccountBalance);
                sqlCmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var updateResult = sqlCmd.ExecuteNonQuery();

                // Kiểm tra số dư tài khoản.
                var selectBalanceReceiver =
                    "select balance from `blockchain` where address = @address";
                var cmdSelectReceiver = new MySqlCommand(selectBalanceReceiver, ConnectionHelper.GetConnection());
                cmdSelectReceiver.Parameters.AddWithValue("@address", blockchainTransaction.ReceiverAddress);
                var    readerReceiver  = cmdSelectReceiver.ExecuteReader();
                double receiverBalance = 0;
                if (readerReceiver.Read())
                {
                    receiverBalance = readerReceiver.GetDouble("balance");
                }

                readerReceiver.Close(); // important.
                //Tiến hành cộng tiền tài khoản nhận.
                receiverBalance += blockchainTransaction.Amount;

                // Update tài khoản.
                var updateQueryReceiver =
                    "update `blockchain` set `balance` = @balance where address = @address";
                var sqlCmdReceiver = new MySqlCommand(updateQueryReceiver, ConnectionHelper.GetConnection());
                sqlCmdReceiver.Parameters.AddWithValue("@balance", receiverBalance);
                sqlCmdReceiver.Parameters.AddWithValue("@address", blockchainTransaction.ReceiverAddress);
                var updateResultReceiver = sqlCmdReceiver.ExecuteNonQuery();

                // Lưu lịch sử giao dịch.
                var historyTransactionQuery =
                    "insert into `blockchaintransaction` (transactionId, amount, type, message, senderAddress, receiverAddress,createAtMlS, updateAtMlS, status) " +
                    "values (@transactionId, @amount, @type, @message, @senderAddress, @receiverAddress, @createAtMlS, @updateAtMlS, @status )";
                var historyTransactionCmd =
                    new MySqlCommand(historyTransactionQuery, ConnectionHelper.GetConnection());
                historyTransactionCmd.Parameters.AddWithValue("@transactionId", blockchainTransaction.TransactionId);
                historyTransactionCmd.Parameters.AddWithValue("@amount", blockchainTransaction.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@type", blockchainTransaction.Type);
                historyTransactionCmd.Parameters.AddWithValue("@message", blockchainTransaction.Message);
                historyTransactionCmd.Parameters.AddWithValue("@senderAddress",
                                                              blockchainTransaction.SenderAddress);
                historyTransactionCmd.Parameters.AddWithValue("@receiverAddress",
                                                              blockchainTransaction.ReceiverAddress);
                historyTransactionCmd.Parameters.AddWithValue("@createAtMlS", blockchainTransaction.CreateAtMlS);
                historyTransactionCmd.Parameters.AddWithValue("@updateAtMlS", blockchainTransaction.UpdateAtMlS);
                historyTransactionCmd.Parameters.AddWithValue("@status", blockchainTransaction.Status);
                var historyResult = historyTransactionCmd.ExecuteNonQuery();

                if (updateResult != 1 || historyResult != 1 || updateResultReceiver != 1)
                {
                    throw new Exception("cannot add a transaction or update an account, please check again.");
                }

                transaction1.Commit();
                return(true);
            }
            catch (Exception e)
            {
                transaction1.Rollback();
                Console.WriteLine(e.StackTrace);
                Console.WriteLine(e.Message);
                Console.WriteLine(e.Source);
                Console.WriteLine(e.ToString());
                return(false);
            }
            finally
            {
                ConnectionHelper.CloseConnection();
            }
        }
예제 #21
0
        public bool UpdateBalance(BlockchainAddress currentLoggedInAccount, BlockchainTransaction blockchainTransaction)
        {
            ConnectionHelper.GetConnection();
            MySqlConnection mySqlConnection;
            var             tran = ConnectionHelper.GetConnection().BeginTransaction();

            try
            {
                var cmd = new MySqlCommand("select * from BlockchainAddress where Address = @Address",
                                           ConnectionHelper.GetConnection());
                cmd.Parameters.AddWithValue("@Address", currentLoggedInAccount.Address);
                BlockchainAddress blockchainAddress = null;
                var    reader = cmd.ExecuteReader();
                double currentAddressBalance = 0;

                if (reader.Read())
                {
                    currentAddressBalance = reader.GetDouble("balance");
                }
                reader.Close();
                if (currentAddressBalance < 0)
                {
                    Console.WriteLine("Khong du tien");
                    return(false);
                }

                if ((blockchainTransaction.Type = 1) != 0)
                {
                    if (currentAddressBalance < blockchainTransaction.Amount)
                    {
                        Console.WriteLine("Khong du tien de thuc hien giao dich");
                        return(false);
                    }
                    currentAddressBalance -= blockchainTransaction.Amount;
                }
                else if (blockchainTransaction.Type == 2)
                {
                    currentAddressBalance += blockchainTransaction.Amount;
                }
                var updateQuery =
                    "update `BlockchainAddress` set `balance` = @balance where Address = @Address";


                var sqlCmd = new MySqlCommand(updateQuery, ConnectionHelper.GetConnection());
                sqlCmd.Parameters.AddWithValue("@balance", currentAddressBalance);
                sqlCmd.Parameters.AddWithValue("@address", currentLoggedInAccount.Address);


                var updateResult = sqlCmd.ExecuteNonQuery();


                var historyTransactionQuery =
                    "insert into `BlockchainTransaction` (transactionId, type, senderAccountNumber, receiveAccountNumber, amount, status)" +
                    "values(@id, @type, @senderAccountNumber, @receiveAccountNumber, @amount, @status)";


                var historyTransactionCmd = new MySqlCommand(historyTransactionQuery, ConnectionHelper.GetConnection());
                historyTransactionCmd.Parameters.AddWithValue("@id", blockchainTransaction.TransactionID);
                historyTransactionCmd.Parameters.AddWithValue("@amount", blockchainTransaction.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@type", blockchainTransaction.Type);
                historyTransactionCmd.Parameters.AddWithValue("@message", blockchainTransaction.Status);
                historyTransactionCmd.Parameters.AddWithValue("@senderAccountNumber",
                                                              blockchainTransaction.SenderAddress);
                historyTransactionCmd.Parameters.AddWithValue("@receiverAccountNumber",
                                                              BlockchainTransaction.ReceiverAddress);


                var historyResult = historyTransactionCmd.ExecuteNonQuery();


                if (updateResult != 1 || historyResult != 1)
                {
                    throw new Exception("Khong the giao dich hoac them tai khoan.");
                }
                tran.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                tran.Rollback();
                return(false);
            }

            ConnectionHelper.GetConnection();
            return(true);
        }
예제 #22
0
        public IActionResult About()
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");

            IConfigurationRoot Configuration = builder.Build();

            decimal surcharge  = Convert.ToDecimal(Configuration["surcharge"]);
            decimal coinWeight = Convert.ToDecimal(Configuration["coinWeight"]);

            ViewData["Message"] = "Your application description page.";
            string            meetingId   = HttpContext.Session.GetString("activeVoteContractAddress");
            List <SHOAccount> shoaccounts = Context.shoaccounts.AsQueryable().ToList();

            string publicAddress = "1zzzJv5hYmWbN79zHm5f4ZQRR8k9GWQTf";

            if (meetingId != "-1")
            {
                ////////////////
                List <Question>          questions           = _blockchainContext.questions;
                List <BlockchainAddress> blockchainAddresses = new List <BlockchainAddress>();

                foreach (SHOAccount shoaccount in shoaccounts)
                {
                    foreach (Question question in questions)
                    {
                        BlockchainAddress blockchainAddress = new BlockchainAddress();
                        decimal           totalCoins        = Convert.ToDecimal(shoaccount.AvailableShares) * coinWeight + Convert.ToDecimal("0.02");
                        string            transactionid     = sendCoinsToAddress(publicAddress, totalCoins.ToString());
                        Console.Write(transactionid);
                        blockchainAddress.isFirstTransaction       = true;
                        blockchainAddress.publicAddress            = publicAddress;
                        blockchainAddress.generalFundPublicAddress = publicAddress;
                        blockchainAddress.meetingId          = meetingId;
                        blockchainAddress.controlNumber      = shoaccount.ControlNumber;
                        blockchainAddress.quid               = question.quid;
                        blockchainAddress.coins              = totalCoins.ToString();
                        blockchainAddress.transactionId      = transactionid;
                        blockchainAddress.currentTransaction = true;
                        blockchainAddresses.Add(blockchainAddress);
                    }



                    //}
                    /////////////////////////////////////
                    //for (int x = 0; x < 50000; x++)
                    //{
                    //    foreach (Question question in questions)
                    //    {
                    //        decimal totalCoins = Convert.ToDecimal("1000") * coinWeight;
                    //        string transactionid = sendCoinsToAddress(publicAddress, totalCoins.ToString());
                    //        Console.Write(x.ToString() + " " + transactionid);

                    //        InitialTransaction initialTransaction = new InitialTransaction();
                    //        initialTransaction.transactionId = transactionid;
                    //        initialTransaction.controlNumber = "444";
                    //        initialTransaction.meetingId = meetingId;
                    //        initialTransaction.quid = question.quid;
                    //        initialTransaction.publicAddress = publicAddress;
                    //        initialTransaction.amount = totalCoins.ToString();

                    //        initialtransactions.Add(initialTransaction);
                    //    }


                    //}
                }
                Console.Write(DateTime.Now.ToString() + "\n");
                Context.blockchainaddresses.InsertManyAsync(blockchainAddresses);
                Console.Write(DateTime.Now.ToString() + "\n");
            }
            else
            {
            }
            return(View());
        }
예제 #23
0
 public bool FindByAddress(BlockchainAddress currentLoggedInAddress, BlockchainTransaction transaction)
 {
     throw new NotImplementedException();
 }
        public bool UpdateBalanceBlockchain(BlockchainAddress currentLoggedInAddress,
                                            BlockchainTransaction blockchainTransaction)
        {
            ConnectionHelper.GetConnection();
            var transaction1 = ConnectionHelper.GetConnection().BeginTransaction();

            try
            {
                var cmd = new MySqlCommand("select balance from BlockChainAccount where address = @address",
                                           ConnectionHelper.GetConnection());
                cmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                BlockchainAddress blockchainAddress = null;
                var    dataReader            = cmd.ExecuteReader();
                double currentAddressBalance = 0;
                if (dataReader.Read())
                {
                    currentAddressBalance = dataReader.GetDouble("balance");
                }



                dataReader.Close();
                if (currentAddressBalance < 0)
                {
                    Console.WriteLine("Không đủ tiền trong tài khoản.");
                    return(false);
                }

                if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.WITHDRAW &&
                    currentAddressBalance < blockchainTransaction.Amount)
                {
                    throw new Exception("Không đủ tiền trong tài khoản.");
                }

                if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.WITHDRAW)
                {
                    currentAddressBalance -= blockchainTransaction.Amount;
                }

                else if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.DEPOSIT)
                {
                    currentAddressBalance += blockchainTransaction.Amount;
                }
                else if (blockchainTransaction.Type == BlockchainTransaction.TransactionType.TRANSFER)
                {
                }

                var updateQuery =
                    "update `BlockChainAccount` set `balance` = @balance where address = @address";
                var sqlCmd = new MySqlCommand(updateQuery, ConnectionHelper.GetConnection());
                sqlCmd.Parameters.AddWithValue("@balance", currentAddressBalance);
                sqlCmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address);
                var updateResult = sqlCmd.ExecuteNonQuery();

                var historyTransactionQuery =
                    "insert into `BlockChainTransaction` (transactionId, type, senderAddress, receiverAddress, amount, message) " +
                    "values (@transactionId, @type, @senderAddress, @receiverAddress, @amount, @message)";
                var historyTransactionCmd =
                    new MySqlCommand(historyTransactionQuery, ConnectionHelper.GetConnection());
                historyTransactionCmd.Parameters.AddWithValue("@transactionId", blockchainTransaction.TransactionId);
                historyTransactionCmd.Parameters.AddWithValue("@amount", blockchainTransaction.Amount);
                historyTransactionCmd.Parameters.AddWithValue("@type", blockchainTransaction.Type);
                historyTransactionCmd.Parameters.AddWithValue("@message", blockchainTransaction.Message);
                historyTransactionCmd.Parameters.AddWithValue("@senderAddress",
                                                              blockchainTransaction.SenderAddress);
                historyTransactionCmd.Parameters.AddWithValue("@receiverAddress",
                                                              blockchainTransaction.ReceiverAddress);
                var historyResult = historyTransactionCmd.ExecuteNonQuery();

                if (updateResult != 1 || historyResult != 1)
                {
                    throw new Exception("Không thể thêm giao dịch hoặc update tài khoản.");
                }

                transaction1.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                transaction1.Rollback();
                return(false);
            }
            ConnectionHelper.CloseConnection();
            return(true);
        }