diff --git a/src/app_service/service/wallet_account/dto.nim b/src/app_service/service/wallet_account/dto.nim index bf4925fc5f..a09a47901b 100644 --- a/src/app_service/service/wallet_account/dto.nim +++ b/src/app_service/service/wallet_account/dto.nim @@ -44,6 +44,7 @@ type name*: string address*: string mixedcaseAddress*: string + keyUid*: string path*: string color*: string publicKey*: string @@ -87,6 +88,7 @@ proc toWalletAccountDto*(jsonObj: JsonNode): WalletAccountDto = discard jsonObj.getProp("name", result.name) discard jsonObj.getProp("address", result.address) discard jsonObj.getProp("mixedcase-address", result.mixedcaseAddress) + discard jsonObj.getProp("key-uid", result.keyUid) discard jsonObj.getProp("path", result.path) discard jsonObj.getProp("color", result.color) discard jsonObj.getProp("wallet", result.isWallet) diff --git a/src/app_service/service/wallet_account/key_pair_dto.nim b/src/app_service/service/wallet_account/key_pair_dto.nim new file mode 100644 index 0000000000..1531f12a2d --- /dev/null +++ b/src/app_service/service/wallet_account/key_pair_dto.nim @@ -0,0 +1,22 @@ +import json + +include ../../common/json_utils + +type KeyPairDto* = object + keycardUid*: string + keypairName*: string + keycardLocked*: bool + accountsAddresses*: seq[string] + keyUid*: string + +proc toKeyPairDto*(jsonObj: JsonNode): KeyPairDto = + result = KeyPairDto() + discard jsonObj.getProp("keycard-uid", result.keycardUid) + discard jsonObj.getProp("keypair-name", result.keypairName) + discard jsonObj.getProp("keycard-locked", result.keycardLocked) + discard jsonObj.getProp("key-uid", result.keyUid) + + var jArr: JsonNode + if(jsonObj.getProp("accounts-addresses", jArr) and jArr.kind == JArray): + for addrObj in jArr: + result.accountsAddresses.add(addrObj.getStr) diff --git a/src/app_service/service/wallet_account/service.nim b/src/app_service/service/wallet_account/service.nim index 2ebd18d0ec..ead75d6f53 100644 --- a/src/app_service/service/wallet_account/service.nim +++ b/src/app_service/service/wallet_account/service.nim @@ -8,8 +8,7 @@ import ../network/service as network_service import ../../common/account_constants import ../../../app/global/global_singleton -import dto -import derived_address +import dto, derived_address, key_pair_dto import ../../../app/core/eventemitter import ../../../app/core/signals/types @@ -20,8 +19,7 @@ import ../../../backend/eth as status_go_eth import ../../../backend/transactions as status_go_transactions import ../../../backend/cache -export dto -export derived_address +export dto, derived_address, key_pair_dto logScope: topics = "wallet-account-service" @@ -472,4 +470,75 @@ QtObject: let balanceForToken = tokenBalances{address}{token.addressAsString()}.getStr let chainBalanceForToken = parsefloat(hex2Balance(balanceForToken, token.decimals)) totalBalance = totalBalance + chainBalanceForToken * prices[token.symbol] - return totalBalance \ No newline at end of file + return totalBalance + + proc responseHasNoErrors(self: Service, procName: string, response: RpcResponse[JsonNode]): bool = + var errMsg = "" + if not response.error.isNil: + errMsg = "(" & $response.error.code & ") " & response.error.message + elif response.result.kind == JObject and response.result.contains("error"): + errMsg = response.result["error"].getStr + if(errMsg.len == 0): + return true + error "error: ", procName=procName, errDesription = errMsg + return false + + proc addMigratedKeyPair*(self: Service, keyPair: KeyPairDto): bool = + try: + let response = backend.addMigratedKeyPair( + keyPair.keycardUid, + keyPair.keyPairName, + keyPair.keyUid, + keyPair.accountsAddresses) + return self.responseHasNoErrors("addMigratedKeyPair", response) + except Exception as e: + error "error: ", procName="addMigratedKeyPair", errName = e.name, errDesription = e.msg + return false + + proc getAllMigratedKeyPairs*(self: Service): seq[KeyPairDto] = + try: + let response = backend.getAllMigratedKeyPairs() + if self.responseHasNoErrors("getAllMigratedKeyPairs", response): + return map(response.result.getElems(), proc(x: JsonNode): KeyPairDto = toKeyPairDto(x)) + except Exception as e: + error "error: ", procName="getAllMigratedKeyPairs", errName = e.name, errDesription = e.msg + + proc getMigratedKeyPairByKeyUid*(self: Service, keyUid: string): seq[KeyPairDto] = + try: + let response = backend.getMigratedKeyPairByKeyUID(keyUid) + if self.responseHasNoErrors("getMigratedKeyPairByKeyUid", response): + return map(response.result.getElems(), proc(x: JsonNode): KeyPairDto = toKeyPairDto(x)) + except Exception as e: + error "error: ", procName="getMigratedKeyPairByKeyUid", errName = e.name, errDesription = e.msg + + proc setKeycardName*(self: Service, keycardUid: string, name: string): bool = + try: + let response = backend.setKeycardName(keycardUid, name) + return self.responseHasNoErrors("setKeycardName", response) + except Exception as e: + error "error: ", procName="setKeycardName", errName = e.name, errDesription = e.msg + return false + + proc setKeycardLocked*(self: Service, keycardUid: string): bool = + try: + let response = backend.keycardLocked(keycardUid) + return self.responseHasNoErrors("setKeycardLocked", response) + except Exception as e: + error "error: ", procName="setKeycardLocked", errName = e.name, errDesription = e.msg + return false + + proc setKeycardUnlocked*(self: Service, keycardUid: string): bool = + try: + let response = backend.keycardUnlocked(keycardUid) + return self.responseHasNoErrors("setKeycardUnlocked", response) + except Exception as e: + error "error: ", procName="setKeycardUnlocked", errName = e.name, errDesription = e.msg + return false + + proc deleteKeycard*(self: Service, keycardUid: string): bool = + try: + let response = backend.deleteKeycard(keycardUid) + return self.responseHasNoErrors("deleteKeycard", response) + except Exception as e: + error "error: ", procName="deleteKeycard", errName = e.name, errDesription = e.msg + return false \ No newline at end of file diff --git a/src/backend/backend.nim b/src/backend/backend.nim index 0a5a2a04eb..13da2200d9 100644 --- a/src/backend/backend.nim +++ b/src/backend/backend.nim @@ -211,3 +211,28 @@ rpc(fetchMarketValues, "wallet"): rpc(fetchTokenDetails, "wallet"): symbols: seq[string] + +rpc(addMigratedKeyPair, "accounts"): + keycardUid: string + keyPairName: string + keyUid: string + accountAddresses: seq[string] + +rpc(getAllMigratedKeyPairs, "accounts"): + discard + +rpc(getMigratedKeyPairByKeyUID, "accounts"): + keyUid: string + +rpc(setKeycardName, "accounts"): + keycardUid: string + keyPairName: string + +rpc(keycardLocked, "accounts"): + keycardUid: string + +rpc(keycardUnlocked, "accounts"): + keycardUid: string + +rpc(deleteKeycard, "accounts"): + keycardUid: string \ No newline at end of file