Exemplo n.º 1
0
        public void On_adding_one_leaf_count_goes_up_to_1()
        {
            MerkleTree merkleTree = new ShaMerkleTree(new MemDb());

            merkleTree.Insert(_testLeaves[0]);
            merkleTree.Count.Should().Be(1);
        }
Exemplo n.º 2
0
        public async Task Can_safely_insert_concurrently()
        {
            MerkleTree merkleTree           = new ShaMerkleTree(new MemDb());
            uint       iterations           = 1000;
            uint       concurrentTasksCount = 8;
            Action     keepAdding           = () =>
            {
                for (int i = 0; i < iterations; i++)
                {
                    merkleTree.Insert(_testLeaves[0]);
                }
            };

            Task[] tasks = new Task[concurrentTasksCount];
            for (int i = 0; i < tasks.Length; i++)
            {
                tasks[i] = new Task(keepAdding);
            }

            for (int i = 0; i < tasks.Length; i++)
            {
                tasks[i].Start();
            }

            await Task.WhenAll(tasks);

            merkleTree.Count.Should().Be(concurrentTasksCount * iterations);
        }
Exemplo n.º 3
0
        public void When_inserting_more_leaves_count_keeps_growing(int numberOfLeaves)
        {
            MerkleTree merkleTree = new ShaMerkleTree(new MemDb());

            for (uint i = 0; i < numberOfLeaves; i++)
            {
                merkleTree.Insert(_testLeaves[i]);
                merkleTree.Count.Should().Be(i + 1);
            }
        }
Exemplo n.º 4
0
        public void Can_restore_count_from_the_database()
        {
            MemDb      memDb      = new MemDb();
            MerkleTree merkleTree = new ShaMerkleTree(memDb);

            merkleTree.Insert(_testLeaves[0]);

            MerkleTree merkleTreeRestored = new ShaMerkleTree(memDb);

            merkleTreeRestored.Count.Should().Be(1);
        }
Exemplo n.º 5
0
        public void Can_get_proof_on_a_populated_trie_on_an_index(uint nodesCount)
        {
            MerkleTree merkleTree = new ShaMerkleTree(new MemDb());

            for (int i = 0; i < nodesCount; i++)
            {
                merkleTree.Insert(_testLeaves[0]);
            }

            MerkleTreeNode[] proof = merkleTree.GetProof(0);
            proof.Should().HaveCount(MerkleTree.TreeDepth - 1);

            for (int proofLevel = 0; proofLevel < MerkleTree.TreeDepth - 1; proofLevel++)
            {
                if (nodesCount > 1 >> proofLevel)
                {
                    proof[proofLevel].Should().NotBe(ShaMerkleTree.ZeroHashes[proofLevel], proofLevel.ToString());
                }
                else
                {
                    proof[proofLevel].Hash.Should().Be(Bytes32.Wrap(ShaMerkleTree.ZeroHashes[proofLevel]), proofLevel.ToString());
                }
            }
        }
Exemplo n.º 6
0
        public void Initially_count_is_0()
        {
            MerkleTree merkleTree = new ShaMerkleTree(new MemDb());

            merkleTree.Count.Should().Be(0);
        }
Exemplo n.º 7
0
        public void Throws_on_get_proof_on_the_leaf_index_out_of_bounds(uint leafIndex)
        {
            MerkleTree merkleTree = new ShaMerkleTree(new MemDb());

            Assert.Throws <IndexOutOfRangeException>(() => merkleTree.GetProof(leafIndex));
        }