From 7a95727e5b3b0ae032b50a9cc4a67dac6607729e Mon Sep 17 00:00:00 2001 From: dank Date: Fri, 3 Jul 2020 16:45:24 +0000 Subject: [PATCH] Payment ID fix. --- main.go | 116 +++++++++++++++++++++++++++----------------------------- 1 file changed, 55 insertions(+), 61 deletions(-) diff --git a/main.go b/main.go index 48c9b04..cce2790 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,6 @@ // Copyright 2020 DERO Foundation. All rights reserved. // build win: -ldflags -H=windowsgui -// TODO: Code cleanup, seed languages, multi-language support, daemon/miner integration, logging. +// TODO: Code cleanup, seed languages, multi-language support, daemon/miner integration. package main @@ -15,6 +15,7 @@ import ( rl "github.com/DankFC/raylib-goplus/raylib" "github.com/blang/semver" "io/ioutil" + log "github.com/sirupsen/logrus" "os" "os/exec" "path/filepath" @@ -44,7 +45,6 @@ type Config struct { type Session struct { Path string - Password string Mode string // network mode (remote, local, offline) Syncing bool Network string @@ -107,6 +107,7 @@ var wallet *walletapi.Wallet var account = &walletapi.Account{} // all account data is available here var session Session var transfer Transfer + var daemonOnline bool var start int = 0 var wHeight uint64 @@ -183,6 +184,20 @@ var transparent rl.Color // Main program loop func main() { + // Set up logger + log_file, err := os.OpenFile(APP_PATH + "logs.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) + + if err != nil { + log.Fatal(err) + } + + defer log_file.Close() + + log.SetOutput(log_file) + log.SetFormatter(&log.TextFormatter{}) + log.SetLevel(log.WarnLevel) + + // Map arguments globals.Arguments = make(map[string]interface{}) globals.Arguments["--debug"] = false @@ -259,6 +274,7 @@ func main() { config.RPCAddress = "127.0.0.1:20209" globals.Arguments["--testnet"] = false + log.Warnf("File not found, config.json created.") } else { file, err := os.Open(APP_PATH + "config.json") @@ -319,6 +335,8 @@ func main() { session.RPCServer = false session.RPCAddress = "127.0.0.1:20209" globals.Arguments["--testnet"] = false + + log.Warnf("Error loading config.json, loading default settings.") } } @@ -635,7 +653,6 @@ func main() { case 1.1: if passwordError == true { rl.DrawTextEx(font, "The provided passwords do not match.", rl.Vector2{offsetX, 285}, 20, spacing, rl.Gray) - // TODO: Clear passwords. } createAccountPasswordEditable = true rl.DrawTextEx(fontMenu, "Create an Account", rl.Vector2{offsetX, 30}, 40, spacing, rl.Gray) @@ -693,11 +710,12 @@ func main() { if err != nil { wallet = nil windowIndex = 1.0 + log.Warnf("Error creating wallet: %s", err) // TODO: Add error-feedback for the user. } else { err = wallet.Set_Encrypted_Wallet_Password(createAccountPassword) if err != nil { - //globals.Logger.Warnf("Error changing password") + log.Warnf("Error changing password: %s", err) } // TODO wallet.Set_Seed_Language(language) session.Path = createAccountFilename + ".db" @@ -840,56 +858,16 @@ func main() { loginPassword = "" passwordError = true windowIndex = 2.1 + log.Warnf("Error opening wallet: %s", err) break } } - session.Password = loginPassword loginPassword = "" passwordError = false resetTransfer() - if session.Network == "Testnet" { - globals.Arguments["--testnet"] = true - session.Network = "Testnet" - session.Color = cmdBlue - - if session.Mode == "remote" { - session.Daemon = config.RemoteDaemonTestnet - globals.Arguments["--remote"] = true - globals.Arguments["--daemon-address"] = session.Daemon - } else if session.Mode == "local" { - session.Daemon = config.LocalDaemonTestnet - globals.Arguments["--remote"] = false - globals.Arguments["--daemon-address"] = session.Daemon - } else { - globals.Arguments["--remote"] = false - globals.Arguments["--daemon-address"] = "" - } - } else { - globals.Arguments["--testnet"] = false - session.Network = "Mainnet" - session.Color = cmdGreen - - if session.Mode == "remote" { - globals.Arguments["--remote"] = true - globals.Arguments["--daemon-address"] = session.Daemon - } else if session.Mode == "local" { - globals.Arguments["--remote"] = false - globals.Arguments["--daemon-address"] = session.Daemon - } else { - globals.Arguments["--remote"] = false - globals.Arguments["--daemon-address"] = "" - } - } - - globals.Arguments["--debug"] = false - - // Args for miner - globals.Arguments["--wallet-address"] = wallet.GetAddress().String() - globals.Arguments["--daemon-rpc-address"] = session.Daemon - - globals.Initialize() + wallet.SetDaemonAddress(session.Daemon) if session.Mode != "offline" { if (session.Rescan && session.Path == rescanPath) { @@ -990,6 +968,8 @@ func main() { if err == nil { session.RPCServer = true + } else { + log.Warnf("Error starting RPC server: %s", err) } } } else { @@ -1230,22 +1210,31 @@ func main() { masked, mask = textMask(pidString) } - if pidString != "" { + err = nil + + //if pidString != "" { if rl.GuiButton(rl.NewRectangle(offsetX, 350, 210, 50), "Clear") { pidString = "" transfer.PaymentID = nil break } - transfer.PaymentID, err = hex.DecodeString(pidString) - - if err != nil { + //transfer.PaymentID, err = hex.DecodeString(pidString) + + if (len(pidString) == 8 || len(pidString) == 64) { + transfer.PaymentID, err = hex.DecodeString(pidString) + + if err != nil { + rl.DrawTextEx(font, "Invalid payment ID format.", rl.Vector2{offsetX, 285}, 20, spacing, rl.Gray) + break + } + } else { rl.DrawTextEx(font, "Invalid payment ID format.", rl.Vector2{offsetX, 285}, 20, spacing, rl.Gray) break } - } + //} - if (rl.GuiButton(rl.NewRectangle(offsetX, 350, 210, 50), "Next") || rl.IsKeyPressed(rl.KeyEnter)) { + if (rl.GuiButton(rl.NewRectangle(offsetX + 230, 350, 210, 50), "Next") || rl.IsKeyPressed(rl.KeyEnter)) { windowIndex = 2.52 } @@ -1313,6 +1302,7 @@ func main() { if err != nil { // TODO: Error feedback + log.Warnf("Error building the transaction: %s", err) break } else { amountString = globals.FormatMoney12(input_sum) @@ -1330,7 +1320,7 @@ func main() { _ = inputs if err != nil { - //globals.Logger.Warnf("Error while building Transaction err %s\n", err) + log.Warnf("Error while building transaction: %s", err) break } @@ -1369,7 +1359,7 @@ func main() { rl.DrawTextEx(fontSubHeader, "My Password:", rl.Vector2{offsetX, 150}, 25, spacing, rl.White) strAmount := globals.FormatMoney12(transfer.Amount) strFees := globals.FormatMoney12(transfer.Fees) - rl.DrawTextEx(font, "TRANSACTION DETAILS\n\nDestination Address: " + transfer.rAddress.String() + "\nPayment ID: " + string(transfer.PaymentID) + "\nAmount: " + strAmount + "\nFees: " + strFees, rl.Vector2{offsetX, 350}, 20, spacing, rl.White) + rl.DrawTextEx(font, "TRANSACTION DETAILS\n\nDestination Address: " + transfer.rAddress.String() + "\nPayment ID: " + hex.EncodeToString(transfer.PaymentID) + "\nAmount: " + strAmount + "\nFees: " + strFees, rl.Vector2{offsetX, 350}, 20, spacing, rl.White) _, loginPassword = rl.GuiTextBox(rl.NewRectangle(offsetX, 220, 200, 50), loginPassword, 160, true) rl.DrawRectangleRec(rl.NewRectangle(offsetX, 215, 500, 60), cmdGray) rl.DrawLineEx(rl.Vector2{offsetX, 275}, rl.Vector2{offsetX + 500, 275}, 2.0, session.Color) @@ -1403,6 +1393,7 @@ func main() { transfer.Status = "Success" } else { transfer.Status = "Failed" + log.Warnf("Error building offline transaction: %s", err) } } else { @@ -1416,6 +1407,7 @@ func main() { } else { transfer.Status = "Failed" transfer.TXID = transfer.TX.GetHash() + log.Warnf("Error relaying transaction: %s", err) } } @@ -1685,6 +1677,7 @@ func main() { if err != nil { // TODO: Error feedback + log.Warnf("Error changing password: %s", err) break } else { passwordError = false @@ -1844,11 +1837,11 @@ func main() { wallet, err = walletapi.Create_Encrypted_Wallet_ViewOnly(restoreFilename + ".db", restorePassword, restoreHex) if err != nil { - //globals.Logger.Warnf("Error while reconstructing view-only wallet using view key err %s\n", err) + log.Warnf("Error while reconstructing view-only wallet using view key: %s", err) } else { err = wallet.Set_Encrypted_Wallet_Password(restorePassword) if err != nil { - //globals.Logger.Warnf("Error changing password") + log.Warnf("Error changing password: %s", err) } else { closeWallet() windowIndex = 2.1 @@ -1980,11 +1973,11 @@ func main() { wallet, err = walletapi.Create_Encrypted_Wallet_From_Recovery_Words(restoreFilename + ".db", restorePassword, restoreHex) if err != nil { - //globals.Logger.Warnf("Error while reconstructing view-only wallet using view key err %s\n", err) + log.Warnf("Error while reconstructing view-only wallet using view key: %s", err) } else { err = wallet.Set_Encrypted_Wallet_Password(restorePassword) if err != nil { - //globals.Logger.Warnf("Error changing password") + log.Warnf("Error changing password: %s", err) } else { closeWallet() session.Path = restoreFilename + ".db" @@ -2109,11 +2102,11 @@ func main() { wallet, err = walletapi.Create_Encrypted_Wallet_From_Recovery_Words(restoreFilename + ".db", restorePassword, restoreHex) if err != nil { - //globals.Logger.Warnf("Error while reconstructing view-only wallet using view key err %s\n", err) + log.Warnf("Error while reconstructing view-only wallet using view key: %s", err) } else { err = wallet.Set_Encrypted_Wallet_Password(restorePassword) if err != nil { - //globals.Logger.Warnf("Error changing password") + log.Warnf("Error changing password: %s", err) } else { closeWallet() session.Path = restoreFilename + ".db" @@ -2532,7 +2525,7 @@ func openURL(url string) { err = exec.Command("open", url).Start() } if err != nil { - //globals.Logger.Warnf("URL failed to open.") + log.Warnf("Error opening URL: %s", err) } } @@ -2541,6 +2534,7 @@ func openURL(url string) { func build_relay_transaction(tx *transaction.Transaction, inputs []uint64, input_sum uint64, change uint64, err error, offline_tx bool, amount_list []uint64) bool { if err != nil { + log.Warnf("Error building transaction: %s", err) return false }