protected override void Parse()
        {
            _version          = ReadUint32();
            _prevBlockHash    = ReadHash();
            _merkleRoot       = ReadHash();
            _time             = ReadUint32();
            _difficultyTarget = ReadUint32();
            _nonce            = ReadUint32();

            _hash = Utilities.ReverseBytes(Utilities.DoubleDigest(Bytes, 0, Cursor));

            if (Cursor == Bytes.Length)
            {
                // This message is just a header, it has no transactions.
                return;
            }

            var numTransactions = (int)ReadVarInt();

            Transactions = new List <TransactionMessage>(numTransactions);
            for (var i = 0; i < numTransactions; i++)
            {
                var tx = new TransactionMessage(Bytes, Cursor, P2PNetParameters);
                Transactions.Add(tx);
                Cursor += tx.MessageSize;
            }
        }
 /// <summary>
 /// Creates an UNSIGNED input that links to the given output
 /// </summary>
 internal TransactionInput(TransactionMessage parentTransaction, Byte[] outpointHash, uint outpointIndex, P2PNetworkParameters netParams) : base(netParams)
 {
     _outpointHash     = outpointHash;
     _outpointIndex    = outpointIndex;
     ScriptBytes       = EmptyArray;
     _sequence         = uint.MaxValue;
     ParentTransaction = parentTransaction;
 }
 /// <summary>
 /// Adds a transaction to this block.
 /// </summary>
 internal void AddTransaction(TransactionMessage t)
 {
     if (Transactions == null)
     {
         Transactions = new List <TransactionMessage>();
     }
     Transactions.Add(t);
     // Force a recalculation next time the values are needed.
     _merkleRoot = null;
     _hash       = null;
 }
 /// <summary>
 /// Deserializes an input message. This is usually part of a transaction message.
 /// </summary>
 /// <exception cref="BitCoinSharp.ProtocolException" />
 public TransactionInput(TransactionMessage parentTransaction, byte[] payload, int offset, P2PNetworkParameters netParams) : base(payload, offset, true, netParams)
 {
     ParentTransaction = parentTransaction;
 }
 /// <summary>
 /// Used only in creation of the genesis block.
 /// </summary>
 internal TransactionInput(TransactionMessage parentTransaction, byte[] scriptBytes, P2PNetworkParameters netParams) : base(netParams)
 {
     ScriptBytes       = scriptBytes;
     _sequence         = uint.MaxValue;
     ParentTransaction = parentTransaction;
 }