1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const node_storage_common_1 = require("@neo-one/node-storage-common");
|
5 | const utils_1 = require("@neo-one/utils");
|
6 | const lru_cache_1 = tslib_1.__importDefault(require("lru-cache"));
|
7 | const convertChange_1 = require("./convertChange");
|
8 | const read = tslib_1.__importStar(require("./read"));
|
9 | exports.cacheStorage = ({ environment, storage, }) => {
|
10 | // tslint:disable-next-line no-any
|
11 | const cache = new lru_cache_1.default({
|
12 | max: environment.maxSizeBytes,
|
13 | });
|
14 | const serializeHeaderKey = ({ hashOrIndex }) => typeof hashOrIndex === 'number'
|
15 | ? `header:${hashOrIndex}`
|
16 | : node_storage_common_1.keys.typeKeyToSerializeKeyString.header({ hash: hashOrIndex });
|
17 | const headerBase = read.createReadStorage({
|
18 | cache,
|
19 | storage: storage.header,
|
20 | serializeKeyString: serializeHeaderKey,
|
21 | });
|
22 | const header = {
|
23 | get: headerBase.get,
|
24 | tryGet: headerBase.tryGet,
|
25 | tryGetLatest: storage.header.tryGetLatest,
|
26 | };
|
27 | const serializeBlockKey = ({ hashOrIndex }) => typeof hashOrIndex === 'number'
|
28 | ? `block:${hashOrIndex}`
|
29 | : node_storage_common_1.keys.typeKeyToSerializeKeyString.block({ hash: hashOrIndex });
|
30 | const blockBase = read.createReadStorage({
|
31 | cache,
|
32 | storage: storage.block,
|
33 | serializeKeyString: serializeBlockKey,
|
34 | });
|
35 | const block = {
|
36 | get: blockBase.get,
|
37 | tryGet: blockBase.tryGet,
|
38 | tryGetLatest: storage.block.tryGetLatest,
|
39 | };
|
40 | return {
|
41 | header,
|
42 | block,
|
43 | blockData: read.createReadStorage({
|
44 | cache,
|
45 | storage: storage.blockData,
|
46 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.blockData,
|
47 | }),
|
48 | account: read.createReadAllStorage({
|
49 | cache,
|
50 | storage: storage.account,
|
51 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.account,
|
52 | }),
|
53 | accountUnspent: storage.accountUnspent,
|
54 | accountUnclaimed: storage.accountUnclaimed,
|
55 | action: storage.action,
|
56 | asset: read.createReadStorage({
|
57 | cache,
|
58 | storage: storage.asset,
|
59 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.asset,
|
60 | }),
|
61 | transaction: read.createReadStorage({
|
62 | cache,
|
63 | storage: storage.transaction,
|
64 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.transaction,
|
65 | }),
|
66 | transactionData: read.createReadStorage({
|
67 | cache,
|
68 | storage: storage.transactionData,
|
69 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.transactionData,
|
70 | }),
|
71 | output: read.createReadStorage({
|
72 | cache,
|
73 | storage: storage.output,
|
74 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.output,
|
75 | }),
|
76 | contract: read.createReadStorage({
|
77 | cache,
|
78 | storage: storage.contract,
|
79 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.contract,
|
80 | }),
|
81 | storageItem: read.createReadGetAllStorage({
|
82 | cache,
|
83 | storage: storage.storageItem,
|
84 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.storageItem,
|
85 | }),
|
86 | validator: read.createReadAllStorage({
|
87 | cache,
|
88 | storage: storage.validator,
|
89 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKeyString.validator,
|
90 | }),
|
91 | invocationData: storage.invocationData,
|
92 | validatorsCount: storage.validatorsCount,
|
93 | async close() {
|
94 | await storage.close();
|
95 | },
|
96 | async commit(changeSet) {
|
97 | const changesList = changeSet.map(convertChange_1.convertChange);
|
98 | // tslint:disable-next-line no-loop-statement
|
99 | for (const changes of changesList) {
|
100 | // tslint:disable-next-line no-loop-statement
|
101 | for (const change of changes) {
|
102 | switch (change.type) {
|
103 | case 'add':
|
104 | cache.set(change.key, change.value);
|
105 | break;
|
106 | case 'delete':
|
107 | cache.del(change.key);
|
108 | break;
|
109 | default:
|
110 | utils_1.utils.assertNever(change);
|
111 | throw new Error('For TS');
|
112 | }
|
113 | }
|
114 | }
|
115 | await storage.commit(changeSet);
|
116 | },
|
117 | async reset() {
|
118 | cache.reset();
|
119 | await storage.reset();
|
120 | },
|
121 | };
|
122 | };
|
123 |
|
124 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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LE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsNkJBQWEsQ0FBQyxDQUFDO1lBQ2pELDZDQUE2QztZQUM3QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFdBQVcsRUFBRTtnQkFDakMsNkNBQTZDO2dCQUM3QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtvQkFDNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO3dCQUNuQixLQUFLLEtBQUs7NEJBQ1IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDcEMsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJBQ1gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RCLE1BQU07d0JBQ1I7NEJBQ0UsYUFBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDN0I7aUJBQ0Y7YUFDRjtZQUNELE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsS0FBSyxDQUFDLEtBQUs7WUFDVCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLW5vZGUtc3RvcmFnZS1jYWNoZS9zcmMvY2FjaGVTdG9yYWdlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVUludDI1NiB9IGZyb20gJ0BuZW8tb25lL2NsaWVudC1jb21tb24nO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0BuZW8tb25lL25vZGUtY29yZSc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQG5lby1vbmUvbm9kZS1zdG9yYWdlLWNvbW1vbic7XG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BuZW8tb25lL3V0aWxzJztcbmltcG9ydCBMUlVDYWNoZSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHsgY29udmVydENoYW5nZSB9IGZyb20gJy4vY29udmVydENoYW5nZSc7XG5pbXBvcnQgKiBhcyByZWFkIGZyb20gJy4vcmVhZCc7XG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50IHtcbiAgcmVhZG9ubHkgbWF4U2l6ZUJ5dGVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBjYWNoZVN0b3JhZ2UgPSAoe1xuICBlbnZpcm9ubWVudCxcbiAgc3RvcmFnZSxcbn06IHtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xuICByZWFkb25seSBzdG9yYWdlOiBTdG9yYWdlO1xufSk6IFN0b3JhZ2UgPT4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gIGNvbnN0IGNhY2hlID0gbmV3IExSVUNhY2hlPHN0cmluZywgYW55Pih7XG4gICAgbWF4OiBlbnZpcm9ubWVudC5tYXhTaXplQnl0ZXMsXG4gICAgLy8gbGVuZ3RoOiAodmFsdWUsIGtleSkgPT4gdmFsdWUuc2l6ZSArIEJ1ZmZlci5ieXRlTGVuZ3RoKGtleSwgJ3V0ZjgnKSxcbiAgfSk7XG5cbiAgY29uc3Qgc2VyaWFsaXplSGVhZGVyS2V5ID0gKHsgaGFzaE9ySW5kZXggfTogeyBoYXNoT3JJbmRleDogbnVtYmVyIHwgVUludDI1NiB9KSA9PlxuICAgIHR5cGVvZiBoYXNoT3JJbmRleCA9PT0gJ251bWJlcidcbiAgICAgID8gYGhlYWRlcjoke2hhc2hPckluZGV4fWBcbiAgICAgIDoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXlTdHJpbmcuaGVhZGVyKHsgaGFzaDogaGFzaE9ySW5kZXggfSk7XG5cbiAgY29uc3QgaGVhZGVyQmFzZSA9IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgIGNhY2hlLFxuICAgIHN0b3JhZ2U6IHN0b3JhZ2UuaGVhZGVyLFxuICAgIHNlcmlhbGl6ZUtleVN0cmluZzogc2VyaWFsaXplSGVhZGVyS2V5LFxuICB9KTtcblxuICBjb25zdCBoZWFkZXIgPSB7XG4gICAgZ2V0OiBoZWFkZXJCYXNlLmdldCxcbiAgICB0cnlHZXQ6IGhlYWRlckJhc2UudHJ5R2V0LFxuICAgIHRyeUdldExhdGVzdDogc3RvcmFnZS5oZWFkZXIudHJ5R2V0TGF0ZXN0LFxuICB9O1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUJsb2NrS2V5ID0gKHsgaGFzaE9ySW5kZXggfTogeyBoYXNoT3JJbmRleDogbnVtYmVyIHwgVUludDI1NiB9KSA9PlxuICAgIHR5cGVvZiBoYXNoT3JJbmRleCA9PT0gJ251bWJlcidcbiAgICAgID8gYGJsb2NrOiR7aGFzaE9ySW5kZXh9YFxuICAgICAgOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleVN0cmluZy5ibG9jayh7IGhhc2g6IGhhc2hPckluZGV4IH0pO1xuXG4gIGNvbnN0IGJsb2NrQmFzZSA9IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgIGNhY2hlLFxuICAgIHN0b3JhZ2U6IHN0b3JhZ2UuYmxvY2ssXG4gICAgc2VyaWFsaXplS2V5U3RyaW5nOiBzZXJpYWxpemVCbG9ja0tleSxcbiAgfSk7XG5cbiAgY29uc3QgYmxvY2sgPSB7XG4gICAgZ2V0OiBibG9ja0Jhc2UuZ2V0LFxuICAgIHRyeUdldDogYmxvY2tCYXNlLnRyeUdldCxcbiAgICB0cnlHZXRMYXRlc3Q6IHN0b3JhZ2UuYmxvY2sudHJ5R2V0TGF0ZXN0LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgaGVhZGVyLFxuICAgIGJsb2NrLFxuICAgIGJsb2NrRGF0YTogcmVhZC5jcmVhdGVSZWFkU3RvcmFnZSh7XG4gICAgICBjYWNoZSxcbiAgICAgIHN0b3JhZ2U6IHN0b3JhZ2UuYmxvY2tEYXRhLFxuICAgICAgc2VyaWFsaXplS2V5U3RyaW5nOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleVN0cmluZy5ibG9ja0RhdGEsXG4gICAgfSksXG5cbiAgICBhY2NvdW50OiByZWFkLmNyZWF0ZVJlYWRBbGxTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS5hY2NvdW50LFxuICAgICAgc2VyaWFsaXplS2V5U3RyaW5nOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleVN0cmluZy5hY2NvdW50LFxuICAgIH0pLFxuXG4gICAgYWNjb3VudFVuc3BlbnQ6IHN0b3JhZ2UuYWNjb3VudFVuc3BlbnQsXG4gICAgYWNjb3VudFVuY2xhaW1lZDogc3RvcmFnZS5hY2NvdW50VW5jbGFpbWVkLFxuICAgIGFjdGlvbjogc3RvcmFnZS5hY3Rpb24sXG4gICAgYXNzZXQ6IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLmFzc2V0LFxuICAgICAgc2VyaWFsaXplS2V5U3RyaW5nOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleVN0cmluZy5hc3NldCxcbiAgICB9KSxcblxuICAgIHRyYW5zYWN0aW9uOiByZWFkLmNyZWF0ZVJlYWRTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS50cmFuc2FjdGlvbixcbiAgICAgIHNlcmlhbGl6ZUtleVN0cmluZzoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXlTdHJpbmcudHJhbnNhY3Rpb24sXG4gICAgfSksXG5cbiAgICB0cmFuc2FjdGlvbkRhdGE6IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLnRyYW5zYWN0aW9uRGF0YSxcbiAgICAgIHNlcmlhbGl6ZUtleVN0cmluZzoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXlTdHJpbmcudHJhbnNhY3Rpb25EYXRhLFxuICAgIH0pLFxuXG4gICAgb3V0cHV0OiByZWFkLmNyZWF0ZVJlYWRTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS5vdXRwdXQsXG4gICAgICBzZXJpYWxpemVLZXlTdHJpbmc6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5U3RyaW5nLm91dHB1dCxcbiAgICB9KSxcblxuICAgIGNvbnRyYWN0OiByZWFkLmNyZWF0ZVJlYWRTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS5jb250cmFjdCxcbiAgICAgIHNlcmlhbGl6ZUtleVN0cmluZzoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXlTdHJpbmcuY29udHJhY3QsXG4gICAgfSksXG5cbiAgICBzdG9yYWdlSXRlbTogcmVhZC5jcmVhdGVSZWFkR2V0QWxsU3RvcmFnZSh7XG4gICAgICBjYWNoZSxcbiAgICAgIHN0b3JhZ2U6IHN0b3JhZ2Uuc3RvcmFnZUl0ZW0sXG4gICAgICBzZXJpYWxpemVLZXlTdHJpbmc6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5U3RyaW5nLnN0b3JhZ2VJdGVtLFxuICAgIH0pLFxuXG4gICAgdmFsaWRhdG9yOiByZWFkLmNyZWF0ZVJlYWRBbGxTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS52YWxpZGF0b3IsXG4gICAgICBzZXJpYWxpemVLZXlTdHJpbmc6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5U3RyaW5nLnZhbGlkYXRvcixcbiAgICB9KSxcblxuICAgIGludm9jYXRpb25EYXRhOiBzdG9yYWdlLmludm9jYXRpb25EYXRhLFxuICAgIHZhbGlkYXRvcnNDb3VudDogc3RvcmFnZS52YWxpZGF0b3JzQ291bnQsXG4gICAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCBzdG9yYWdlLmNsb3NlKCk7XG4gICAgfSxcbiAgICBhc3luYyBjb21taXQoY2hhbmdlU2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBjaGFuZ2VzTGlzdCA9IGNoYW5nZVNldC5tYXAoY29udmVydENoYW5nZSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1zdGF0ZW1lbnRcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlcyBvZiBjaGFuZ2VzTGlzdCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1zdGF0ZW1lbnRcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgICAgIHN3aXRjaCAoY2hhbmdlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgICAgIGNhY2hlLnNldChjaGFuZ2Uua2V5LCBjaGFuZ2UudmFsdWUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgICAgIGNhY2hlLmRlbChjaGFuZ2Uua2V5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB1dGlscy5hc3NlcnROZXZlcihjaGFuZ2UpO1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBUUycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgc3RvcmFnZS5jb21taXQoY2hhbmdlU2V0KTtcbiAgICB9LFxuICAgIGFzeW5jIHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY2FjaGUucmVzZXQoKTtcbiAgICAgIGF3YWl0IHN0b3JhZ2UucmVzZXQoKTtcbiAgICB9LFxuICB9O1xufTtcbiJdfQ==
|