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