/// <inheritdoc /> public async Task <bool> VerifyPaymentAsync(IAgentContext context, PaymentRecord paymentRecord) { if (paymentRecord.State != PaymentState.Paid && paymentRecord.State != PaymentState.ReceiptReceived) { throw new AriesFrameworkException(ErrorCode.RecordInInvalidState, "Payment record must be in state Paid or ReceiptReceived to verify it"); } var req = await IndyPayments.BuildVerifyPaymentRequestAsync(context.Wallet, null, paymentRecord.ReceiptId); var res = await IndyLedger.SubmitRequestAsync(await context.Pool, req.Result); var resParsed = JObject.Parse(await IndyPayments.ParseVerifyPaymentResponseAsync("sov", res)); var receipts = resParsed["receipts"].ToObject <IList <IndyPaymentOutputSource> >() .Where(x => x.Recipient == paymentRecord.Address) .ToList(); if (receipts.Any() && receipts.Select(x => x.Amount).Aggregate((x, y) => x + y) == paymentRecord.Amount) { return(true); } return(false); }