Skip to content

Commit 3f47fca

Browse files
committed
trie -> new CP mechanism: added trie checkpointing tests corresponding to the DB checkpoint tests
1 parent f182e4b commit 3f47fca

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

packages/client/lib/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export interface EthereumClientOptions {
1717

1818
/**
1919
* Database to store the state. Should be an abstract-leveldown compliant store.
20-
*
20+
*
2121
* Default: Database created by the Trie class
2222
*/
2323
stateDB?: LevelUp

packages/trie/test/checkpoint.spec.ts

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import tape from 'tape'
22
import { CheckpointTrie } from '../src'
3+
import { BatchDBOp } from '../src/db'
34

45
tape('testing checkpoints', function (tester) {
56
const it = tester.test
@@ -105,17 +106,75 @@ tape('testing checkpoints', function (tester) {
105106
t.end()
106107
})
107108

109+
const k1 = Buffer.from('k1')
110+
const v1 = Buffer.from('v1')
111+
const v12 = Buffer.from('v12')
112+
const v123 = Buffer.from('v123')
113+
108114
it('revert -> put', async function (t) {
109115
trie = new CheckpointTrie()
110116

111117
trie.checkpoint()
112-
const k1 = Buffer.from('k1')
113-
const v1 = Buffer.from('v1')
114118
await trie.put(k1, v1)
115119
t.deepEqual(await trie.get(k1), v1, 'before revert: v1 in trie')
116120
await trie.revert()
117121
t.deepEqual(await trie.get(k1), null, 'after revert: v1 removed')
118122

119123
t.end()
120124
})
125+
126+
it('revert -> put (update)', async (t) => {
127+
trie = new CheckpointTrie()
128+
129+
await trie.put(k1, v1)
130+
t.deepEqual(await trie.get(k1), v1, 'before CP: v1')
131+
trie.checkpoint()
132+
await trie.put(k1, v12)
133+
await trie.put(k1, v123)
134+
await trie.revert()
135+
t.deepEqual(await trie.get(k1), v1, 'after revert: v1')
136+
t.end()
137+
})
138+
139+
it('revert -> put (update) batched', async (t) => {
140+
const trie = new CheckpointTrie()
141+
await trie.put(k1, v1)
142+
t.deepEqual(await trie.get(k1), v1, 'before CP: v1')
143+
trie.checkpoint()
144+
const ops = [
145+
{ type: 'put', key: k1, value: v12 },
146+
{ type: 'put', key: k1, value: v123 },
147+
] as BatchDBOp[]
148+
await trie.batch(ops)
149+
await trie.revert()
150+
t.deepEqual(await trie.get(k1), v1, 'after revert: v1')
151+
t.end()
152+
})
153+
154+
it('Checkpointing: revert -> del', async (t) => {
155+
const trie = new CheckpointTrie()
156+
await trie.put(k1, v1)
157+
t.deepEqual(await trie.get(k1), v1, 'before CP: v1')
158+
trie.checkpoint()
159+
await trie.del(k1)
160+
t.deepEqual(await trie.get(k1), null, 'before revert: null')
161+
await trie.revert()
162+
t.deepEqual(await trie.get(k1), v1, 'after revert: v1')
163+
t.end()
164+
})
165+
166+
it('Checkpointing: nested checkpoints -> commit -> revert', async (t) => {
167+
const trie = new CheckpointTrie()
168+
await trie.put(k1, v1)
169+
t.deepEqual(await trie.get(k1), v1, 'before CP: v1')
170+
trie.checkpoint()
171+
await trie.put(k1, v12)
172+
trie.checkpoint()
173+
await trie.put(k1, v123)
174+
await trie.commit()
175+
t.deepEqual(await trie.get(k1), v123, 'after commit (second CP): v123')
176+
await trie.revert()
177+
t.deepEqual(await trie.get(k1), v1, 'after revert (first CP): v1')
178+
t.end()
179+
})
121180
})

0 commit comments

Comments
 (0)