/// <summary> /// Verify that a transaction is fully signed, have enough fees, and follow the Standard and Miner Transaction Policy rules /// </summary> /// <param name="tx">The transaction to check</param> /// <param name="expectedFees">The expected fees (more or less 10%)</param> /// <param name="errors">Detected errors</param> /// <returns>True if no error</returns> public bool Verify(Transaction tx, Money expectedFees, out TransactionPolicyError[] errors) { if(tx == null) throw new ArgumentNullException("tx"); var coins = tx.Inputs.Select(i => FindCoin(i.PrevOut)).Where(c => c != null).ToArray(); List<TransactionPolicyError> exceptions = new List<TransactionPolicyError>(); var policyErrors = MinerTransactionPolicy.Instance.Check(tx, coins); exceptions.AddRange(policyErrors); policyErrors = StandardTransactionPolicy.Check(tx, coins); exceptions.AddRange(policyErrors); if(expectedFees != null) { var fees = tx.GetFee(coins); if(fees != null) { Money margin = Money.Zero; if(DustPrevention) margin = GetDust() * 2; if(!fees.Almost(expectedFees, margin)) exceptions.Add(new NotEnoughFundsPolicyError("Fees different than expected", expectedFees - fees)); } } errors = exceptions.ToArray(); return errors.Length == 0; }
/// <summary> /// Verify that a transaction is fully signed and have enough fees /// </summary> /// <param name="tx">The transaction to check</param> /// <param name="expectedFeeRate">The expected fee rate</param> /// <param name="errors">Detected errors</param> /// <returns>True if no error</returns> public bool Verify(Transaction tx, FeeRate expectedFeeRate, out TransactionPolicyError[] errors) { if(tx == null) throw new ArgumentNullException("tx"); return Verify(tx, expectedFeeRate == null ? null : expectedFeeRate.GetFee(tx), out errors); }
/// <summary> /// Verify that a transaction is fully signed and have enough fees /// </summary> /// <param name="tx">The transaction to check</param> /// <param name="errors">Detected errors</param> /// <returns>True if no error</returns> public bool Verify(Transaction tx, out TransactionPolicyError[] errors) { return Verify(tx, null as Money, out errors); }