fix: code review
This commit is contained in:
parent
5f7f899c3b
commit
065bd26786
|
@ -1,9 +1,8 @@
|
|||
import algorithm, atomics, sequtils, strformat, strutils, sugar, sequtils, json, parseUtils, std/wrapnils, tables
|
||||
import NimQml, json, sequtils, chronicles, strutils, strformat, json, stint
|
||||
import web3/ethhexstrings
|
||||
|
||||
import
|
||||
../../../status/[status, settings, wallet, tokens],
|
||||
../../../status/[status, settings, wallet, tokens, utils],
|
||||
../../../status/wallet as status_wallet,
|
||||
../../../status/tasks/[qt, task_runner_impl]
|
||||
|
||||
|
@ -109,17 +108,10 @@ QtObject:
|
|||
proc sendTransaction*(self: TransactionsView, from_addr: string, to: string, assetAddress: string, value: string, gas: string, gasPrice: string, password: string, uuid: string) {.slot.} =
|
||||
self.sendTransaction("transactionSent", from_addr, to, assetAddress, value, gas, gasPrice, password, uuid)
|
||||
|
||||
|
||||
proc transferEth*(self: TransactionsView, from_addr: string, to_addr: string, value: string, gas: string, gasPrice: string, password: string, uuid: string): bool {.slot.} =
|
||||
try:
|
||||
if not validate(HexDataStr(from_addr)): return false
|
||||
if from_addr.len != 42: return false
|
||||
if not validate(HexDataStr(to_addr)): return false
|
||||
if to_addr.len != 42: return false
|
||||
if parseFloat(value) < 0: return false
|
||||
if parseInt(gas) < 0: return false
|
||||
if parseFloat(gasPrice) <= 0: return false
|
||||
if uuid.isEmptyOrWhitespace(): return false
|
||||
|
||||
validateTransactionInput(from_addr, to_addr, "", value, gas, gasPrice, "", uuid)
|
||||
self.sendTransaction("transactionSent", from_addr, to_addr, ZERO_ADDRESS, value, gas, gasPrice, password, uuid)
|
||||
except Exception as e:
|
||||
error "Error sending eth transfer transaction", msg = e.msg
|
||||
|
@ -128,16 +120,7 @@ QtObject:
|
|||
|
||||
proc transferTokens*(self: TransactionsView, from_addr: string, to_addr: string, assetAddress: string, value: string, gas: string, gasPrice: string, password: string, uuid: string): bool {.slot.} =
|
||||
try:
|
||||
if not validate(HexDataStr(from_addr)): return false
|
||||
if from_addr.len != 42: return false
|
||||
if not validate(HexDataStr(to_addr)): return false
|
||||
if to_addr.len != 42: return false
|
||||
if not validate(HexDataStr(assetAddress)): return false
|
||||
if assetAddress.len != 42: return false
|
||||
if parseFloat(value) <= 0: return false
|
||||
if parseInt(gas) <= 0: return false
|
||||
if parseFloat(gasPrice) <= 0: return false
|
||||
if uuid.isEmptyOrWhitespace(): return false
|
||||
validateTransactionInput(from_addr, to_addr, assetAddress, value, gas, gasPrice, "", uuid)
|
||||
self.sendTransaction("transactionSent", from_addr, to_addr, assetAddress, value, gas, gasPrice, password, uuid)
|
||||
except Exception as e:
|
||||
error "Error sending token transfer transaction", msg = e.msg
|
||||
|
|
|
@ -9,7 +9,6 @@ import chronicles
|
|||
import nbaser
|
||||
import stew/byteutils
|
||||
from base32 import nil
|
||||
import web3/ethhexstrings
|
||||
|
||||
const HTTPS_SCHEME = "https"
|
||||
const IPFS_GATEWAY = ".infura.status.im"
|
||||
|
@ -92,19 +91,6 @@ proc toAPIRequest(message: string): APIRequest =
|
|||
hostname: data{"hostname"}.getStr()
|
||||
)
|
||||
|
||||
proc validateInput(from_addr, to_addr, value, gas, gasPrice, data: string): bool =
|
||||
if not validate(HexDataStr(from_addr)): return false
|
||||
if from_addr.len != 42: return false
|
||||
if to_addr != "":
|
||||
if not validate(HexDataStr(to_addr)): return false
|
||||
if to_addr.len != 42: return false
|
||||
if parseFloat(value) < 0: return false
|
||||
if parseInt(gas) <= 0: return false
|
||||
if parseFloat(gasPrice) <= 0: return false
|
||||
if data != "":
|
||||
if not validate(HexDataStr(data)): return false
|
||||
return true
|
||||
|
||||
proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||
if AUTH_METHODS.contains(data.payload.rpcMethod) and not self.permissions.hasPermission(data.hostname, Permission.Web3):
|
||||
return $ %* {
|
||||
|
@ -132,11 +118,17 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
|||
else:
|
||||
""
|
||||
|
||||
let validInput = validateInput(fromAddress, to, value, selectedGasLimit, selectedGasPrice, txData)
|
||||
|
||||
var success: bool
|
||||
var errorMessage = ""
|
||||
var response = ""
|
||||
var validInput: bool = true
|
||||
|
||||
try:
|
||||
validateTransactionInput(fromAddress, to, "", value, selectedGasLimit, selectedGasPrice, txData, "dummy")
|
||||
except Exception as e:
|
||||
validInput = false
|
||||
success = false
|
||||
errorMessage = e.msg
|
||||
|
||||
if validInput:
|
||||
# TODO make this async
|
||||
|
@ -148,10 +140,6 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
|||
response
|
||||
else:
|
||||
""
|
||||
else:
|
||||
success = false
|
||||
errorMessage = "Invalid input"
|
||||
|
||||
|
||||
return $ %* {
|
||||
"type": ResponseTypes.Web3SendAsyncCallback,
|
||||
|
|
|
@ -4,6 +4,7 @@ import stint
|
|||
from times import getTime, toUnix, nanosecond
|
||||
import libstatus/accounts/signing_phrases
|
||||
from web3 import Address, fromHex
|
||||
import web3/ethhexstrings
|
||||
|
||||
proc getTimelineChatId*(pubKey: string = ""): string =
|
||||
if pubKey == "":
|
||||
|
@ -131,6 +132,28 @@ proc find*[T](s: seq[T], pred: proc(x: T): bool {.closure.}, found: var bool): T
|
|||
proc parseAddress*(strAddress: string): Address =
|
||||
fromHex(Address, strAddress)
|
||||
|
||||
proc isAddress*(strAddress: string): bool =
|
||||
try:
|
||||
discard parseAddress(strAddress)
|
||||
except:
|
||||
return false
|
||||
return true
|
||||
|
||||
proc validateTransactionInput*(from_addr, to_addr, assetAddress, value, gas, gasPrice, data, uuid: string) =
|
||||
if not isAddress(from_addr): raise newException(ValueError, "from_addr is not a valid ETH address")
|
||||
if not isAddress(to_addr): raise newException(ValueError, "to_addr is not a valid ETH address")
|
||||
if parseFloat(value) < 0: raise newException(ValueError, "value should be a number >= 0")
|
||||
if parseInt(gas) <= 0: raise newException(ValueError, "gas should be a number > 0")
|
||||
if parseFloat(gasPrice) <= 0: raise newException(ValueError, "gasPrice should be a number > 0")
|
||||
if uuid.isEmptyOrWhitespace(): raise newException(ValueError, "uuid is required")
|
||||
|
||||
if assetAddress != "": # If a token is being used
|
||||
if not isAddress(assetAddress): raise newException(ValueError, "assetAddress is not a valid ETH address")
|
||||
if assetAddress == "0x0000000000000000000000000000000000000000": raise newException(ValueError, "assetAddress requires a valid token address")
|
||||
|
||||
if data != "": # If data is being used
|
||||
if not validate(HexDataStr(data)): raise newException(ValueError, "data should contain a valid hex string")
|
||||
|
||||
proc hex2Time*(hex: string): Time =
|
||||
# represents the time since 1970-01-01T00:00:00Z
|
||||
fromUnix(fromHex[int64](hex))
|
||||
|
|
|
@ -43,7 +43,7 @@ ModalPopup {
|
|||
|
||||
if(!success){
|
||||
sendingError.text = qsTr("Invalid transaction parameters")
|
||||
return sendingError.open()
|
||||
sendingError.open()
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -51,7 +51,8 @@ ModalPopup {
|
|||
|
||||
if(!success){
|
||||
sendingError.text = qsTr("Invalid transaction parameters")
|
||||
return sendingError.open()
|
||||
sendingError.open()
|
||||
root.close()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue