fix(community_tokens/service): fix crash when receiving bad event

Fixes #11176
This commit is contained in:
Jonathan Rainville 2023-06-20 13:28:45 -04:00 committed by Alex Jbanca
parent 31aca3ac35
commit 20afd728fa
2 changed files with 60 additions and 36 deletions

View File

@ -212,8 +212,10 @@ QtObject:
proc init*(self: Service) = proc init*(self: Service) =
self.fetchAllTokenOwners() self.fetchAllTokenOwners()
self.tokenOwnersTimer.start() self.tokenOwnersTimer.start()
self.events.on(PendingTransactionTypeDto.CollectibleDeployment.event) do(e: Args): self.events.on(PendingTransactionTypeDto.CollectibleDeployment.event) do(e: Args):
var receivedData = TransactionMinedArgs(e) var receivedData = TransactionMinedArgs(e)
try:
let deployState = if receivedData.success: DeployState.Deployed else: DeployState.Failed let deployState = if receivedData.success: DeployState.Deployed else: DeployState.Failed
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data)) let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
if not receivedData.success: if not receivedData.success:
@ -226,9 +228,13 @@ QtObject:
deployState: deployState, chainId: tokenDto.chainId, deployState: deployState, chainId: tokenDto.chainId,
transactionHash: receivedData.transactionHash) transactionHash: receivedData.transactionHash)
self.events.emit(SIGNAL_COMMUNITY_TOKEN_DEPLOY_STATUS, data) self.events.emit(SIGNAL_COMMUNITY_TOKEN_DEPLOY_STATUS, data)
except Exception as e:
error "Error processing Collectible deployment pending transaction event", msg=e.msg, receivedData
self.events.on(PendingTransactionTypeDto.CollectibleAirdrop.event) do(e: Args): self.events.on(PendingTransactionTypeDto.CollectibleAirdrop.event) do(e: Args):
let receivedData = TransactionMinedArgs(e) let receivedData = TransactionMinedArgs(e)
try:
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data)) let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
let data = AirdropArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus) let data = AirdropArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
@ -238,8 +244,12 @@ QtObject:
if receivedData.success: if receivedData.success:
self.tempTokenOwnersToFetch = tokenDto self.tempTokenOwnersToFetch = tokenDto
self.tokenOwners1SecTimer.start() self.tokenOwners1SecTimer.start()
except Exception as e:
error "Error processing Collectible airdrop pending transaction event", msg=e.msg, receivedData
self.events.on(PendingTransactionTypeDto.CollectibleRemoteSelfDestruct.event) do(e: Args): self.events.on(PendingTransactionTypeDto.CollectibleRemoteSelfDestruct.event) do(e: Args):
let receivedData = TransactionMinedArgs(e) let receivedData = TransactionMinedArgs(e)
try:
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data)) let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus) let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
@ -249,9 +259,12 @@ QtObject:
if receivedData.success: if receivedData.success:
self.tempTokenOwnersToFetch = tokenDto self.tempTokenOwnersToFetch = tokenDto
self.tokenOwners1SecTimer.start() self.tokenOwners1SecTimer.start()
except Exception as e:
error "Error processing Collectible self destruct pending transaction event", msg=e.msg, receivedData
self.events.on(PendingTransactionTypeDto.CollectibleBurn.event) do(e: Args): self.events.on(PendingTransactionTypeDto.CollectibleBurn.event) do(e: Args):
let receivedData = TransactionMinedArgs(e) let receivedData = TransactionMinedArgs(e)
try:
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data)) let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
if receivedData.success: if receivedData.success:
@ -261,6 +274,8 @@ QtObject:
error "Error updating collectibles supply", message = getCurrentExceptionMsg() error "Error updating collectibles supply", message = getCurrentExceptionMsg()
let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus) let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
self.events.emit(SIGNAL_BURN_STATUS, data) self.events.emit(SIGNAL_BURN_STATUS, data)
except Exception as e:
error "Error processing Collectible burn pending transaction event", msg=e.msg, receivedData
proc buildTransactionDataDto(self: Service, addressFrom: string, chainId: int, contractAddress: string): TransactionDataDto = proc buildTransactionDataDto(self: Service, addressFrom: string, chainId: int, contractAddress: string): TransactionDataDto =
let gasUnits = self.tempGasTable.getOrDefault((chainId, contractAddress), 0) let gasUnits = self.tempGasTable.getOrDefault((chainId, contractAddress), 0)

View File

@ -68,6 +68,15 @@ type
chainId*: int chainId*: int
success*: bool success*: bool
proc `$`*(self: TransactionMinedArgs): string =
result = fmt"""TransactionMinedArgs(
transactionHash: {$self.transactionHash},
chainId: {$self.chainId},
success: {$self.success},
data: {self.data},
]"""
type type
HistoryArgs* = ref object of Args HistoryArgs* = ref object of Args
addresses*: seq[string] addresses*: seq[string]