Esempio n. 1
0
        public void Deserialize(BinaryReader reader)
        {
            var blockHash            = reader.ReadFixedString(64);
            var blockSignatureLength = reader.ReadInt16();

            reader.ReadByte(); // Move the reader by one byte (I don't know why, but else it's not reading the signature properly.
            var   blockSignature  = reader.ReadFixedString(blockSignatureLength);
            var   previoushHash   = reader.ReadFixedString(64);
            var   magicNumber     = reader.ReadFixedString(7);
            var   blockVersion    = reader.ReadUInt32();
            var   merkleRoot      = reader.ReadFixedString(64);
            long  timestamp       = reader.ReadInt64();
            ulong nonce           = reader.ReadUInt64();
            var   signatureLength = reader.ReadInt16();

            reader.ReadByte(); // Move the reader by one byte (I don't know why, but else it's not reading the signature properly.
            var signature = reader.ReadFixedString(signatureLength);

            var transactionsPayload = new StateTransactionsPayload();

            transactionsPayload.Deserialize(reader);
            var header = new BlockHeader(magicNumber, blockVersion, merkleRoot, timestamp, previoushHash).Finalize(blockHash, signature);

            header.Finalize(blockHash, blockSignature);
            header.IncrementNonce(nonce);
            _block = new Block(header, transactionsPayload.Transactions);
        }
Esempio n. 2
0
        public void Serialize(BinaryWriter writer)
        {
            if (_block.Transactions.Count() > Int16.MaxValue)
            {
                throw new InvalidDataException("Too many transactions");
            }

            writer.WriteFixedString(_block.Header.Hash, 64);
            writer.Write((Int16)_block.Header.Signature.Length);
            writer.Write(_block.Header.Signature);
            writer.WriteFixedString(_block.Header.PreviousHash, 64);
            writer.WriteFixedString(_block.Header.MagicNumber, 7);
            writer.Write(_block.Header.Version);
            writer.WriteFixedString(_block.Header.MerkleRoot, 64);
            writer.Write(_block.Header.Timestamp);
            writer.Write(_block.Header.Nonce);
            writer.Write((Int16)_block.Header.Signature.Length);
            writer.Write(_block.Header.Signature);

            var transactionsPayload = new StateTransactionsPayload(_block.Transactions);

            transactionsPayload.Serialize(writer);
        }