public void GuiTien() { if (Program.currentLoggedInAddress != null) { Console.Clear(); Console.WriteLine("Vui lòng nhập số tiền cần gui :"); var Amount = Double.Parse(Console.ReadLine()); if (Amount <= 0) { Console.WriteLine("Số lượng không hợp lệ, vui lòng thử lại."); return; } var transaction = new HoubiTransaction { TransactionId = Guid.NewGuid().ToString(), SenderAddress = Program.currentLoggedInAddress.Address, ReceiverAddress = Program.currentLoggedInAddress.Address, Type = HoubiTransaction.TransactionType.DEPOSIT, Amount = Amount, CreatedAtMLS = DateTime.Now.Ticks, UpdatedAtMLS = DateTime.Now.Ticks, Status = 1 }; if (_addressModel.WithdrawAndDeposit(Program.currentLoggedInAddress, transaction)) { Console.WriteLine("Giao dịch thành công."); } } else { Console.WriteLine("Vui lòng đăng nhập để sử dụng chức năng này."); } }
public void Ban() { if (Program.currentLoggedInAddress != null) { Console.Clear(); Console.WriteLine("Vui lòng nhập địa chỉ bán coin: "); var address = Console.ReadLine(); Console.WriteLine("Nhập số coin cần bán : "); var Amount = Double.Parse(Console.ReadLine()); var transactionHB = new HoubiTransaction() { TransactionId = Guid.NewGuid().ToString(), Type = HoubiTransaction.TransactionType.SELL, SenderAddress = Program.currentLoggedInAddress.Address, ReceiverAddress = address, Amount = Amount, CreatedAtMLS = DateTime.Now.Ticks, UpdatedAtMLS = DateTime.Now.Ticks, Status = 1 }; if (_addressModel.BuyAndSell(Program.currentLoggedInAddress, transactionHB)) { Console.WriteLine("Giao dịch thành công."); } else { Console.WriteLine("Giao dịch thất bại, vui lòng thử lại."); } } }
public bool WithdrawAndDeposit(HoubiAddress currentLoggedInAddress, HoubiTransaction houbiTransaction) { var conn = ConnectionHelper.GetConnection(); var transaction = conn.BeginTransaction(); try { var cmd = new MySqlCommand("select * from houbi_address where address = @address", conn, transaction); cmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address); double currentAddressBalance = 0; var readerData = cmd.ExecuteReader(); if (readerData.Read()) { currentAddressBalance = readerData.GetDouble("balance"); } readerData.Close(); if (houbiTransaction.Type == HoubiTransaction.TransactionType.WITHDRAW && currentAddressBalance < houbiTransaction.Amount) { throw new Exception(" KHong du tien trong vi."); } if (houbiTransaction.Type == HoubiTransaction.TransactionType.WITHDRAW) { currentAddressBalance -= houbiTransaction.Amount; } else if (houbiTransaction.Type == HoubiTransaction.TransactionType.DEPOSIT) { currentAddressBalance += houbiTransaction.Amount; } var updateQuery = ("update houbi_address set balance = @balance where address = @address"); var sqlCmd = new MySqlCommand(updateQuery, conn, transaction); sqlCmd.Parameters.AddWithValue("@balance", currentAddressBalance); sqlCmd.Parameters.AddWithValue("@address", currentLoggedInAddress.Address); var updateResultSet = sqlCmd.ExecuteNonQuery(); var transactionQuery = "insert into houbi_transactions (transaction_id, type, sender_address, receiver_address, amount, createAt, updatedAt, status) " + "values (@id, @type, @senderAddress, @receiverAddress, @amount, @createdAtMLS, @updatedAtMLS, @status)"; var historyTransactionCmd = new MySqlCommand(transactionQuery, conn, transaction); historyTransactionCmd.Parameters.AddWithValue("@id", houbiTransaction.TransactionId); historyTransactionCmd.Parameters.AddWithValue("@type", houbiTransaction.Type); historyTransactionCmd.Parameters.AddWithValue("@senderAddress", houbiTransaction.SenderAddress); historyTransactionCmd.Parameters.AddWithValue("@receiverAddress", houbiTransaction.ReceiverAddress); historyTransactionCmd.Parameters.AddWithValue("@amount", houbiTransaction.Amount); historyTransactionCmd.Parameters.AddWithValue("@createdAtMLS", houbiTransaction.CreatedAtMLS); historyTransactionCmd.Parameters.AddWithValue("@updatedAtMLS", houbiTransaction.UpdatedAtMLS); historyTransactionCmd.Parameters.AddWithValue("@status", houbiTransaction.Status); var historyResult = historyTransactionCmd.ExecuteNonQuery(); Console.WriteLine("query status: " + historyResult); if (updateResultSet != 1 || historyResult != 1) { throw new Exception("Không thể thêm giao dịch hoặc update tài khoản."); } transaction.Commit(); } catch (Exception e) { Console.WriteLine("Err: " + e.Message); try { transaction.Rollback(); } catch (Exception exception) { Console.WriteLine(exception); throw; } return(false); } ConnectionHelper.CloseConnection(); return(true); }
public bool BuyAndSell(HoubiAddress currentLoggedInAddress, HoubiTransaction transactionHb) { var conn = ConnectionHelper.GetConnection(); var myTransaction = conn.BeginTransaction(); try { var balanceSender = new MySqlCommand("select * from houbi_address 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(); if (transactionHb.Type == HoubiTransaction.TransactionType.BUY && currentAccountBalance < transactionHb.Amount) { throw new Exception("Không đủ tiền trong tài khoản."); } if (transactionHb.Type == HoubiTransaction.TransactionType.BUY) { currentAccountBalance -= (transactionHb.Amount * 200); } else if (transactionHb.Type == HoubiTransaction.TransactionType.SELL) { currentAccountBalance += (transactionHb.Amount * 200); } var updateQuery = ("update houbi_address 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 houbi_address 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(); if (transactionHb.Type == HoubiTransaction.TransactionType.BUY) { receiverBalance += (transactionHb.Amount * 200); } else if (transactionHb.Type == HoubiTransaction.TransactionType.SELL) { receiverBalance -= (transactionHb.Amount * 200); } var updateQueryReceiver = ("update houbi_address 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 houbi_transactions (transaction_id, type, sender_address, receiver_address, amount, createAt, updatedAt, 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.UpdatedAtMLS); 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(); } }