\feffusing System;
+using System.Text;
using System.Collections.Generic;
namespace Novacoin
/// <summary>
/// Transactions array.
/// </summary>
- public CTransaction[] tx;
+ public CTransaction[] vtx;
/// <summary>
/// Block header signature.
/// Parse byte sequence and initialize new block instance
/// </summary>
/// <param name="blockBytes"></param>
- public CBlock (List<byte> blockBytes)
+ public CBlock (IList<byte> blockBytes)
{
header = new CBlockHeader();
WrappedList<byte> wBytes = new WrappedList<byte>(blockBytes);
// Fill the block header fields
- header.nVersion = Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ header.nVersion = BitConverter.ToUInt32(wBytes.GetItems(4), 0);
header.prevHash = new Hash256(wBytes.GetItems(32));
header.merkleRoot = new Hash256(wBytes.GetItems(32));
- header.nTime = Interop.LEBytesToUInt32(wBytes.GetItems(4));
- header.nBits = Interop.LEBytesToUInt32(wBytes.GetItems(4));
- header.nNonce = Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ header.nTime = BitConverter.ToUInt32(wBytes.GetItems(4), 0);
+ header.nBits = BitConverter.ToUInt32(wBytes.GetItems(4), 0);
+ header.nNonce = BitConverter.ToUInt32(wBytes.GetItems(4), 0);
// Parse transactions list
- tx = CTransaction.ParseTransactionsList(ref wBytes);
+ vtx = CTransaction.ReadTransactionsList(ref wBytes);
// Read block signature
signature = wBytes.GetItems((int)VarInt.ReadVarInt(ref wBytes));
}
+
+ /// <summary>
+ /// Convert current instance into sequence of bytes
+ /// </summary>
+ /// <returns>Byte sequence</returns>
+ public IList<byte> Bytes
+ {
+ get
+ {
+ List<byte> r = new List<byte>();
+
+ r.AddRange(header.Bytes);
+ r.AddRange(VarInt.EncodeVarInt(vtx.LongLength)); // transactions count
+
+ foreach (CTransaction tx in vtx)
+ {
+ r.AddRange(tx.Bytes);
+ }
+
+ r.AddRange(VarInt.EncodeVarInt(signature.LongLength));
+ r.AddRange(signature);
+
+ return r;
+ }
+ }
+
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.AppendFormat("CBlock(\n header={0},\n", header.ToString());
+
+ foreach(CTransaction tx in vtx)
+ {
+ sb.AppendFormat("{0},\n", tx.ToString());
+ }
+
+ sb.AppendFormat("signature={0})\n", Interop.ToHex(signature));
+
+ // TODO
+ return sb.ToString();
+ }
}
}