public async Task <UpdatedTransactionInfo> CancelDepositAsync(Keccak depositId) { if (_logger.IsWarn) { _logger.Warn($"Canceling transaction for deposit with id: '{depositId}'."); } (UpdatedTransactionStatus status, DepositDetails? deposit) = await TryGetDepositAsync(depositId); if (status != UpdatedTransactionStatus.Ok) { return(new UpdatedTransactionInfo(status)); } if (deposit !.Transaction == null) { throw new InvalidDataException($"Maneged to retrieve deposit with id: '{depositId}' which has no Transaction set."); } if (deposit !.Confirmed) { if (_logger.IsError) { _logger.Error($"Deposit with id: '{depositId}' was confirmed, transaction hash: '{deposit!.Transaction.Hash}'."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.ResourceConfirmed)); } if (deposit !.Transaction.State != TransactionState.Pending) { if (_logger.IsError) { _logger.Error($"Cannot cancel transaction with hash: '{deposit!.Transaction.Hash}' for deposit with id: '{depositId}' (state: '{deposit.Transaction.State}')."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.AlreadyIncluded)); } if (deposit !.Transaction.Hash == null) { if (_logger.IsError) { _logger.Error($"Cannot cancel transaction with hash: '{deposit!.Transaction.Hash}' for deposit with id: '{depositId}' (state: '{deposit.Transaction.State}')."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.MissingTransaction)); } CanceledTransactionInfo transaction = await _transactionService.CancelAsync(deposit !.Transaction.Hash); if (_logger.IsWarn) { _logger.Warn($"Canceled transaction for deposit with id: '{depositId}', transaction hash: '{transaction.Hash}'."); } TransactionInfo cancellingTransaction = TransactionInfo.Cancellation(transaction.Hash, transaction.GasPrice, transaction.GasLimit, _timestamper.UnixTime.Seconds); deposit !.AddTransaction(cancellingTransaction); await _depositRepository.UpdateAsync(deposit); return(new UpdatedTransactionInfo(UpdatedTransactionStatus.Ok, transaction.Hash)); }
public async Task <UpdatedTransactionInfo> CancelPaymentClaimAsync(Keccak paymentClaimId) { (UpdatedTransactionStatus status, PaymentClaim? paymentClaim) = await TryGetPaymentClaimAsync(paymentClaimId, "cancel"); if (status != UpdatedTransactionStatus.Ok) { return(new UpdatedTransactionInfo(status)); } TransactionInfo?currentTransaction = paymentClaim !.Transaction; if (currentTransaction == null) { if (_logger.IsError) { _logger.Error($"Cannot cancel missing transaction for payment claim with id: '{paymentClaim!.Id}'."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.MissingTransaction)); } Keccak?hash = currentTransaction.Hash; if (hash == null) { if (_logger.IsError) { _logger.Error($"Cannot cancel missing transaction for payment claim with id: '{paymentClaim!.Id}'."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.MissingTransaction)); } if (currentTransaction.State != TransactionState.Pending) { if (_logger.IsError) { _logger.Error($"Cannot cancel transaction with hash: '{hash}' for payment claim with id: '{paymentClaim!.Id}' (state: '{currentTransaction.State}')."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.AlreadyIncluded)); } if (_logger.IsWarn) { _logger.Warn($"Canceling transaction for payment claim with id: '{paymentClaimId}'."); } CanceledTransactionInfo transaction = await _transactionService.CancelAsync(hash); if (_logger.IsWarn) { _logger.Warn($"Canceled transaction for payment claim with id: '{paymentClaimId}', transaction hash: '{transaction.Hash}'."); } TransactionInfo cancellingTransaction = TransactionInfo.Cancellation(transaction.Hash, transaction.GasPrice, transaction.GasLimit, _timestamper.UnixTime.Seconds); paymentClaim !.AddTransaction(cancellingTransaction); await _paymentClaimRepository.UpdateAsync(paymentClaim !); return(new UpdatedTransactionInfo(UpdatedTransactionStatus.Ok, transaction.Hash)); }
public async Task <UpdatedTransactionInfo> CancelRefundAsync(Keccak depositId) { if (_logger.IsWarn) { _logger.Warn($"Canceling transaction for refund for deposit with id: '{depositId}'."); } (UpdatedTransactionStatus status, DepositDetails? deposit) = await TryGetDepositAsync(depositId); if (status != UpdatedTransactionStatus.Ok) { return(new UpdatedTransactionInfo(status)); } if (deposit !.ClaimedRefundTransaction is null) { if (_logger.IsError) { _logger.Error($"Deposit with id: '{depositId}' has no transaction for refund claim."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.MissingTransaction)); } Keccak?currentHash = deposit !.ClaimedRefundTransaction.Hash; if (deposit !.RefundClaimed) { if (_logger.IsError) { _logger.Error($"Deposit with id: '{depositId}' has already claimed refund (transaction hash: '{currentHash}')."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.ResourceConfirmed)); } if (currentHash is null) { if (_logger.IsError) { _logger.Error($"Cannot cancel transaction with hash: '{null}' for refund for deposit with id: '{depositId}' (state: '{deposit.ClaimedRefundTransaction.State}')."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.MissingTransaction)); } if (deposit !.ClaimedRefundTransaction.State != TransactionState.Pending) { if (_logger.IsError) { _logger.Error($"Cannot cancel transaction with hash: '{deposit!.ClaimedRefundTransaction.Hash}' for refund for deposit with id: '{depositId}' (state: '{deposit.ClaimedRefundTransaction.State}')."); } return(new UpdatedTransactionInfo(UpdatedTransactionStatus.AlreadyIncluded)); } CanceledTransactionInfo transaction = await _transactionService.CancelAsync(currentHash); if (_logger.IsWarn) { _logger.Warn($"Canceled transaction for deposit with id: '{depositId}', transaction hash: '{transaction.Hash}'."); } TransactionInfo cancellingTransaction = TransactionInfo.Cancellation(transaction.Hash, transaction.GasPrice, transaction.GasLimit, _timestamper.UnixTime.Seconds); deposit.AddClaimedRefundTransaction(cancellingTransaction); await _depositRepository.UpdateAsync(deposit); return(new UpdatedTransactionInfo(UpdatedTransactionStatus.Ok, transaction.Hash)); }