@aztec/kv-store 0.76.4-devnet-test-rc3 → 0.77.0-testnet-ignition.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +5 -7
- package/dest/indexeddb/array.d.ts +3 -3
- package/dest/indexeddb/array.d.ts.map +1 -1
- package/dest/indexeddb/array.js +44 -36
- package/dest/indexeddb/index.d.ts +1 -1
- package/dest/indexeddb/index.d.ts.map +1 -1
- package/dest/indexeddb/index.js +1 -4
- package/dest/indexeddb/map.d.ts +4 -4
- package/dest/indexeddb/map.d.ts.map +1 -1
- package/dest/indexeddb/map.js +72 -43
- package/dest/indexeddb/set.d.ts +4 -4
- package/dest/indexeddb/set.d.ts.map +1 -1
- package/dest/indexeddb/set.js +3 -4
- package/dest/indexeddb/singleton.d.ts +3 -3
- package/dest/indexeddb/singleton.d.ts.map +1 -1
- package/dest/indexeddb/singleton.js +17 -22
- package/dest/indexeddb/store.d.ts +8 -8
- package/dest/indexeddb/store.d.ts.map +1 -1
- package/dest/indexeddb/store.js +97 -93
- package/dest/interfaces/array.js +3 -2
- package/dest/interfaces/array_test_suite.d.ts +1 -1
- package/dest/interfaces/array_test_suite.d.ts.map +1 -1
- package/dest/interfaces/array_test_suite.js +29 -25
- package/dest/interfaces/common.d.ts +1 -1
- package/dest/interfaces/common.d.ts.map +1 -1
- package/dest/interfaces/common.js +3 -2
- package/dest/interfaces/counter.d.ts +1 -1
- package/dest/interfaces/counter.d.ts.map +1 -1
- package/dest/interfaces/counter.js +1 -2
- package/dest/interfaces/index.d.ts +1 -1
- package/dest/interfaces/index.d.ts.map +1 -1
- package/dest/interfaces/index.js +0 -1
- package/dest/interfaces/map.d.ts +1 -1
- package/dest/interfaces/map.d.ts.map +1 -1
- package/dest/interfaces/map.js +3 -2
- package/dest/interfaces/map_test_suite.d.ts +1 -1
- package/dest/interfaces/map_test_suite.d.ts.map +1 -1
- package/dest/interfaces/map_test_suite.js +87 -42
- package/dest/interfaces/set.d.ts +1 -1
- package/dest/interfaces/set.d.ts.map +1 -1
- package/dest/interfaces/set.js +1 -2
- package/dest/interfaces/set_test_suite.d.ts +1 -1
- package/dest/interfaces/set_test_suite.d.ts.map +1 -1
- package/dest/interfaces/set_test_suite.js +59 -22
- package/dest/interfaces/singleton.js +4 -2
- package/dest/interfaces/singleton_test_suite.d.ts +1 -1
- package/dest/interfaces/singleton_test_suite.d.ts.map +1 -1
- package/dest/interfaces/singleton_test_suite.js +7 -10
- package/dest/interfaces/store.d.ts +6 -6
- package/dest/interfaces/store.d.ts.map +1 -1
- package/dest/interfaces/store.js +1 -2
- package/dest/interfaces/store_test_suite.d.ts +1 -1
- package/dest/interfaces/store_test_suite.d.ts.map +1 -1
- package/dest/interfaces/store_test_suite.js +6 -9
- package/dest/interfaces/utils.d.ts +1 -1
- package/dest/interfaces/utils.d.ts.map +1 -1
- package/dest/interfaces/utils.js +12 -15
- package/dest/lmdb/array.d.ts +2 -2
- package/dest/lmdb/array.d.ts.map +1 -1
- package/dest/lmdb/array.js +46 -41
- package/dest/lmdb/counter.d.ts +3 -3
- package/dest/lmdb/counter.d.ts.map +1 -1
- package/dest/lmdb/counter.js +18 -24
- package/dest/lmdb/index.d.ts +1 -1
- package/dest/lmdb/index.d.ts.map +1 -1
- package/dest/lmdb/index.js +2 -6
- package/dest/lmdb/map.d.ts +3 -3
- package/dest/lmdb/map.d.ts.map +1 -1
- package/dest/lmdb/map.js +90 -68
- package/dest/lmdb/set.d.ts +3 -3
- package/dest/lmdb/set.d.ts.map +1 -1
- package/dest/lmdb/set.js +4 -5
- package/dest/lmdb/singleton.d.ts +2 -2
- package/dest/lmdb/singleton.d.ts.map +1 -1
- package/dest/lmdb/singleton.js +13 -14
- package/dest/lmdb/store.d.ts +7 -7
- package/dest/lmdb/store.d.ts.map +1 -1
- package/dest/lmdb/store.js +125 -134
- package/dest/lmdb-v2/array.d.ts +18 -0
- package/dest/lmdb-v2/array.d.ts.map +1 -0
- package/dest/lmdb-v2/array.js +101 -0
- package/dest/lmdb-v2/factory.d.ts +1 -1
- package/dest/lmdb-v2/factory.d.ts.map +1 -1
- package/dest/lmdb-v2/factory.js +30 -21
- package/dest/lmdb-v2/index.js +0 -1
- package/dest/lmdb-v2/map.js +82 -85
- package/dest/lmdb-v2/message.js +6 -7
- package/dest/lmdb-v2/read_transaction.js +65 -53
- package/dest/lmdb-v2/singleton.d.ts +1 -1
- package/dest/lmdb-v2/singleton.d.ts.map +1 -1
- package/dest/lmdb-v2/singleton.js +7 -5
- package/dest/lmdb-v2/store.d.ts +1 -1
- package/dest/lmdb-v2/store.d.ts.map +1 -1
- package/dest/lmdb-v2/store.js +31 -28
- package/dest/lmdb-v2/utils.d.ts +1 -1
- package/dest/lmdb-v2/utils.d.ts.map +1 -1
- package/dest/lmdb-v2/utils.js +30 -30
- package/dest/lmdb-v2/write_transaction.js +130 -110
- package/dest/stores/index.js +0 -1
- package/dest/stores/l2_tips_store.d.ts +2 -2
- package/dest/stores/l2_tips_store.d.ts.map +1 -1
- package/dest/stores/l2_tips_store.js +26 -12
- package/dest/utils.d.ts +3 -3
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +3 -7
- package/package.json +8 -11
- package/src/config.ts +1 -1
- package/src/indexeddb/array.ts +3 -3
- package/src/indexeddb/index.ts +1 -1
- package/src/indexeddb/map.ts +4 -4
- package/src/indexeddb/set.ts +4 -4
- package/src/indexeddb/singleton.ts +3 -3
- package/src/indexeddb/store.ts +8 -8
- package/src/interfaces/array_test_suite.ts +2 -2
- package/src/interfaces/common.ts +1 -1
- package/src/interfaces/counter.ts +1 -1
- package/src/interfaces/index.ts +1 -1
- package/src/interfaces/map.ts +1 -1
- package/src/interfaces/map_test_suite.ts +3 -3
- package/src/interfaces/set.ts +1 -1
- package/src/interfaces/set_test_suite.ts +3 -3
- package/src/interfaces/singleton_test_suite.ts +2 -2
- package/src/interfaces/store.ts +12 -12
- package/src/interfaces/store_test_suite.ts +2 -2
- package/src/interfaces/utils.ts +1 -1
- package/src/lmdb/array.ts +2 -2
- package/src/lmdb/counter.ts +3 -3
- package/src/lmdb/index.ts +1 -1
- package/src/lmdb/map.ts +3 -3
- package/src/lmdb/set.ts +3 -3
- package/src/lmdb/singleton.ts +2 -2
- package/src/lmdb/store.ts +14 -14
- package/src/lmdb-v2/array.ts +115 -0
- package/src/lmdb-v2/factory.ts +9 -5
- package/src/lmdb-v2/map.ts +1 -1
- package/src/lmdb-v2/singleton.ts +1 -1
- package/src/lmdb-v2/store.ts +4 -3
- package/src/lmdb-v2/utils.ts +1 -1
- package/src/stores/l2_tips_store.ts +10 -10
- package/src/utils.ts +4 -4
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
var _WriteTransaction_instances, _WriteTransaction_iterate;
|
|
2
|
-
import { __classPrivateFieldGet } from "tslib";
|
|
3
1
|
import { Database, LMDBMessageType } from './message.js';
|
|
4
2
|
import { ReadTransaction } from './read_transaction.js';
|
|
5
|
-
import { dedupeSortedArray, findInSortedArray, findIndexInSortedArray, insertIntoSortedArray, keyCmp, merge, removeAnyOf, removeFromSortedArray, singleKeyCmp
|
|
3
|
+
import { dedupeSortedArray, findInSortedArray, findIndexInSortedArray, insertIntoSortedArray, keyCmp, merge, removeAnyOf, removeFromSortedArray, singleKeyCmp } from './utils.js';
|
|
6
4
|
export class WriteTransaction extends ReadTransaction {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
addEntries: [],
|
|
17
|
-
removeEntries: [],
|
|
18
|
-
};
|
|
19
|
-
}
|
|
5
|
+
// exposed for tests
|
|
6
|
+
dataBatch = {
|
|
7
|
+
addEntries: [],
|
|
8
|
+
removeEntries: []
|
|
9
|
+
};
|
|
10
|
+
indexBatch = {
|
|
11
|
+
addEntries: [],
|
|
12
|
+
removeEntries: []
|
|
13
|
+
};
|
|
20
14
|
set(key, value) {
|
|
21
15
|
this.assertIsOpen();
|
|
22
16
|
const addEntry = findInSortedArray(this.dataBatch.addEntries, key, singleKeyCmp);
|
|
23
17
|
if (!addEntry) {
|
|
24
|
-
insertIntoSortedArray(this.dataBatch.addEntries, [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
insertIntoSortedArray(this.dataBatch.addEntries, [
|
|
19
|
+
key,
|
|
20
|
+
[
|
|
21
|
+
value
|
|
22
|
+
]
|
|
23
|
+
], keyCmp);
|
|
24
|
+
} else {
|
|
25
|
+
addEntry[1] = [
|
|
26
|
+
value
|
|
27
|
+
];
|
|
28
28
|
}
|
|
29
29
|
const removeEntryIndex = findIndexInSortedArray(this.dataBatch.removeEntries, key, singleKeyCmp);
|
|
30
30
|
if (removeEntryIndex > -1) {
|
|
@@ -35,7 +35,10 @@ export class WriteTransaction extends ReadTransaction {
|
|
|
35
35
|
remove(key) {
|
|
36
36
|
const removeEntryIndex = findIndexInSortedArray(this.dataBatch.removeEntries, key, singleKeyCmp);
|
|
37
37
|
if (removeEntryIndex === -1) {
|
|
38
|
-
this.dataBatch.removeEntries.push([
|
|
38
|
+
this.dataBatch.removeEntries.push([
|
|
39
|
+
key,
|
|
40
|
+
null
|
|
41
|
+
]);
|
|
39
42
|
}
|
|
40
43
|
const addEntryIndex = findIndexInSortedArray(this.dataBatch.addEntries, key, singleKeyCmp);
|
|
41
44
|
if (addEntryIndex > -1) {
|
|
@@ -73,9 +76,11 @@ export class WriteTransaction extends ReadTransaction {
|
|
|
73
76
|
if (addEntries) {
|
|
74
77
|
merge(addEntries[1], values, Buffer.compare);
|
|
75
78
|
dedupeSortedArray(addEntries[1], Buffer.compare);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
} else {
|
|
80
|
+
insertIntoSortedArray(this.indexBatch.addEntries, [
|
|
81
|
+
key,
|
|
82
|
+
values
|
|
83
|
+
], keyCmp);
|
|
79
84
|
}
|
|
80
85
|
return Promise.resolve();
|
|
81
86
|
}
|
|
@@ -90,9 +95,11 @@ export class WriteTransaction extends ReadTransaction {
|
|
|
90
95
|
}
|
|
91
96
|
if (removeEntries) {
|
|
92
97
|
removeEntries[1] = null;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
} else {
|
|
99
|
+
insertIntoSortedArray(this.indexBatch.removeEntries, [
|
|
100
|
+
key,
|
|
101
|
+
null
|
|
102
|
+
], keyCmp);
|
|
96
103
|
}
|
|
97
104
|
return Promise.resolve();
|
|
98
105
|
}
|
|
@@ -103,12 +110,14 @@ export class WriteTransaction extends ReadTransaction {
|
|
|
103
110
|
}
|
|
104
111
|
}
|
|
105
112
|
if (removeEntries) {
|
|
106
|
-
removeEntries[1]
|
|
113
|
+
removeEntries[1] ??= [];
|
|
107
114
|
merge(removeEntries[1], values, Buffer.compare);
|
|
108
115
|
dedupeSortedArray(removeEntries[1], Buffer.compare);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
116
|
+
} else {
|
|
117
|
+
insertIntoSortedArray(this.indexBatch.removeEntries, [
|
|
118
|
+
key,
|
|
119
|
+
values
|
|
120
|
+
], keyCmp);
|
|
112
121
|
}
|
|
113
122
|
return Promise.resolve();
|
|
114
123
|
}
|
|
@@ -130,10 +139,10 @@ export class WriteTransaction extends ReadTransaction {
|
|
|
130
139
|
return results;
|
|
131
140
|
}
|
|
132
141
|
async *iterate(startKey, endKey, reverse, limit) {
|
|
133
|
-
yield*
|
|
142
|
+
yield* this.#iterate(super.iterate(startKey, endKey, reverse), this.dataBatch, startKey, endKey, reverse, limit, (committed, toAdd)=>toAdd.length > 0 ? toAdd[0] : committed, (vals)=>vals[0]);
|
|
134
143
|
}
|
|
135
144
|
async *iterateIndex(startKey, endKey, reverse, limit) {
|
|
136
|
-
yield*
|
|
145
|
+
yield* this.#iterate(super.iterateIndex(startKey, endKey, reverse), this.indexBatch, startKey, endKey, reverse, limit, (committed, toAdd, toRemove)=>{
|
|
137
146
|
if (toAdd.length > 0) {
|
|
138
147
|
merge(committed, toAdd, Buffer.compare);
|
|
139
148
|
dedupeSortedArray(committed, Buffer.compare);
|
|
@@ -142,93 +151,104 @@ export class WriteTransaction extends ReadTransaction {
|
|
|
142
151
|
removeAnyOf(committed, toRemove, Buffer.compare);
|
|
143
152
|
}
|
|
144
153
|
return committed;
|
|
145
|
-
}, vals
|
|
154
|
+
}, (vals)=>vals);
|
|
146
155
|
}
|
|
147
|
-
async
|
|
156
|
+
async *#iterate(iterator, batch, startKey, endKey, reverse = false, limit, merge, map) {
|
|
148
157
|
this.assertIsOpen();
|
|
149
|
-
this
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const uncommittedEntries = [...batch.addEntries];
|
|
162
|
-
// used to check we're in the right order when comparing between a key and uncommittedEntries
|
|
163
|
-
let cmpDirection = -1;
|
|
164
|
-
if (reverse) {
|
|
165
|
-
cmpDirection = 1;
|
|
166
|
-
uncommittedEntries.reverse();
|
|
167
|
-
}
|
|
168
|
-
let uncommittedEntriesIdx = 0;
|
|
169
|
-
while (uncommittedEntriesIdx < uncommittedEntries.length) {
|
|
170
|
-
const entry = uncommittedEntries[uncommittedEntriesIdx];
|
|
171
|
-
// go to the first key in our cache that would be captured by the iterator
|
|
172
|
-
if (Buffer.compare(entry[0], startKey) !== cmpDirection) {
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
uncommittedEntriesIdx++;
|
|
176
|
-
}
|
|
177
|
-
let count = 0;
|
|
178
|
-
// helper to early return if we've reached our limit
|
|
179
|
-
const checkLimit = typeof limit === 'number' ? () => count < limit : () => true;
|
|
180
|
-
for await (const [key, values] of iterator) {
|
|
181
|
-
// yield every key that we have cached that's captured by the iterator
|
|
182
|
-
while (uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()) {
|
|
158
|
+
// make a copy of this in case we're running in reverse
|
|
159
|
+
const uncommittedEntries = [
|
|
160
|
+
...batch.addEntries
|
|
161
|
+
];
|
|
162
|
+
// used to check we're in the right order when comparing between a key and uncommittedEntries
|
|
163
|
+
let cmpDirection = -1;
|
|
164
|
+
if (reverse) {
|
|
165
|
+
cmpDirection = 1;
|
|
166
|
+
uncommittedEntries.reverse();
|
|
167
|
+
}
|
|
168
|
+
let uncommittedEntriesIdx = 0;
|
|
169
|
+
while(uncommittedEntriesIdx < uncommittedEntries.length){
|
|
183
170
|
const entry = uncommittedEntries[uncommittedEntriesIdx];
|
|
184
|
-
|
|
171
|
+
// go to the first key in our cache that would be captured by the iterator
|
|
172
|
+
if (Buffer.compare(entry[0], startKey) !== cmpDirection) {
|
|
185
173
|
break;
|
|
186
174
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
175
|
+
uncommittedEntriesIdx++;
|
|
176
|
+
}
|
|
177
|
+
let count = 0;
|
|
178
|
+
// helper to early return if we've reached our limit
|
|
179
|
+
const checkLimit = typeof limit === 'number' ? ()=>count < limit : ()=>true;
|
|
180
|
+
for await (const [key, values] of iterator){
|
|
181
|
+
// yield every key that we have cached that's captured by the iterator
|
|
182
|
+
while(uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()){
|
|
183
|
+
const entry = uncommittedEntries[uncommittedEntriesIdx];
|
|
184
|
+
if (endKey && Buffer.compare(entry[0], endKey) !== cmpDirection) {
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
if (Buffer.compare(entry[0], key) === cmpDirection) {
|
|
188
|
+
count++;
|
|
189
|
+
yield [
|
|
190
|
+
entry[0],
|
|
191
|
+
map(entry[1])
|
|
192
|
+
];
|
|
193
|
+
} else {
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
uncommittedEntriesIdx++;
|
|
190
197
|
}
|
|
191
|
-
|
|
198
|
+
if (!checkLimit()) {
|
|
192
199
|
break;
|
|
193
200
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
// we
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
201
|
+
const toRemove = findInSortedArray(batch.removeEntries, key, singleKeyCmp);
|
|
202
|
+
// at this point we've either exhausted all uncommitted entries,
|
|
203
|
+
// we reached a key strictly greater/smaller than `key`
|
|
204
|
+
// or we found the key itself
|
|
205
|
+
// check if it's the key and use the uncommitted value
|
|
206
|
+
let toAdd = [];
|
|
207
|
+
if (uncommittedEntriesIdx < uncommittedEntries.length && Buffer.compare(uncommittedEntries[uncommittedEntriesIdx][0], key) === 0) {
|
|
208
|
+
toAdd = uncommittedEntries[uncommittedEntriesIdx][1];
|
|
209
|
+
uncommittedEntriesIdx++;
|
|
210
|
+
}
|
|
211
|
+
if (toRemove && !toRemove[1]) {
|
|
212
|
+
continue;
|
|
213
|
+
} else {
|
|
214
|
+
const mergedValues = merge(values, toAdd, toRemove?.[1] ?? []);
|
|
215
|
+
if (mergedValues) {
|
|
216
|
+
count++;
|
|
217
|
+
yield [
|
|
218
|
+
key,
|
|
219
|
+
mergedValues
|
|
220
|
+
];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
214
223
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
224
|
+
// emit all the uncommitted data that would be captured by this iterator
|
|
225
|
+
while(uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()){
|
|
226
|
+
const entry = uncommittedEntries[uncommittedEntriesIdx];
|
|
227
|
+
if (endKey && Buffer.compare(entry[0], endKey) !== cmpDirection) {
|
|
228
|
+
break;
|
|
220
229
|
}
|
|
230
|
+
count++;
|
|
231
|
+
yield [
|
|
232
|
+
entry[0],
|
|
233
|
+
map(entry[1])
|
|
234
|
+
];
|
|
235
|
+
uncommittedEntriesIdx++;
|
|
221
236
|
}
|
|
222
237
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
238
|
+
async commit() {
|
|
239
|
+
this.assertIsOpen();
|
|
240
|
+
this.close();
|
|
241
|
+
await this.channel.sendMessage(LMDBMessageType.BATCH, {
|
|
242
|
+
batches: new Map([
|
|
243
|
+
[
|
|
244
|
+
Database.DATA,
|
|
245
|
+
this.dataBatch
|
|
246
|
+
],
|
|
247
|
+
[
|
|
248
|
+
Database.INDEX,
|
|
249
|
+
this.indexBatch
|
|
250
|
+
]
|
|
251
|
+
])
|
|
252
|
+
});
|
|
232
253
|
}
|
|
233
|
-
}
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfdHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi12Mi93cml0ZV90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBYyxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixLQUFLLEVBQ0wsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixZQUFZLEdBQ2IsTUFBTSxZQUFZLENBQUM7QUFFcEIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFBckQ7OztRQUNFLG9CQUFvQjtRQUNKLGNBQVMsR0FBVTtZQUNqQyxVQUFVLEVBQUUsRUFBRTtZQUNkLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUM7UUFDYyxlQUFVLEdBQVU7WUFDbEMsVUFBVSxFQUFFLEVBQUU7WUFDZCxhQUFhLEVBQUUsRUFBRTtTQUNsQixDQUFDO0lBa1NKLENBQUM7SUFoU0MsR0FBRyxDQUFDLEdBQWUsRUFBRSxLQUFpQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxD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
|
|
254
|
+
}
|
package/dest/stores/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { L2BlockStreamEvent, L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider, L2Tips } from '@aztec/stdlib/block';
|
|
2
|
+
import type { AztecAsyncKVStore } from '../interfaces/store.js';
|
|
3
3
|
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
4
4
|
export declare class L2TipsStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
5
5
|
private readonly l2TipsStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l2_tips_store.d.ts","sourceRoot":"","sources":["../../src/stores/l2_tips_store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"l2_tips_store.d.ts","sourceRoot":"","sources":["../../src/stores/l2_tips_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,yBAAyB,EACzB,8BAA8B,EAE9B,MAAM,EACP,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,oEAAoE;AACpE,qBAAa,WAAY,YAAW,yBAAyB,EAAE,8BAA8B;IAC3F,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAgC;gBAEvD,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM;IAKhD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIrD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YAQ3B,QAAQ;IAYT,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB9E"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
this.
|
|
1
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */ export class L2TipsStore {
|
|
2
|
+
l2TipsStore;
|
|
3
|
+
l2BlockHashesStore;
|
|
4
|
+
constructor(store, namespace){
|
|
5
|
+
this.l2TipsStore = store.openMap([
|
|
6
|
+
namespace,
|
|
7
|
+
'l2_tips'
|
|
8
|
+
].join('_'));
|
|
9
|
+
this.l2BlockHashesStore = store.openMap([
|
|
10
|
+
namespace,
|
|
11
|
+
'l2_block_hashes'
|
|
12
|
+
].join('_'));
|
|
6
13
|
}
|
|
7
14
|
getL2BlockHash(number) {
|
|
8
15
|
return this.l2BlockHashesStore.getAsync(number);
|
|
@@ -11,24 +18,30 @@ export class L2TipsStore {
|
|
|
11
18
|
return {
|
|
12
19
|
latest: await this.getL2Tip('latest'),
|
|
13
20
|
finalized: await this.getL2Tip('finalized'),
|
|
14
|
-
proven: await this.getL2Tip('proven')
|
|
21
|
+
proven: await this.getL2Tip('proven')
|
|
15
22
|
};
|
|
16
23
|
}
|
|
17
24
|
async getL2Tip(tag) {
|
|
18
25
|
const blockNumber = await this.l2TipsStore.getAsync(tag);
|
|
19
26
|
if (blockNumber === undefined || blockNumber === 0) {
|
|
20
|
-
return {
|
|
27
|
+
return {
|
|
28
|
+
number: 0,
|
|
29
|
+
hash: undefined
|
|
30
|
+
};
|
|
21
31
|
}
|
|
22
32
|
const blockHash = await this.l2BlockHashesStore.getAsync(blockNumber);
|
|
23
33
|
if (!blockHash) {
|
|
24
34
|
throw new Error(`Block hash not found for block number ${blockNumber}`);
|
|
25
35
|
}
|
|
26
|
-
return {
|
|
36
|
+
return {
|
|
37
|
+
number: blockNumber,
|
|
38
|
+
hash: blockHash
|
|
39
|
+
};
|
|
27
40
|
}
|
|
28
41
|
async handleBlockStreamEvent(event) {
|
|
29
|
-
switch
|
|
42
|
+
switch(event.type){
|
|
30
43
|
case 'blocks-added':
|
|
31
|
-
for (const block of event.blocks)
|
|
44
|
+
for (const block of event.blocks){
|
|
32
45
|
await this.l2BlockHashesStore.set(block.number, (await block.header.hash()).toString());
|
|
33
46
|
}
|
|
34
47
|
await this.l2TipsStore.set('latest', event.blocks.at(-1).number);
|
|
@@ -41,11 +54,12 @@ export class L2TipsStore {
|
|
|
41
54
|
break;
|
|
42
55
|
case 'chain-finalized':
|
|
43
56
|
await this.l2TipsStore.set('finalized', event.blockNumber);
|
|
44
|
-
for await (const key of this.l2BlockHashesStore.keysAsync({
|
|
57
|
+
for await (const key of this.l2BlockHashesStore.keysAsync({
|
|
58
|
+
end: event.blockNumber
|
|
59
|
+
})){
|
|
45
60
|
await this.l2BlockHashesStore.delete(key);
|
|
46
61
|
}
|
|
47
62
|
break;
|
|
48
63
|
}
|
|
49
64
|
}
|
|
50
65
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZXMvbDJfdGlwc19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFBWSxLQUF3QixFQUFFLFNBQWlCO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE9BQU87WUFDTCxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUMzQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBZTtRQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBeUI7UUFDM0QsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxjQUFjO2dCQUNqQixLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLGNBQWM7Z0JBQ2pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsTUFBTTtZQUNSLEtBQUssY0FBYztnQkFDakIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNO1lBQ1IsS0FBSyxpQkFBaUI7Z0JBQ3BCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUN0RixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
package/dest/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
+
import type { AztecAsyncKVStore, AztecKVStore } from './interfaces/store.js';
|
|
4
4
|
/**
|
|
5
5
|
* Clears the store if the rollup address does not match the one stored in the database.
|
|
6
6
|
* This is to prevent data from being accidentally shared between different rollup instances.
|
package/dest/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG7E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,YAAY,GAAG,iBAAiB,EACjF,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,UAAU,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
|
package/dest/utils.js
CHANGED
|
@@ -5,24 +5,20 @@ import { isSyncStore } from './interfaces/utils.js';
|
|
|
5
5
|
* @param store - The store to check
|
|
6
6
|
* @param rollupAddress - The ETH address of the rollup contract
|
|
7
7
|
* @returns A promise that resolves when the store is cleared, or rejects if the rollup address does not match
|
|
8
|
-
*/
|
|
9
|
-
export async function initStoreForRollup(store, rollupAddress, log) {
|
|
8
|
+
*/ export async function initStoreForRollup(store, rollupAddress, log) {
|
|
10
9
|
if (!rollupAddress) {
|
|
11
10
|
throw new Error('Rollup address is required');
|
|
12
11
|
}
|
|
13
12
|
const rollupAddressValue = store.openSingleton('rollupAddress');
|
|
14
13
|
const rollupAddressString = rollupAddress.toString();
|
|
15
|
-
const storedRollupAddressString = isSyncStore(store)
|
|
16
|
-
? rollupAddressValue.get()
|
|
17
|
-
: await rollupAddressValue.getAsync();
|
|
14
|
+
const storedRollupAddressString = isSyncStore(store) ? rollupAddressValue.get() : await rollupAddressValue.getAsync();
|
|
18
15
|
if (typeof storedRollupAddressString !== 'undefined' && storedRollupAddressString !== rollupAddressString) {
|
|
19
16
|
log?.warn(`Rollup address mismatch. Clearing entire database...`, {
|
|
20
17
|
expected: rollupAddressString,
|
|
21
|
-
found: storedRollupAddressString
|
|
18
|
+
found: storedRollupAddressString
|
|
22
19
|
});
|
|
23
20
|
await store.clear();
|
|
24
21
|
}
|
|
25
22
|
await rollupAddressValue.set(rollupAddressString);
|
|
26
23
|
return store;
|
|
27
24
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLEtBQVEsRUFDUixhQUF5QixFQUN6QixHQUFZO0lBRVosSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFxQyxlQUFlLENBQUMsQ0FBQztJQUNwRyxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyRCxNQUFNLHlCQUF5QixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbEQsQ0FBQyxDQUFFLGtCQUF5RSxDQUFDLEdBQUcsRUFBRTtRQUNsRixDQUFDLENBQUMsTUFBTyxrQkFBOEUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVyRyxJQUFJLE9BQU8seUJBQXlCLEtBQUssV0FBVyxJQUFJLHlCQUF5QixLQUFLLG1CQUFtQixFQUFFLENBQUM7UUFDMUcsR0FBRyxFQUFFLElBQUksQ0FBQyxzREFBc0QsRUFBRTtZQUNoRSxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLEtBQUssRUFBRSx5QkFBeUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sa0JBQWtCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbEQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/kv-store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.77.0-testnet-ignition.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/interfaces/index.js",
|
|
@@ -13,31 +13,28 @@
|
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "yarn clean && tsc -b",
|
|
15
15
|
"build:dev": "tsc -b --watch",
|
|
16
|
-
"clean:cpp": "rm -rf $(git rev-parse --show-toplevel)/barretenberg/cpp/build-pic",
|
|
17
16
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
18
17
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
19
18
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
20
|
-
"test:node": "NODE_NO_WARNINGS=1 mocha --config ./.mocharc.json
|
|
19
|
+
"test:node": "NODE_NO_WARNINGS=1 mocha --config ./.mocharc.json",
|
|
21
20
|
"test:browser": "wtr --config ./web-test-runner.config.mjs",
|
|
22
|
-
"test": "yarn test:node && yarn test:browser && true"
|
|
23
|
-
"generate": "mkdir -p build && cp -v ../../barretenberg/cpp/build-pic/lib/nodejs_module.node build"
|
|
21
|
+
"test": "yarn test:node && yarn test:browser && true"
|
|
24
22
|
},
|
|
25
23
|
"inherits": [
|
|
26
24
|
"../package.common.json",
|
|
27
25
|
"./package.local.json"
|
|
28
26
|
],
|
|
29
27
|
"dependencies": {
|
|
30
|
-
"@aztec/
|
|
31
|
-
"@aztec/
|
|
32
|
-
"@aztec/
|
|
33
|
-
"@aztec/
|
|
28
|
+
"@aztec/ethereum": "0.77.0-testnet-ignition.17",
|
|
29
|
+
"@aztec/foundation": "0.77.0-testnet-ignition.17",
|
|
30
|
+
"@aztec/native": "0.77.0-testnet-ignition.17",
|
|
31
|
+
"@aztec/stdlib": "0.77.0-testnet-ignition.17",
|
|
34
32
|
"idb": "^8.0.0",
|
|
35
33
|
"lmdb": "^3.2.0",
|
|
36
34
|
"msgpackr": "^1.11.2",
|
|
37
35
|
"ordered-binary": "^1.5.3"
|
|
38
36
|
},
|
|
39
37
|
"devDependencies": {
|
|
40
|
-
"@aztec/circuits.js": "workspace:^",
|
|
41
38
|
"@jest/globals": "^29.5.0",
|
|
42
39
|
"@types/chai": "^5.0.1",
|
|
43
40
|
"@types/chai-as-promised": "^8.0.1",
|
|
@@ -94,7 +91,7 @@
|
|
|
94
91
|
],
|
|
95
92
|
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
96
93
|
"rootDir": "./src",
|
|
97
|
-
"testTimeout":
|
|
94
|
+
"testTimeout": 120000,
|
|
98
95
|
"setupFiles": [
|
|
99
96
|
"../../foundation/src/jest/setup.mjs"
|
|
100
97
|
]
|
package/src/config.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l1ContractAddressesMapping } from '@aztec/ethereum/l1-contract-addresses';
|
|
2
2
|
import { type ConfigMappingsType, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
3
|
-
import {
|
|
3
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
|
|
5
5
|
export type DataStoreConfig = {
|
|
6
6
|
dataDirectory: string | undefined;
|
package/src/indexeddb/array.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { AztecAsyncArray } from '../interfaces/array.js';
|
|
4
|
+
import type { AztecIDBSchema } from './store.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* A persistent array backed by IndexedDB.
|
package/src/indexeddb/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import type { DataStoreConfig } from '../config.js';
|
|
4
4
|
import { initStoreForRollup } from '../utils.js';
|
|
5
5
|
import { AztecIndexedDBStore } from './store.js';
|
|
6
6
|
|
package/src/indexeddb/map.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import type { Key, Range } from '../interfaces/common.js';
|
|
4
|
+
import type { AztecAsyncMultiMap } from '../interfaces/map.js';
|
|
5
|
+
import type { AztecIDBSchema } from './store.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* A map backed by IndexedDB.
|
package/src/indexeddb/set.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { Key, Range } from '../interfaces/common.js';
|
|
4
|
+
import type { AztecAsyncSet } from '../interfaces/set.js';
|
|
5
5
|
import { IndexedDBAztecMap } from './map.js';
|
|
6
|
-
import {
|
|
6
|
+
import type { AztecIDBSchema } from './store.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* A set backed by IndexedDB.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { AztecAsyncSingleton } from '../interfaces/singleton.js';
|
|
4
|
+
import type { AztecIDBSchema } from './store.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Stores a single value in IndexedDB.
|
package/src/indexeddb/store.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
2
|
|
|
3
3
|
import { type DBSchema, type IDBPDatabase, deleteDB, openDB } from 'idb';
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
5
|
+
import type { AztecAsyncArray } from '../interfaces/array.js';
|
|
6
|
+
import type { Key, StoreSize } from '../interfaces/common.js';
|
|
7
|
+
import type { AztecAsyncCounter } from '../interfaces/counter.js';
|
|
8
|
+
import type { AztecAsyncMap, AztecAsyncMultiMap } from '../interfaces/map.js';
|
|
9
|
+
import type { AztecAsyncSet } from '../interfaces/set.js';
|
|
10
|
+
import type { AztecAsyncSingleton } from '../interfaces/singleton.js';
|
|
11
|
+
import type { AztecAsyncKVStore } from '../interfaces/store.js';
|
|
12
12
|
import { IndexedDBAztecArray } from './array.js';
|
|
13
13
|
import { IndexedDBAztecMap } from './map.js';
|
|
14
14
|
import { IndexedDBAztecSet } from './set.js';
|