public void TestBranchNodeRemainValue() { var store = new MemoryStore(); var mpt = new MPTTrie <TestKey, TestValue>(store.GetSnapshot(), null); Assert.IsTrue(mpt.Put("ac11".HexToBytes(), "ac11".HexToBytes())); Assert.IsTrue(mpt.Put("ac22".HexToBytes(), "ac22".HexToBytes())); Assert.IsTrue(mpt.Put("ac".HexToBytes(), "ac".HexToBytes())); Assert.IsTrue(mpt.Delete("ac11".HexToBytes())); mpt.Delete("ac22".HexToBytes()); Assert.IsNotNull(mpt["ac".HexToBytes()]); }
public void TestBranchDeleteDirty() { var snapshot = new TestSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, null); mpt.Put("10".HexToBytes(), "01".HexToBytes()); mpt.Put("20".HexToBytes(), "02".HexToBytes()); mpt.Put("30".HexToBytes(), "03".HexToBytes()); mpt.Commit(); Assert.AreEqual(7, snapshot.Size); var mpt1 = new MPTTrie <TestKey, TestValue>(snapshot, mpt.Root.Hash); mpt1.Delete("10".HexToBytes()); mpt1.Commit(); Assert.AreEqual(5, snapshot.Size); var mpt2 = new MPTTrie <TestKey, TestValue>(snapshot, mpt1.Root.Hash); mpt2.Delete("20".HexToBytes()); mpt2.Commit(); Assert.AreEqual(2, snapshot.Size); var mpt3 = new MPTTrie <TestKey, TestValue>(snapshot, mpt2.Root.Hash); mpt3.Delete("30".HexToBytes()); mpt3.Commit(); Assert.AreEqual(0, snapshot.Size); }
public void TestReference2() { var snapshot = new TestSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, null); mpt.Put("a101".HexToBytes(), "01".HexToBytes()); mpt.Put("a201".HexToBytes(), "01".HexToBytes()); mpt.Put("a301".HexToBytes(), "01".HexToBytes()); mpt.Commit(); Assert.AreEqual(4, snapshot.Size); mpt.Delete("a301".HexToBytes()); mpt.Commit(); Assert.AreEqual(4, snapshot.Size); mpt.Delete("a201".HexToBytes()); mpt.Commit(); Assert.AreEqual(2, snapshot.Size); Assert.AreEqual("01", mpt["a101".HexToBytes()].ToArray().ToHexString()); }
public void TestBranchNodeRemainValue() { var snapshot = new TestSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, null); Assert.IsTrue(mpt.Put("ac11".HexToBytes(), "ac11".HexToBytes())); Assert.IsTrue(mpt.Put("ac22".HexToBytes(), "ac22".HexToBytes())); Assert.IsTrue(mpt.Put("ac".HexToBytes(), "ac".HexToBytes())); mpt.Commit(); Assert.AreEqual(7, snapshot.Size); Assert.IsTrue(mpt.Delete("ac11".HexToBytes())); mpt.Commit(); Assert.AreEqual(5, snapshot.Size); Assert.IsTrue(mpt.Delete("ac22".HexToBytes())); Assert.IsNotNull(mpt["ac".HexToBytes()]); mpt.Commit(); Assert.AreEqual(2, snapshot.Size); }
public void TestDeleteRemainCanResolve() { var store = new MemoryStore(); var snapshot = store.GetSnapshot(); var mpt1 = new MPTTrie <TestKey, TestValue>(snapshot, null); Assert.IsTrue(mpt1.Put("ac00".HexToBytes(), "abcd".HexToBytes())); Assert.IsTrue(mpt1.Put("ac10".HexToBytes(), "abcd".HexToBytes())); mpt1.Commit(); snapshot.Commit(); var snapshot2 = store.GetSnapshot(); var mpt2 = new MPTTrie <TestKey, TestValue>(snapshot2, mpt1.Root.Hash); Assert.IsTrue(mpt2.Delete("ac00".HexToBytes())); mpt2.Commit(); snapshot2.Commit(); Assert.IsTrue(mpt2.Delete("ac10".HexToBytes())); }
public void TestTryDelete() { var b = new BranchNode(); var r = new ExtensionNode { Key = "0a0c".HexToBytes(), Next = b }; var v1 = new LeafNode { Value = "abcd".HexToBytes() }; var v2 = new LeafNode { Value = "2222".HexToBytes() }; var r1 = new ExtensionNode { Key = "0a0c0001".HexToBytes(), Next = v1 }; var l1 = new ExtensionNode { Key = new byte[] { 0x01 }, Next = v1 }; var l2 = new ExtensionNode { Key = new byte[] { 0x09 }, Next = v2 }; b.Children[0] = l1; b.Children[9] = l2; Assert.AreEqual("0xdea3ab46e9461e885ed7091c1e533e0a8030b248d39cbc638962394eaca0fbb3", r1.Hash.ToString()); Assert.AreEqual("0x93e8e1ffe2f83dd92fca67330e273bcc811bf64b8f8d9d1b25d5e7366b47d60d", r.Hash.ToString()); var mpt = new MPTTrie <TestKey, TestValue>(mptdb.GetSnapshot(), root.Hash); Assert.IsNotNull(mpt["ac99".HexToBytes()]); bool result = mpt.Delete("ac99".HexToBytes()); Assert.IsTrue(result); result = mpt.Delete("acae".HexToBytes()); Assert.IsTrue(result); Assert.AreEqual("0xdea3ab46e9461e885ed7091c1e533e0a8030b248d39cbc638962394eaca0fbb3", mpt.Root.Hash.ToString()); }
public void TestTryDelete() { var mpt = new MPTTrie <TestKey, TestValue>(mptdb.GetSnapshot(), root.Hash); Assert.IsNotNull(mpt["ac".HexToBytes()]); Assert.IsFalse(mpt.Delete("0c99".HexToBytes())); Assert.IsFalse(mpt.Delete(Array.Empty <byte>())); Assert.IsFalse(mpt.Delete("ac20".HexToBytes())); Assert.ThrowsException <InvalidOperationException>(() => mpt.Delete("acf1".HexToBytes())); Assert.IsTrue(mpt.Delete("ac".HexToBytes())); Assert.IsFalse(mpt.Delete("acae01".HexToBytes())); Assert.IsTrue(mpt.Delete("acae".HexToBytes())); Assert.AreEqual("0xcb06925428b7c727375c7fdd943a302fe2c818cf2e2eaf63a7932e3fd6cb3408", mpt.Root.Hash.ToString()); }
public void TestDeleteSameValue() { var store = new MemoryStore(); var snapshot = store.GetSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, null); Assert.IsTrue(mpt.Put("ac01".HexToBytes(), "abcd".HexToBytes())); Assert.IsTrue(mpt.Put("ac02".HexToBytes(), "abcd".HexToBytes())); Assert.IsNotNull(mpt["ac01".HexToBytes()]); Assert.IsNotNull(mpt["ac02".HexToBytes()]); mpt.Delete("ac01".HexToBytes()); Assert.IsNotNull(mpt["ac02".HexToBytes()]); mpt.Commit(); snapshot.Commit(); var mpt0 = new MPTTrie <TestKey, TestValue>(store.GetSnapshot(), mpt.Root.Hash); Assert.IsNotNull(mpt0["ac02".HexToBytes()]); }
public void TestExtensionDeleteDirty() { var snapshot = new TestSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, null); mpt.Put("a1".HexToBytes(), "01".HexToBytes()); mpt.Put("a2".HexToBytes(), "02".HexToBytes()); mpt.Commit(); Assert.AreEqual(4, snapshot.Size); var mpt1 = new MPTTrie <TestKey, TestValue>(snapshot, mpt.Root.Hash); mpt1.Delete("a1".HexToBytes()); mpt1.Commit(); Assert.AreEqual(2, snapshot.Size); var mpt2 = new MPTTrie <TestKey, TestValue>(snapshot, mpt1.Root.Hash); mpt2.Delete("a2".HexToBytes()); mpt2.Commit(); Assert.AreEqual(0, snapshot.Size); }
public void TestReference1() { var store = new MemoryStore(); var snapshot = store.GetSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, null); mpt.Put("a101".HexToBytes(), "01".HexToBytes()); mpt.Put("a201".HexToBytes(), "01".HexToBytes()); mpt.Put("a301".HexToBytes(), "01".HexToBytes()); mpt.Commit(); snapshot.Commit(); var snapshot1 = store.GetSnapshot(); var mpt1 = new MPTTrie <TestKey, TestValue>(snapshot1, mpt.Root.Hash); mpt1.Delete("a301".HexToBytes()); mpt1.Commit(); snapshot1.Commit(); var snapshot2 = store.GetSnapshot(); var mpt2 = new MPTTrie <TestKey, TestValue>(snapshot2, mpt1.Root.Hash); mpt2.Delete("a201".HexToBytes()); Assert.AreEqual("01", mpt2["a101".HexToBytes()]?.ToArray().ToHexString()); }
public void TestDeleteRemainCantResolve() { var b = MPTNode.NewBranch(); var r = MPTNode.NewExtension("0a0c".HexToBytes(), b); var v1 = MPTNode.NewLeaf("abcd".HexToBytes());//key=ac01 var v4 = MPTNode.NewLeaf(Encoding.ASCII.GetBytes("missing")); var e1 = MPTNode.NewExtension(new byte[] { 0x01 }, v1); var e4 = MPTNode.NewExtension(new byte[] { 0x01 }, v4); b.Children[0] = e1; b.Children[15] = MPTNode.NewHash(e4.Hash); var store = new MemoryStore(); PutToStore(store, r); PutToStore(store, b); PutToStore(store, e1); PutToStore(store, v1); var snapshot = store.GetSnapshot(); var mpt = new MPTTrie <TestKey, TestValue>(snapshot, r.Hash); Assert.ThrowsException <InvalidOperationException>(() => mpt.Delete("ac01".HexToBytes())); }