Add ToBytes() implementation for CBlock and CBlockHeader
authorCryptoManiac <balthazar.ad@gmail.com>
Mon, 17 Aug 2015 11:23:18 +0000 (14:23 +0300)
committerCryptoManiac <balthazar.ad@gmail.com>
Mon, 17 Aug 2015 11:23:18 +0000 (14:23 +0300)
Novacoin/CBlock.cs
Novacoin/CBlockHeader.cs
Novacoin/CTransaction.cs

index 4d4aa3f..f8b9e7e 100644 (file)
@@ -49,6 +49,28 @@ namespace Novacoin
             signature = wBytes.GetItems((int)VarInt.ReadVarInt(ref wBytes));
                }
 
+        /// <summary>
+        /// Convert current instance into sequence of bytes
+        /// </summary>
+        /// <returns>Byte sequence</returns>
+        public IList<byte> ToBytes()
+        {
+            List<byte> r = new List<byte>();
+
+            r.AddRange(header.ToBytes());
+            r.AddRange(VarInt.EncodeVarInt(tx.LongLength)); // transactions count
+
+            foreach (CTransaction t in tx)
+            {
+                r.AddRange(t.ToBytes());
+            }
+
+            r.AddRange(VarInt.EncodeVarInt(signature.LongLength));
+            r.AddRange(signature);
+
+            return r;
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
index b0759ce..b3b18c3 100644 (file)
@@ -39,10 +39,31 @@ namespace Novacoin
                /// </summary>
                public uint nNonce = 0;
 
+        /// <summary>
+        /// Initialize an empty instance
+        /// </summary>
                public CBlockHeader ()
                {
                }
 
+        /// <summary>
+        /// Convert current block header instance into sequence of bytes
+        /// </summary>
+        /// <returns>Byte sequence</returns>
+        public IList<byte> ToBytes()
+        {
+            List<byte> r = new List<byte>();
+
+            r.AddRange(Interop.LEBytes(nVersion));
+            r.AddRange(prevHash.hashBytes);
+            r.AddRange(merkleRoot.hashBytes);
+            r.AddRange(Interop.LEBytes(nTime));
+            r.AddRange(Interop.LEBytes(nBits));
+            r.AddRange(Interop.LEBytes(nNonce));
+
+            return r;
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
index 8146685..6e40a0b 100644 (file)
@@ -113,7 +113,7 @@ namespace Novacoin
             return tx;
         }
 
-        IList<byte> ToBytes()
+        public IList<byte> ToBytes()
         {
             List<byte> resultBytes = new List<byte>();