コード例 #1
0
        public void TrieShouldWorksWithLevelDB(int repeats)
        {
            const string path = "data";

            // leveldb
            FileDB.Destroy(path);
            FileDB db = new FileDB(path, true);

            // 랜덤 키 생성 : 키의 길이는 1 - 64
            List <byte[]> keys = new List <byte[]>();

            for (int i = 0; i < repeats; i++)
            {
                keys.Add(SecureRandom.GetBytes(SecureRandom.Next(1, 65)));
            }

            // for BaseTrie
            {
                ITrie trie = new Trie(db);
                foreach (var key in keys)
                {
                    trie.Put(key, key.Hash256());
                }

                H256 root = trie.Commit();
                trie.Dispose();

                ITrie trie2 = new Trie(db, root);
                foreach (var key in keys)
                {
                    Assert.Equal(key.Hash256(), trie2.Get(key));
                }
            }

            // for SecureTrie
            {
                ITrie trie = new SecureTrie(db);
                foreach (var key in keys)
                {
                    trie.Put(key, key.Hash256());
                }

                H256 root = trie.Commit();
                trie.Dispose();

                ITrie trie2 = new SecureTrie(db, root);
                foreach (var key in keys)
                {
                    Assert.Equal(key.Hash256(), trie2.Get(key));
                }
            }
        }
コード例 #2
0
        public void SecureTrieShouldWorks(int repeats)
        {
            // 랜덤 키 생성 : 키의 길이는 1 - 64
            List <byte[]> keys = new List <byte[]>();

            for (int i = 0; i < repeats; i++)
            {
                keys.Add(SecureRandom.GetBytes(SecureRandom.Next(1, 65)));
            }

            // 1. 정순으로 입력
            ITrie trie = new SecureTrie();

            for (int i = 0; i < keys.Count; i++)
            {
                trie.Put(keys[i], keys[i].Hash256());
            }

            // 1. 정순 입력값 확인
            for (int i = 0; i < keys.Count; i++)
            {
                Assert.Equal(keys[i].Hash256(), trie.Get(keys[i]));
            }

            // 2. 역순으로 입력
            ITrie trie2 = new SecureTrie();

            for (int i = keys.Count - 1; i >= 0; --i)
            {
                trie2.Put(keys[i], keys[i].Hash256());
            }

            // 2. 역순 입력값 확인
            for (int i = 0; i < keys.Count; i++)
            {
                Assert.Equal(keys[i].Hash256(), trie2.Get(keys[i]));
            }

            // 2. trie1 == trie2
            Assert.Equal(trie.RootHash, trie2.RootHash);
        }