3 using System.Collections.Generic;
8 /// Represents the block. Block consists of header, transaction array and header signature.
15 public CBlockHeader header;
18 /// Transactions array.
20 public CTransaction[] tx;
23 /// Block header signature.
25 public byte[] signature;
28 /// Parse byte sequence and initialize new block instance
30 /// <param name="blockBytes"></param>
31 public CBlock (List<byte> blockBytes)
33 header = new CBlockHeader();
35 WrappedList<byte> wBytes = new WrappedList<byte>(blockBytes);
37 // Fill the block header fields
38 header.nVersion = Interop.LEBytesToUInt32(wBytes.GetItems(4));
39 header.prevHash = new Hash256(wBytes.GetItems(32));
40 header.merkleRoot = new Hash256(wBytes.GetItems(32));
41 header.nTime = Interop.LEBytesToUInt32(wBytes.GetItems(4));
42 header.nBits = Interop.LEBytesToUInt32(wBytes.GetItems(4));
43 header.nNonce = Interop.LEBytesToUInt32(wBytes.GetItems(4));
45 // Parse transactions list
46 tx = CTransaction.ReadTransactionsList(ref wBytes);
48 // Read block signature
49 signature = wBytes.GetItems((int)VarInt.ReadVarInt(ref wBytes));
52 public override string ToString()
54 StringBuilder sb = new StringBuilder();
56 sb.AppendFormat("CBlock(\n header={0},\n", header.ToString());
58 foreach(CTransaction t in tx)
60 sb.AppendFormat("{0}, \n", t.ToString());
63 sb.AppendFormat("signature={0})\n", Interop.ToHex(signature));