public override byte[] ToBytes()
        {
            var bytes = new Byte[0].AsEnumerable();

            bytes = bytes.Concat(BitConverter.GetBytes(Version));
            bytes = bytes.Concat(PreviousBlockHash);
            bytes = bytes.Concat(MerkleRoot);
            bytes = bytes.Concat(BitConverter.GetBytes(TimeStamp));
            bytes = bytes.Concat(BitConverter.GetBytes(Bits));
            bytes = bytes.Concat(BitConverter.GetBytes(Nonce));

            var pcmBytes = PrimeChainMultiplier.ToByteArray();
            var pcmCount = new IntegerPayload((UInt64)pcmBytes.Length);

            bytes = bytes.Concat(pcmCount.ToBytes()).Concat(pcmBytes);

            var txCount = new IntegerPayload((UInt64)Transactions.Count);

            bytes = bytes.Concat(txCount.ToBytes());
            foreach (TransactionPayload tx in Transactions)
            {
                bytes = bytes.Concat(tx.ToBytes());
            }

            return(bytes.ToArray());
        }
        public Byte[] Hash()
        {
            var version   = BitConverter.GetBytes(Version);
            var timeStamp = BitConverter.GetBytes(TimeStamp);
            var bits      = BitConverter.GetBytes(Bits);
            var nonce     = BitConverter.GetBytes(Nonce);
            var pcmBytes  = PrimeChainMultiplier.ToByteArray();
            var pcmCount  = new IntegerPayload((UInt64)pcmBytes.Length);
            var pcm       = pcmCount.ToBytes().Concat(pcmBytes);
            var bytes     = version
                            .Concat(PreviousBlockHash)
                            .Concat(MerkleRoot)
                            .Concat(timeStamp)
                            .Concat(bits)
                            .Concat(nonce)
                            .Concat(pcm)
                            .ToArray();

            SHA256 sha256 = SHA256Managed.Create();

            return(sha256.ComputeHash(sha256.ComputeHash(bytes)));
        }