Skip to content

Commit ad8d355

Browse files
committed
fix: display erc20 metadata correctly it it is updated after activity fetching
fix: refactoring
1 parent ef66b62 commit ad8d355

File tree

4 files changed

+48
-18
lines changed

4 files changed

+48
-18
lines changed

src/app/modules/main/wallet_section/activity/entry.nim

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ type
2424
ExtraData* = object
2525
inAmount*: float64
2626
outAmount*: float64
27+
symbolIn*: string
28+
symbolOut*: string
2729

2830
# Used to display an activity history header entry in the QML UI
2931
QtObject:
@@ -50,10 +52,16 @@ QtObject:
5052

5153
proc extractCurrencyAmount(self: ActivityEntry, currencyService: Service): CurrencyAmount =
5254
let amount = if self.isInTransactionType(): self.metadata.amountIn else: self.metadata.amountOut
53-
let symbol = if self.isInTransactionType(): self.metadata.symbolIn.get("") else: self.metadata.symbolOut.get("")
55+
let token = if self.isInTransactionType(): self.metadata.tokenIn else: self.metadata.tokenOut
56+
let cachedSymbol = if self.isInTransactionType(): self.metadata.symbolIn.get("") else: self.metadata.symbolOut.get("")
57+
58+
let (formattedAmount, tokenSymbol) = currencyService.parseCurrencyValueAndSymbolByToken(token, amount)
59+
60+
let finalSymbol = if tokenSymbol != "": tokenSymbol else: cachedSymbol
61+
5462
return currencyAmountToItem(
55-
currencyService.parseCurrencyValue(symbol, amount),
56-
currencyService.getCurrencyFormat(symbol),
63+
formattedAmount,
64+
currencyService.getCurrencyFormat(finalSymbol),
5765
)
5866

5967
proc newTransactionActivityEntry*(metadata: backend_activity.ActivityEntry, fromAddresses: seq[string], extradata: ExtraData, currencyService: Service): ActivityEntry =
@@ -77,15 +85,23 @@ QtObject:
7785

7886
proc buildMultiTransactionExtraData(metadata: backend_activity.ActivityEntry, currencyService: Service): ExtraData =
7987
if metadata.symbolIn.isSome():
80-
result.inAmount = currencyService.parseCurrencyValue(metadata.symbolIn.get(), metadata.amountIn)
88+
let (amount, symbol) = currencyService.parseCurrencyValueAndSymbolByToken(metadata.tokenIn, metadata.amountIn)
89+
result.inAmount = amount
90+
result.symbolIn = symbol
8191
if metadata.symbolOut.isSome():
82-
result.outAmount = currencyService.parseCurrencyValue(metadata.symbolOut.get(), metadata.amountOut)
92+
let (amount, symbol) = currencyService.parseCurrencyValueAndSymbolByToken(metadata.tokenOut, metadata.amountOut)
93+
result.outAmount = amount
94+
result.symbolOut = symbol
8395

8496
proc buildTransactionExtraData(metadata: backend_activity.ActivityEntry, currencyService: Service): ExtraData =
8597
if metadata.symbolIn.isSome() or metadata.amountIn > 0:
86-
result.inAmount = currencyService.parseCurrencyValue(metadata.symbolIn.get(""), metadata.amountIn)
98+
let (amount, symbol) = currencyService.parseCurrencyValueAndSymbolByToken(metadata.tokenIn, metadata.amountIn)
99+
result.inAmount = amount
100+
result.symbolIn = symbol
87101
if metadata.symbolOut.isSome() or metadata.amountOut > 0:
88-
result.outAmount = currencyService.parseCurrencyValue(metadata.symbolOut.get(""), metadata.amountOut)
102+
let (amount, symbol) = currencyService.parseCurrencyValueAndSymbolByToken(metadata.tokenOut, metadata.amountOut)
103+
result.outAmount = amount
104+
result.symbolOut = symbol
89105

90106
proc buildExtraData(backendEntry: backend_activity.ActivityEntry, currencyService: Service): ExtraData =
91107
var extraData: ExtraData
@@ -157,12 +173,16 @@ QtObject:
157173
read = getRecipient
158174

159175
proc getInSymbol*(self: ActivityEntry): string {.slot.} =
176+
if self.extraData.symbolIn != "":
177+
return self.extraData.symbolIn
160178
return self.metadata.symbolIn.get("")
161179

162180
QtProperty[string] inSymbol:
163181
read = getInSymbol
164182

165183
proc getOutSymbol*(self: ActivityEntry): string {.slot.} =
184+
if self.extraData.symbolOut != "":
185+
return self.extraData.symbolOut
166186
return self.metadata.symbolOut.get("")
167187

168188
QtProperty[string] outSymbol:

src/app/modules/main/wallet_section/activity/model.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ QtObject:
139139
proc refreshAmountCurrency*(self: Model, currencyService: Service) =
140140
for i in 0..self.entries.high:
141141
self.entries[i].resetAmountCurrency(currencyService)
142+
let index = self.createIndex(i, 0, nil)
143+
defer: index.delete
144+
self.dataChanged(index, index, @[ModelRole.ActivityEntryRole.int])
142145

143146
proc delete(self: Model) =
144147
self.QAbstractListModel.delete

src/app_service/service/currency/service.nim

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import nimqml, chronicles, strutils, tables, json, stint
22

33
import ../../../backend/backend as backend
4+
import ../../../backend/activity as backend_activity
45

56
import ../../../app/core/eventemitter
67
import ../../../app/core/tasks/[qt, threadpool]
@@ -121,23 +122,29 @@ QtObject:
121122
return i.toFloat() + r.toFloat() / p.toFloat()
122123

123124
# TODO: left this for activity controller as it uses token symbol
124-
# which may not be unique needs to be refactored. Also needed for
125-
# hasGas api which also needs to be rethought
126-
# https://github.com/status-im/status-desktop/issues/13505
127-
proc parseCurrencyValue*(self: Service, symbol: string, amountInt: UInt256): float64 =
128-
let token = self.tokenService.findTokenBySymbol(symbol)
129-
var decimals: int = 0
130-
if token != nil:
131-
decimals = token.decimals
132-
return u256ToFloat(decimals, amountInt)
133-
134125
proc parseCurrencyValueByTokensKey*(self: Service, tokensKey: string, amountInt: UInt256): float64 =
135126
let token = self.tokenService.getTokenBySymbolByTokensKey(tokensKey)
136127
var decimals: int = 0
137128
if token != nil:
138129
decimals = token.decimals
139130
return u256ToFloat(decimals, amountInt)
140131

132+
proc parseCurrencyValueAndSymbolByToken*(self: Service, activityToken: Option[backend_activity.Token], amountInt: UInt256): (float64, string) =
133+
if activityToken.isNone():
134+
return (u256ToFloat(0, amountInt), "")
135+
136+
let t = activityToken.get()
137+
if t.address.isNone():
138+
return (u256ToFloat(0, amountInt), "")
139+
140+
let fullTokenData = self.tokenService.findTokenByAddress(int(t.chainId), $t.address.get())
141+
var decimals: int = 0
142+
var symbol: string = ""
143+
if fullTokenData != nil:
144+
decimals = fullTokenData.decimals
145+
symbol = fullTokenData.symbol
146+
return (u256ToFloat(decimals, amountInt), symbol)
147+
141148
proc delete*(self: Service) =
142149
self.QObject.delete
143150

0 commit comments

Comments
 (0)