From 8ef495c604b984b7deaa3408260f5e570f6848e4 Mon Sep 17 00:00:00 2001 From: Pascal Precht <445106+0x-r4bbit@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:07:57 +0100 Subject: [PATCH] feat: add `decimals` to token criteria We need to store the `decimals` of a given critera so they can be used by the backend for calculation --- .../modules/main/chat_section/controller.nim | 3 ++ src/app/modules/main/chat_section/module.nim | 3 ++ src/app_service/service/token/service.nim | 33 +++++++++++++------ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/app/modules/main/chat_section/controller.nim b/src/app/modules/main/chat_section/controller.nim index 3e08ae9606..58e898f7c3 100644 --- a/src/app/modules/main/chat_section/controller.nim +++ b/src/app/modules/main/chat_section/controller.nim @@ -576,6 +576,9 @@ proc allAccountsTokenBalance*(self: Controller, symbol: string): float64 = proc getTokenList*(self: Controller): seq[TokenDto] = return self.tokenService.getTokenList() +proc getTokenDecimals*(self: Controller, symbol: string): int = + return self.tokenService.getTokenDecimals(symbol) + proc getContractAddressesForToken*(self: Controller, symbol: string): Table[int, string] = var contractAddresses = self.tokenService.getContractAddressesForToken(symbol) let communityToken = self.communityTokensService.getCommunityTokenBySymbol(self.getMySectionId(), symbol) diff --git a/src/app/modules/main/chat_section/module.nim b/src/app/modules/main/chat_section/module.nim index 89ac881db1..0512a0c028 100644 --- a/src/app/modules/main/chat_section/module.nim +++ b/src/app/modules/main/chat_section/module.nim @@ -1160,6 +1160,9 @@ method createOrEditCommunityTokenPermission*(self: Module, communityId: string, let viewAmount = tokenCriteria{"amount"}.getFloat var tokenCriteriaDto = tokenCriteria.toTokenCriteriaDto + if tokenCriteriaDto.`type` == community_dto.TokenType.ERC20: + tokenCriteriaDto.decimals = self.controller.getTokenDecimals(tokenCriteriaDto.symbol) + let contractAddresses = self.controller.getContractAddressesForToken(tokenCriteriaDto.symbol) if contractAddresses.len == 0 and tokenCriteriaDto.`type` != community_dto.TokenType.ENS: if permissionId == "": diff --git a/src/app_service/service/token/service.nim b/src/app_service/service/token/service.nim index a5a9d71c83..1522977aed 100644 --- a/src/app_service/service/token/service.nim +++ b/src/app_service/service/token/service.nim @@ -41,6 +41,11 @@ type TokenBalanceHistoryDataArgs* = ref object of Args result*: string +type + TokenData* = ref object of RootObj + addresses*: Table[int, string] + decimals*: int + QtObject: type Service* = ref object of QObject events: EventEmitter @@ -48,7 +53,7 @@ QtObject: networkService: network_service.Service tokens: Table[int, seq[TokenDto]] tokenList: seq[TokenDto] - tokensToAddressesMap: Table[string, Table[int, string]] + tokensToAddressesMap: Table[string, TokenData] priceCache: TimedCache[float64] proc updateCachedTokenPrice(self: Service, crypto: string, fiat: string, price: float64) @@ -70,7 +75,7 @@ QtObject: result.tokens = initTable[int, seq[TokenDto]]() result.priceCache = newTimedCache[float64]() result.tokenList = @[] - result.tokensToAddressesMap = initTable[string, Table[int, string]]() + result.tokensToAddressesMap = initTable[string, TokenData]() proc loadData*(self: Service) = if(not singletonInstance.localAccountSensitiveSettings.getIsWalletEnabled()): @@ -109,18 +114,22 @@ QtObject: if not self.tokensToAddressesMap.hasKey(network.nativeCurrencySymbol): self.tokenList.add(nativeToken) - self.tokensToAddressesMap[nativeToken.symbol] = initTable[int, string]() + self.tokensToAddressesMap[nativeToken.symbol] = TokenData( + addresses: initTable[int, string](), + ) - if not self.tokensToAddressesMap[nativeToken.symbol].hasKey(nativeToken.chainId): - self.tokensToAddressesMap[nativeToken.symbol][nativeToken.chainId] = $nativeToken.address + if not self.tokensToAddressesMap[nativeToken.symbol].addresses.hasKey(nativeToken.chainId): + self.tokensToAddressesMap[nativeToken.symbol].addresses[nativeToken.chainId] = $nativeToken.address + self.tokensToAddressesMap[nativeToken.symbol].decimals = nativeToken.decimals for token in default_tokens: if not self.tokensToAddressesMap.hasKey(token.symbol): self.tokenList.add(token) - self.tokensToAddressesMap[token.symbol] = initTable[int, string]() + self.tokensToAddressesMap[token.symbol].addresses = initTable[int, string]() - if not self.tokensToAddressesMap[token.symbol].hasKey(token.chainId): - self.tokensToAddressesMap[token.symbol][token.chainId] = $token.address + if not self.tokensToAddressesMap[token.symbol].addresses.hasKey(token.chainId): + self.tokensToAddressesMap[token.symbol].addresses[token.chainId] = $token.address + self.tokensToAddressesMap[token.symbol].decimals = token.decimals except Exception as e: error "Tokens init error", errDesription = e.msg @@ -135,9 +144,13 @@ QtObject: proc hasContractAddressesForToken*(self: Service, symbol: string): bool = return self.tokensToAddressesMap.hasKey(symbol) + proc getTokenDecimals*(self: Service, symbol: string): int = + if self.hasContractAddressesForToken(symbol): + return self.tokensToAddressesMap[symbol].decimals + proc getContractAddressesForToken*(self: Service, symbol: string): Table[int, string] = if self.hasContractAddressesForToken(symbol): - return self.tokensToAddressesMap[symbol] + return self.tokensToAddressesMap[symbol].addresses proc onIsWalletEnabledChanged*(self: Service) {.slot.} = self.loadData() @@ -304,4 +317,4 @@ QtObject: timeInterval: timeInterval ) self.threadpool.start(arg) - return \ No newline at end of file + return