fix(community_tokens/service): fix crash when receiving bad event
Fixes #11176
This commit is contained in:
parent
31aca3ac35
commit
20afd728fa
|
@ -212,55 +212,70 @@ 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)
|
||||||
let deployState = if receivedData.success: DeployState.Deployed else: DeployState.Failed
|
|
||||||
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
|
||||||
if not receivedData.success:
|
|
||||||
error "Collectible contract not deployed", chainId=tokenDto.chainId, address=tokenDto.address
|
|
||||||
try:
|
try:
|
||||||
discard updateCommunityTokenState(tokenDto.chainId, tokenDto.address, deployState) #update db state
|
let deployState = if receivedData.success: DeployState.Deployed else: DeployState.Failed
|
||||||
except RpcException:
|
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
||||||
error "Error updating collectibles contract state", message = getCurrentExceptionMsg()
|
if not receivedData.success:
|
||||||
let data = CommunityTokenDeployedStatusArgs(communityId: tokenDto.communityId, contractAddress: tokenDto.address,
|
error "Collectible contract not deployed", chainId=tokenDto.chainId, address=tokenDto.address
|
||||||
deployState: deployState, chainId: tokenDto.chainId,
|
try:
|
||||||
transactionHash: receivedData.transactionHash)
|
discard updateCommunityTokenState(tokenDto.chainId, tokenDto.address, deployState) #update db state
|
||||||
self.events.emit(SIGNAL_COMMUNITY_TOKEN_DEPLOY_STATUS, data)
|
except RpcException:
|
||||||
|
error "Error updating collectibles contract state", message = getCurrentExceptionMsg()
|
||||||
|
let data = CommunityTokenDeployedStatusArgs(communityId: tokenDto.communityId, contractAddress: tokenDto.address,
|
||||||
|
deployState: deployState, chainId: tokenDto.chainId,
|
||||||
|
transactionHash: receivedData.transactionHash)
|
||||||
|
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)
|
||||||
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
try:
|
||||||
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
|
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
||||||
let data = AirdropArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
|
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
|
||||||
self.events.emit(SIGNAL_AIRDROP_STATUS, data)
|
let data = AirdropArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
|
||||||
|
self.events.emit(SIGNAL_AIRDROP_STATUS, data)
|
||||||
|
|
||||||
|
# update owners list if burn was successfull
|
||||||
|
if receivedData.success:
|
||||||
|
self.tempTokenOwnersToFetch = tokenDto
|
||||||
|
self.tokenOwners1SecTimer.start()
|
||||||
|
except Exception as e:
|
||||||
|
error "Error processing Collectible airdrop pending transaction event", msg=e.msg, receivedData
|
||||||
|
|
||||||
# update owners list if burn was successfull
|
|
||||||
if receivedData.success:
|
|
||||||
self.tempTokenOwnersToFetch = tokenDto
|
|
||||||
self.tokenOwners1SecTimer.start()
|
|
||||||
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)
|
||||||
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
try:
|
||||||
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
|
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
||||||
let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
|
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
|
||||||
self.events.emit(SIGNAL_REMOTE_DESTRUCT_STATUS, data)
|
let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
|
||||||
|
self.events.emit(SIGNAL_REMOTE_DESTRUCT_STATUS, data)
|
||||||
|
|
||||||
# update owners list if burn was successfull
|
# update owners list if burn was successfull
|
||||||
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)
|
||||||
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
try:
|
||||||
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
|
let tokenDto = toCommunityTokenDto(parseJson(receivedData.data))
|
||||||
if receivedData.success:
|
let transactionStatus = if receivedData.success: ContractTransactionStatus.Completed else: ContractTransactionStatus.Failed
|
||||||
try:
|
if receivedData.success:
|
||||||
discard updateCommunityTokenSupply(tokenDto.chainId, tokenDto.address, tokenDto.supply) #update db state
|
try:
|
||||||
except RpcException:
|
discard updateCommunityTokenSupply(tokenDto.chainId, tokenDto.address, tokenDto.supply) #update db state
|
||||||
error "Error updating collectibles supply", message = getCurrentExceptionMsg()
|
except RpcException:
|
||||||
let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
|
error "Error updating collectibles supply", message = getCurrentExceptionMsg()
|
||||||
self.events.emit(SIGNAL_BURN_STATUS, data)
|
let data = RemoteDestructArgs(communityToken: tokenDto, transactionHash: receivedData.transactionHash, status: transactionStatus)
|
||||||
|
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)
|
||||||
|
|
|
@ -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]
|
||||||
|
|
Loading…
Reference in New Issue