Exemplo n.º 1
0
        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;
            }
        }