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); }
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()); }
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()); }
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()); }
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()); }