コード例 #1
0
        private void AddGraphToChain(IGraph g, DateTime genesisDate)
        {
            GraphBlock graphBlock = new GraphBlock();

            graphBlock.PoAHeader.AuthorityHash = uint256.One;
            Encoding utf8Encoding = Encoding.UTF8;

            byte[] graphBytes;
            using (var s = new MemoryStream())
                using (var sw = new StreamWriter(s))
                {
                    g.SaveToStream(sw, new CompressingTurtleWriter());
                    graphBytes = s.ToArray();
                }
            GraphContent content = new GraphContent()
            {
                Version = 1,
                Headers = new GraphContentHeaders(),
                Graph   = graphBytes
            };

            content.Headers.AddHeader("GraphFormat", "ttl");
            graphBlock.AddGraph(content);
            graphBlock.Header.Nonce         = RandomUtils.GetUInt32();
            graphBlock.Header.Version       = 1;
            graphBlock.Header.Time          = (uint)(DateTime.UtcNow.Ticks - genesisDate.Ticks);
            graphBlock.Header.HashPrevBlock = (_smallBlockChain.LastOrDefault()?.GetHash()) ?? uint256.Zero;
            graphBlock.UpdateMerkleRoot();
            Assert.NotEqual(graphBlock.Header.GetPoWHash(), uint256.Zero);
            Assert.Equal(graphBlock.Header.HashMerkleRoot, graphBlock.GetMerkleRoot().Hash);
            _smallBlockChain.Add(graphBlock);
        }
コード例 #2
0
        private void LoadBlockChainFromStrings()
        {
            var genesisDate = DateTime.UtcNow;
            var files       = new DirectoryInfo(@"data\rdf\").GetFiles("*.ttl", SearchOption.TopDirectoryOnly);

            _filesCount = files.Length;
            fixture.StartWatch();
            foreach (var file in files)
            {
                GraphBlock graphBlock = new GraphBlock();
                graphBlock.PoAHeader.AuthorityHash = uint256.One;
                var      graphString  = File.ReadAllText(file.FullName);
                Encoding utf8Encoding = Encoding.UTF8;
                var      graphBytes   = utf8Encoding.GetBytes(graphString);

                GraphContent content = new GraphContent()
                {
                    Version = 1,
                    Headers = new GraphContentHeaders(),
                    Graph   = graphBytes
                };
                content.Headers.AddHeader("GraphFormat", "ttl");
                graphBlock.AddGraph(content);
                graphBlock.Header.Nonce         = RandomUtils.GetUInt32();
                graphBlock.Header.Version       = 1;
                graphBlock.Header.Time          = (uint)(DateTime.UtcNow.Ticks - genesisDate.Ticks);
                graphBlock.Header.HashPrevBlock = (_smallBlockChain.LastOrDefault()?.GetHash()) ?? uint256.Zero;
                graphBlock.UpdateMerkleRoot();
                Assert.NotEqual(graphBlock.Header.GetPoWHash(), uint256.Zero);
                Assert.Equal(graphBlock.Header.HashMerkleRoot, graphBlock.GetMerkleRoot().Hash);
                _smallBlockChain.Add(graphBlock);
            }

            fixture.Log("Loaded {0} graphs into {1} blocks. Elapsed time: {2} miliseconds.", "LoadBlockChain", _filesCount, _smallBlockChain.Count, fixture.StopWatch());
        }
コード例 #3
0
        public void CanCalculateMerkleRoot_Complex()
        {
            GraphBlock graphBlock = new GraphBlock();

            graphBlock.PoAHeader.AuthorityHash = uint256.One;
            foreach (var file in new DirectoryInfo(@"data\rdf\").GetFiles())
            {
                var          graphString  = File.ReadAllText(file.FullName);
                Encoding     utf8Encoding = Encoding.UTF8;
                var          graphBytes   = utf8Encoding.GetBytes(graphString);
                GraphContent content      = new GraphContent()
                {
                    Version = 1,
                    Headers = new GraphContentHeaders(),
                    Graph   = graphBytes
                };
                content.Headers.AddHeader("GraphFormat", "ttl");
                graphBlock.AddGraph(content);
            }

            fixture.StartWatch();
            graphBlock.UpdateMerkleRoot();
            Assert.Equal(graphBlock.Header.HashMerkleRoot, graphBlock.GetMerkleRoot().Hash);
            fixture.Log("Calculated merkle root hash for {0} graph's block. Elapsed time: {1} miliseconds.", "CanCalculateMerkleRoot_Complex", graphBlock.Graphs.Count, fixture.StopWatch());
        }
コード例 #4
0
        public void CanCalculateMerkleRoot()
        {
            var        graphString = File.ReadAllText(@"data\rdf\2594007XIACKNMUAW223.ttl");
            var        graphBytes  = _utf8Encoding.GetBytes(graphString);
            GraphBlock graphBlock  = new GraphBlock();

            graphBlock.PoAHeader.AuthorityHash = uint256.One;
            GraphContent content = new GraphContent()
            {
                Version = 1,
                Headers = new GraphContentHeaders(),
                Graph   = graphBytes
            };

            content.Headers.AddHeader("GraphFormat", "ttl");
            graphBlock.AddGraph(content);

            fixture.StartWatch();
            graphBlock.UpdateMerkleRoot();
            Assert.Equal(graphBlock.Header.HashMerkleRoot, graphBlock.GetMerkleRoot().Hash);
            fixture.Log("Calculated merkle root hash for single graph's block. Elapsed time: {0} miliseconds.", "CanCalculateMerkleRoot", fixture.StopWatch());
        }
コード例 #5
0
        private void LoadBlockChainFromGraphs()
        {
            var genesisDate = DateTime.UtcNow;
            var files       = new DirectoryInfo(@"data\rdf\").GetFiles("*.ttl", SearchOption.TopDirectoryOnly);

            _filesCount = files.Length;
            fixture.StartWatch();
            foreach (var file in files)
            {
                GraphBlock graphBlock = new GraphBlock();
                graphBlock.PoAHeader.AuthorityHash = uint256.One;
                var    graphString = File.ReadAllText(file.FullName);
                IGraph graph       = new Graph();
                graph.BaseUri = new Uri(String.Format("graph://lei.info/{0}", Path.GetFileNameWithoutExtension(file.Name)));
                graph.LoadFromString(graphString, new TurtleParser());
                MemoryStream graphStream = new MemoryStream();
                TextWriter   writer      = new StreamWriter(graphStream);
                graph.SaveToStream(writer, new CompressingTurtleWriter());
                var          graphBytes = graphStream.ToArray();
                GraphContent content    = new GraphContent()
                {
                    Version = 1,
                    Headers = new GraphContentHeaders(),
                    Graph   = graphBytes
                };
                content.Headers.AddHeader("GraphFormat", "ttl");
                graphBlock.AddGraph(content);
                graphBlock.Header.Nonce         = RandomUtils.GetUInt32();
                graphBlock.Header.Version       = 1;
                graphBlock.Header.Time          = (uint)(DateTime.UtcNow.Ticks - genesisDate.Ticks);
                graphBlock.Header.HashPrevBlock = (_smallBlockChain.LastOrDefault()?.GetHash()) ?? uint256.Zero;
                graphBlock.UpdateMerkleRoot();
                Assert.NotEqual(graphBlock.Header.GetPoWHash(), uint256.Zero);
                Assert.Equal(graphBlock.Header.HashMerkleRoot, graphBlock.GetMerkleRoot().Hash);
                _smallBlockChain.Add(graphBlock);
            }

            fixture.Log("Loaded {0} graphs into {1} blocks. Elapsed time: {2} miliseconds.", "LoadBlockChain", _filesCount, _smallBlockChain.Count, fixture.StopWatch());
        }