Ejemplo n.º 1
0
        protected EmptyBlockRepositoryFixture(string subDirectory, IHashProvider hashProvider, IBlockObjectTypeProvider typeProvider)
        {
            var factory = new LoggerFactory();

            var genesisBlock = new Block
            {
                Index          = 0L,
                PreviousHash   = new byte[] { 0 },
                MerkleRootHash = new byte[] { 0 },
                Timestamp      = 1465154705U,
                Nonce          = 0L,
                Objects        = new BlockObject[] { },
            };

            var baseDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            Value = new SqliteBlockRepository(
                baseDirectory,
                subDirectory,
                "blockchain",
                genesisBlock,
                typeProvider,
                factory.CreateLogger <SqliteBlockRepository>());

            genesisBlock.Index = 1;

            genesisBlock.Hash = genesisBlock.ToHashBytes(hashProvider);

            Value.AddAsync(genesisBlock).ConfigureAwait(false).GetAwaiter().GetResult();

            GenesisBlock = genesisBlock;

            TypeProvider = typeProvider;
        }
Ejemplo n.º 2
0
        public BlockSerializeContext(BinaryWriter bw, IBlockObjectTypeProvider typeProvider, int version = formatVersion)
        {
            this.bw           = bw;
            this.typeProvider = typeProvider;
            if (Version > formatVersion)
            {
                throw new Exception("Tried to save block with a version that is too new");
            }
            Version = version;

            bw.Write(Version);
        }
Ejemplo n.º 3
0
        public BlockDeserializeContext(BinaryReader br, IBlockObjectTypeProvider typeProvider)
        {
            this.br           = br;
            this.typeProvider = typeProvider;

            Version = br.ReadInt32();

            if (Version > BlockSerializeContext.formatVersion)
            {
                throw new Exception("Tried to load block with a version that is too new");
            }
        }
Ejemplo n.º 4
0
 public SqliteBlockStore(
     string baseDirectory,
     string subDirectory,
     string databaseName,
     Block genesisBlock,
     IBlockObjectTypeProvider typeProvider,
     ILogger <SqliteBlockStore> logger) : base(baseDirectory, subDirectory, databaseName, logger)
 {
     _genesisBlock = genesisBlock;
     _typeProvider = typeProvider;
     _logger       = logger;
 }
Ejemplo n.º 5
0
        public void RoundTripCheck(IHashProvider hashProvider, IBlockObjectTypeProvider typeProvider)
        {
            // Serialize a first time
            var firstMemoryStream     = new MemoryStream();
            var firstSerializeContext = new BlockSerializeContext(new BinaryWriter(firstMemoryStream), typeProvider);

            Serialize(firstSerializeContext);
            var originalData = firstMemoryStream.ToArray();

            // Then deserialize that data
            var br = new BinaryReader(new MemoryStream(originalData));
            var deserializeContext = new BlockDeserializeContext(br, typeProvider);
            var deserialized       = new Block(deserializeContext, hashProvider);

            // Then serialize that deserialized data and see if it matches
            var secondMemoryStream     = new MemoryCompareStream(originalData);
            var secondSerializeContext = new BlockSerializeContext(new BinaryWriter(secondMemoryStream), typeProvider);

            deserialized.Serialize(secondSerializeContext);
        }
Ejemplo n.º 6
0
        public void RoundTripCheck(IHashProvider hashProvider, IBlockObjectTypeProvider typeProvider)
        {
            // Serialize a first time
            var firstMemoryStream     = new MemoryStream();
            var firstSerializeContext = new BlockSerializeContext(new BinaryWriter(firstMemoryStream), typeProvider);

            byte[] nonce;
            if (typeProvider.SecretKey != null)
            {
                nonce = StreamEncryption.GenerateNonceChaCha20();
                firstSerializeContext.bw.WriteBuffer(nonce);
                using (var ems = new MemoryStream())
                {
                    using (var ebw = new BinaryWriter(ems))
                    {
                        var ec = new BlockSerializeContext(ebw, typeProvider, firstSerializeContext.Version);
                        Serialize(ec);
                        firstSerializeContext.bw.WriteBuffer(StreamEncryption.EncryptChaCha20(ems.ToArray(), nonce, ec.typeProvider.SecretKey));
                    }
                }
            }
            else
            {
                firstSerializeContext.bw.Write(false);
                Serialize(firstSerializeContext);
            }

            byte[] originalData = firstMemoryStream.ToArray();

            // Then deserialize that data
            {
                var br = new BinaryReader(new MemoryStream(originalData));
                var deserializeContext = new BlockDeserializeContext(br, typeProvider);
                nonce = deserializeContext.br.ReadBuffer();

                Block deserialized;
                if (nonce != null)
                {
                    using (var dms = new MemoryStream(StreamEncryption.DecryptChaCha20(deserializeContext.br.ReadBuffer(), nonce, typeProvider.SecretKey)))
                    {
                        using (var dbr = new BinaryReader(dms))
                        {
                            var dc = new BlockDeserializeContext(dbr, typeProvider);
                            deserialized = new Block(dc);
                        }
                    }
                }
                else
                {
                    deserialized = new Block(deserializeContext);
                }

                // Then serialize that deserialized data and see if it matches
                {
                    var secondMemoryStream     = new MemoryCompareStream(originalData);
                    var secondSerializeContext = new BlockSerializeContext(new BinaryWriter(secondMemoryStream), typeProvider);
                    if (typeProvider.SecretKey != null)
                    {
                        secondSerializeContext.bw.WriteBuffer(nonce);
                        using (var ems = new MemoryStream())
                        {
                            using (var ebw = new BinaryWriter(ems))
                            {
                                var ec = new BlockSerializeContext(ebw, typeProvider, secondSerializeContext.Version);
                                deserialized.Serialize(ec);
                                secondSerializeContext.bw.WriteBuffer(StreamEncryption.EncryptChaCha20(ems.ToArray(), nonce, ec.typeProvider.SecretKey));
                            }
                        }
                    }
                    else
                    {
                        secondSerializeContext.bw.Write(false);
                        deserialized.Serialize(secondSerializeContext);
                    }
                }
            }
        }
Ejemplo n.º 7
0
 public BlockObjectProjection(IBlockRepository source, IBlockObjectTypeProvider typeProvider)
 {
     _source       = source;
     _typeProvider = typeProvider;
 }
Ejemplo n.º 8
0
 public BlockObjectProjection(IBlockStore source, IBlockObjectTypeProvider typeProvider)
 {
     _source       = source;
     _typeProvider = typeProvider;
 }