private async Task <bool> Payment(Guid sessionId, string message) { Guard.Argument(message, nameof(message)).NotNull().NotEmpty(); try { var redemptionKey = JsonConvert.DeserializeObject <RedemptionKeyDto>(message); var coinResult = await Client.GetAsync <CoinDto>(redemptionKey.Hash, RestApiMethod.Coin); if (coinResult.Result == null) { return(false); } var session = GetSession(sessionId); var(swap1, swap2) = coinService.CoinSwap(session.SecretKey, redemptionKey.Salt.ToSecureString(), coinResult.Result, redemptionKey); var keeperPass = await CoinPass(session.SecretKey, redemptionKey.Salt.ToSecureString(), swap1, 3); if (keeperPass.Equals(false)) { return(false); } //TODO: Above coin swap passes which writes to the ledger.. full pass could fail.. need recovery.. var fullPass = await CoinPass(session.SecretKey, redemptionKey.Salt.ToSecureString(), swap2, 1); if (fullPass.Equals(false)) { return(false); } //TODO: Could possibility fail.. need recovery.. var added = await AddWalletTransaction(session.SessionId, coinResult.Result, redemptionKey.Amount, redemptionKey.Memo, redemptionKey.Blind.FromHex(), redemptionKey.Salt.FromHex(), TransactionType.Receive); if (added.Equals(false)) { return(false); } redemptionKey.Blind.ZeroString(); redemptionKey.Key1.ZeroString(); redemptionKey.Key2.ZeroString(); redemptionKey.Salt.ZeroString(); return(true); } catch (Exception ex) { logger.LogError($"Message: {ex.Message}\n Stack: {ex.StackTrace}"); throw ex; } }