ValueOut property.
[NovacoinLibrary.git] / Novacoin / CTransaction.cs
index 5cbd54c..8402b12 100644 (file)
@@ -20,6 +20,7 @@ using System;
 using System.Text;
 using System.Collections.Generic;
 using System.IO;
+using System.Diagnostics.Contracts;
 
 namespace Novacoin
 {
@@ -42,7 +43,7 @@ namespace Novacoin
     }
 
     /// <summary>
-    /// Represents the transaction. Any transaction must provide one input and one output at least.
+    /// Represents the transaction.
     /// </summary>
     public class CTransaction
     {
@@ -56,6 +57,11 @@ namespace Novacoin
         public const ulong nMaxMoney = 2000000000 * nCoin;
 
         /// <summary>
+        /// Maximum transaction size is 250Kb
+        /// </summary>
+        public const uint nMaxTxSize = 250000;
+
+        /// <summary>
         /// Version of transaction schema.
         /// </summary>
         public uint nVersion;
@@ -174,7 +180,7 @@ namespace Novacoin
         /// <returns>Checking result</returns>
         public bool CheckTransaction()
         {
-            if (Size > 250000 || vin.Length == 0 || vout.Length == 0)
+            if (Size > nMaxTxSize || vin.Length == 0 || vout.Length == 0)
             {
                 return false;
             }
@@ -393,9 +399,26 @@ namespace Novacoin
         /// <summary>
         /// Transaction hash
         /// </summary>
-        public Hash256 Hash
+        public uint256 Hash
+        {
+            get { return CryptoUtils.ComputeHash256(this); }
+        }
+
+        /// <summary>
+        /// Amount of novacoins spent by this transaction.
+        /// </summary>
+        public ulong ValueOut
         {
-            get { return Hash256.Compute256(this); }
+            get
+            {
+                ulong nValueOut = 0;
+                foreach (var txout in vout)
+                {
+                    nValueOut += txout.nValue;
+                    Contract.Assert(MoneyRange(txout.nValue) && MoneyRange(nValueOut));
+                }
+                return nValueOut;
+            }
         }
 
         /// <summary>
@@ -429,8 +452,6 @@ namespace Novacoin
             return resultBytes;
         }
 
-
-
         public override string ToString()
         {
             var sb = new StringBuilder();
@@ -439,12 +460,12 @@ namespace Novacoin
 
             foreach (var txin in vin)
             {
-                sb.AppendFormat(" {0},\n", txin.ToString());
+                sb.AppendFormat(" {0},\n", txin);
             }
 
             foreach (var txout in vout)
             {
-                sb.AppendFormat(" {0},\n", txout.ToString());
+                sb.AppendFormat(" {0},\n", txout);
             }
 
             sb.AppendFormat("\nnLockTime={0}\n)", nLockTime);