ReadTxInList, ReadTxOutList and ReadTxList are internal now.
[NovacoinLibrary.git] / Novacoin / CTxIn.cs
index af8539f..376f27f 100644 (file)
@@ -19,6 +19,7 @@
 using System;
 using System.Text;
 using System.Collections.Generic;
+using System.IO;
 
 namespace Novacoin
 {
@@ -83,23 +84,23 @@ namespace Novacoin
         /// <summary>
         /// Read vin list from byte sequence.
         /// </summary>
-        /// <param name="wBytes">Reference to byte sequence</param>
+        /// <param name="wBytes">Reference to binary reader</param>
         /// <returns>Inputs array</returns>
-        public static CTxIn[] ReadTxInList(ref ByteQueue wBytes)
+        internal static CTxIn[] ReadTxInList(ref BinaryReader reader)
         {
             try
             {
                 // Get amount
-                int nInputs = (int)wBytes.GetVarInt();
+                int nInputs = (int)VarInt.ReadVarInt(ref reader);
                 var vin = new CTxIn[nInputs];
 
                 for (int nIndex = 0; nIndex < nInputs; nIndex++)
                 {
                     // Fill inputs array
                     vin[nIndex] = new CTxIn();
-                    vin[nIndex].prevout = new COutPoint(wBytes.Get(36));
-                    vin[nIndex].scriptSig = new CScript(wBytes.Get((int)wBytes.GetVarInt()));
-                    vin[nIndex].nSequence = BitConverter.ToUInt32(wBytes.Get(4), 0);
+                    vin[nIndex].prevout = new COutPoint(reader.ReadBytes(36));
+                    vin[nIndex].scriptSig = new CScript(reader.ReadBytes((int)VarInt.ReadVarInt(ref reader)));
+                    vin[nIndex].nSequence = reader.ReadUInt32();
                 }
 
                 // Return inputs array
@@ -131,18 +132,19 @@ namespace Novacoin
         /// <returns>Byte sequence.</returns>
         public static implicit operator byte[] (CTxIn input)
         {
-            var inputBytes = new List<byte>();
+            var stream = new MemoryStream();
+            var writer = new BinaryWriter(stream);
 
-            inputBytes.AddRange((byte[])input.prevout); // prevout
+            writer.Write(input.prevout); // prevout
+            writer.Write(VarInt.EncodeVarInt(input.scriptSig.Size)); // scriptSig length
+            writer.Write(input.scriptSig); // scriptSig
+            writer.Write(input.nSequence); // nSequence
 
-            var s = (byte[])input.scriptSig;
-            inputBytes.AddRange(VarInt.EncodeVarInt(s.Length)); // scriptSig length
-            inputBytes.AddRange(s); // scriptSig
-            inputBytes.AddRange(BitConverter.GetBytes(input.nSequence)); // Sequence
-
-            return inputBytes.ToArray();
+            var inputBytes = stream.ToArray();
+            writer.Close();
+            return inputBytes;
         }
-        
+
         public bool IsFinal
         {
             get { return (nSequence == uint.MaxValue); }