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.typeKeyToSerializeKey.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' ? `block:${hashOrIndex}` : node_storage_common_1.keys.typeKeyToSerializeKey.block({ hash: hashOrIndex });
|
28 | const blockBase = read.createReadStorage({
|
29 | cache,
|
30 | storage: storage.block,
|
31 | serializeKeyString: serializeBlockKey,
|
32 | });
|
33 | const block = {
|
34 | get: blockBase.get,
|
35 | tryGet: blockBase.tryGet,
|
36 | tryGetLatest: storage.block.tryGetLatest,
|
37 | };
|
38 | return {
|
39 | header,
|
40 | block,
|
41 | blockData: read.createReadStorage({
|
42 | cache,
|
43 | storage: storage.blockData,
|
44 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.blockData,
|
45 | }),
|
46 | account: read.createReadAllStorage({
|
47 | cache,
|
48 | storage: storage.account,
|
49 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.account,
|
50 | }),
|
51 | accountUnspent: storage.accountUnspent,
|
52 | accountUnclaimed: storage.accountUnclaimed,
|
53 | action: storage.action,
|
54 | asset: read.createReadStorage({
|
55 | cache,
|
56 | storage: storage.asset,
|
57 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.asset,
|
58 | }),
|
59 | transaction: read.createReadStorage({
|
60 | cache,
|
61 | storage: storage.transaction,
|
62 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.transaction,
|
63 | }),
|
64 | transactionData: read.createReadStorage({
|
65 | cache,
|
66 | storage: storage.transactionData,
|
67 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.transactionData,
|
68 | }),
|
69 | output: read.createReadStorage({
|
70 | cache,
|
71 | storage: storage.output,
|
72 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.output,
|
73 | }),
|
74 | contract: read.createReadStorage({
|
75 | cache,
|
76 | storage: storage.contract,
|
77 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.contract,
|
78 | }),
|
79 | storageItem: read.createReadGetAllStorage({
|
80 | cache,
|
81 | storage: storage.storageItem,
|
82 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.storageItem,
|
83 | }),
|
84 | validator: read.createReadAllStorage({
|
85 | cache,
|
86 | storage: storage.validator,
|
87 | serializeKeyString: node_storage_common_1.keys.typeKeyToSerializeKey.validator,
|
88 | }),
|
89 | invocationData: storage.invocationData,
|
90 | validatorsCount: storage.validatorsCount,
|
91 | async close() {
|
92 | await storage.close();
|
93 | },
|
94 | async commit(changeSet) {
|
95 | const changesList = changeSet.map(convertChange_1.convertChange);
|
96 | // tslint:disable-next-line no-loop-statement
|
97 | for (const changes of changesList) {
|
98 | // tslint:disable-next-line no-loop-statement
|
99 | for (const change of changes) {
|
100 | switch (change.type) {
|
101 | case 'add':
|
102 | cache.set(change.key, change.value);
|
103 | break;
|
104 | case 'delete':
|
105 | cache.del(change.key);
|
106 | break;
|
107 | default:
|
108 | utils_1.utils.assertNever(change);
|
109 | throw new Error('For TS');
|
110 | }
|
111 | }
|
112 | }
|
113 | await storage.commit(changeSet);
|
114 | },
|
115 | async reset() {
|
116 | cache.reset();
|
117 | await storage.reset();
|
118 | },
|
119 | };
|
120 | };
|
121 |
|
122 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLDZCQUFhLENBQUMsQ0FBQztZQUNqRCw2Q0FBNkM7WUFDN0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLEVBQUU7Z0JBQ2pDLDZDQUE2QztnQkFDN0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzVCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTt3QkFDbkIsS0FBSyxLQUFLOzRCQUNSLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3BDLE1BQU07d0JBQ1IsS0FBSyxRQUFROzRCQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QixNQUFNO3dCQUNSOzRCQUNFLGFBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzdCO2lCQUNGO2FBQ0Y7WUFDRCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLO1lBQ1QsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1ub2RlLXN0b3JhZ2UtY2FjaGUvc3JjL2NhY2hlU3RvcmFnZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVJbnQyNTYgfSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29tbW9uJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAbmVvLW9uZS9ub2RlLWNvcmUnO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0BuZW8tb25lL25vZGUtc3RvcmFnZS1jb21tb24nO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICdAbmVvLW9uZS91dGlscyc7XG5pbXBvcnQgTFJVQ2FjaGUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7IGNvbnZlcnRDaGFuZ2UgfSBmcm9tICcuL2NvbnZlcnRDaGFuZ2UnO1xuaW1wb3J0ICogYXMgcmVhZCBmcm9tICcuL3JlYWQnO1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG4gIHJlYWRvbmx5IG1heFNpemVCeXRlczogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgY2FjaGVTdG9yYWdlID0gKHtcbiAgZW52aXJvbm1lbnQsXG4gIHN0b3JhZ2UsXG59OiB7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZTtcbn0pOiBTdG9yYWdlID0+IHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICBjb25zdCBjYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIGFueT4oe1xuICAgIG1heDogZW52aXJvbm1lbnQubWF4U2l6ZUJ5dGVzLFxuICAgIC8vIGxlbmd0aDogKHZhbHVlLCBrZXkpID0+IHZhbHVlLnNpemUgKyBCdWZmZXIuYnl0ZUxlbmd0aChrZXksICd1dGY4JyksXG4gIH0pO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUhlYWRlcktleSA9ICh7IGhhc2hPckluZGV4IH06IHsgaGFzaE9ySW5kZXg6IG51bWJlciB8IFVJbnQyNTYgfSkgPT5cbiAgICB0eXBlb2YgaGFzaE9ySW5kZXggPT09ICdudW1iZXInXG4gICAgICA/IGBoZWFkZXI6JHtoYXNoT3JJbmRleH1gXG4gICAgICA6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5LmhlYWRlcih7IGhhc2g6IGhhc2hPckluZGV4IH0pO1xuXG4gIGNvbnN0IGhlYWRlckJhc2UgPSByZWFkLmNyZWF0ZVJlYWRTdG9yYWdlKHtcbiAgICBjYWNoZSxcbiAgICBzdG9yYWdlOiBzdG9yYWdlLmhlYWRlcixcbiAgICBzZXJpYWxpemVLZXlTdHJpbmc6IHNlcmlhbGl6ZUhlYWRlcktleSxcbiAgfSk7XG5cbiAgY29uc3QgaGVhZGVyID0ge1xuICAgIGdldDogaGVhZGVyQmFzZS5nZXQsXG4gICAgdHJ5R2V0OiBoZWFkZXJCYXNlLnRyeUdldCxcbiAgICB0cnlHZXRMYXRlc3Q6IHN0b3JhZ2UuaGVhZGVyLnRyeUdldExhdGVzdCxcbiAgfTtcblxuICBjb25zdCBzZXJpYWxpemVCbG9ja0tleSA9ICh7IGhhc2hPckluZGV4IH06IHsgaGFzaE9ySW5kZXg6IG51bWJlciB8IFVJbnQyNTYgfSkgPT5cbiAgICB0eXBlb2YgaGFzaE9ySW5kZXggPT09ICdudW1iZXInID8gYGJsb2NrOiR7aGFzaE9ySW5kZXh9YCA6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5LmJsb2NrKHsgaGFzaDogaGFzaE9ySW5kZXggfSk7XG5cbiAgY29uc3QgYmxvY2tCYXNlID0gcmVhZC5jcmVhdGVSZWFkU3RvcmFnZSh7XG4gICAgY2FjaGUsXG4gICAgc3RvcmFnZTogc3RvcmFnZS5ibG9jayxcbiAgICBzZXJpYWxpemVLZXlTdHJpbmc6IHNlcmlhbGl6ZUJsb2NrS2V5LFxuICB9KTtcblxuICBjb25zdCBibG9jayA9IHtcbiAgICBnZXQ6IGJsb2NrQmFzZS5nZXQsXG4gICAgdHJ5R2V0OiBibG9ja0Jhc2UudHJ5R2V0LFxuICAgIHRyeUdldExhdGVzdDogc3RvcmFnZS5ibG9jay50cnlHZXRMYXRlc3QsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBoZWFkZXIsXG4gICAgYmxvY2ssXG4gICAgYmxvY2tEYXRhOiByZWFkLmNyZWF0ZVJlYWRTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS5ibG9ja0RhdGEsXG4gICAgICBzZXJpYWxpemVLZXlTdHJpbmc6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5LmJsb2NrRGF0YSxcbiAgICB9KSxcblxuICAgIGFjY291bnQ6IHJlYWQuY3JlYXRlUmVhZEFsbFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLmFjY291bnQsXG4gICAgICBzZXJpYWxpemVLZXlTdHJpbmc6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5LmFjY291bnQsXG4gICAgfSksXG5cbiAgICBhY2NvdW50VW5zcGVudDogc3RvcmFnZS5hY2NvdW50VW5zcGVudCxcbiAgICBhY2NvdW50VW5jbGFpbWVkOiBzdG9yYWdlLmFjY291bnRVbmNsYWltZWQsXG4gICAgYWN0aW9uOiBzdG9yYWdlLmFjdGlvbixcbiAgICBhc3NldDogcmVhZC5jcmVhdGVSZWFkU3RvcmFnZSh7XG4gICAgICBjYWNoZSxcbiAgICAgIHN0b3JhZ2U6IHN0b3JhZ2UuYXNzZXQsXG4gICAgICBzZXJpYWxpemVLZXlTdHJpbmc6IGtleXMudHlwZUtleVRvU2VyaWFsaXplS2V5LmFzc2V0LFxuICAgIH0pLFxuXG4gICAgdHJhbnNhY3Rpb246IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLnRyYW5zYWN0aW9uLFxuICAgICAgc2VyaWFsaXplS2V5U3RyaW5nOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleS50cmFuc2FjdGlvbixcbiAgICB9KSxcblxuICAgIHRyYW5zYWN0aW9uRGF0YTogcmVhZC5jcmVhdGVSZWFkU3RvcmFnZSh7XG4gICAgICBjYWNoZSxcbiAgICAgIHN0b3JhZ2U6IHN0b3JhZ2UudHJhbnNhY3Rpb25EYXRhLFxuICAgICAgc2VyaWFsaXplS2V5U3RyaW5nOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleS50cmFuc2FjdGlvbkRhdGEsXG4gICAgfSksXG5cbiAgICBvdXRwdXQ6IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLm91dHB1dCxcbiAgICAgIHNlcmlhbGl6ZUtleVN0cmluZzoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXkub3V0cHV0LFxuICAgIH0pLFxuXG4gICAgY29udHJhY3Q6IHJlYWQuY3JlYXRlUmVhZFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLmNvbnRyYWN0LFxuICAgICAgc2VyaWFsaXplS2V5U3RyaW5nOiBrZXlzLnR5cGVLZXlUb1NlcmlhbGl6ZUtleS5jb250cmFjdCxcbiAgICB9KSxcblxuICAgIHN0b3JhZ2VJdGVtOiByZWFkLmNyZWF0ZVJlYWRHZXRBbGxTdG9yYWdlKHtcbiAgICAgIGNhY2hlLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZS5zdG9yYWdlSXRlbSxcbiAgICAgIHNlcmlhbGl6ZUtleVN0cmluZzoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXkuc3RvcmFnZUl0ZW0sXG4gICAgfSksXG5cbiAgICB2YWxpZGF0b3I6IHJlYWQuY3JlYXRlUmVhZEFsbFN0b3JhZ2Uoe1xuICAgICAgY2FjaGUsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlLnZhbGlkYXRvcixcbiAgICAgIHNlcmlhbGl6ZUtleVN0cmluZzoga2V5cy50eXBlS2V5VG9TZXJpYWxpemVLZXkudmFsaWRhdG9yLFxuICAgIH0pLFxuXG4gICAgaW52b2NhdGlvbkRhdGE6IHN0b3JhZ2UuaW52b2NhdGlvbkRhdGEsXG4gICAgdmFsaWRhdG9yc0NvdW50OiBzdG9yYWdlLnZhbGlkYXRvcnNDb3VudCxcbiAgICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHN0b3JhZ2UuY2xvc2UoKTtcbiAgICB9LFxuICAgIGFzeW5jIGNvbW1pdChjaGFuZ2VTZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IGNoYW5nZXNMaXN0ID0gY2hhbmdlU2V0Lm1hcChjb252ZXJ0Q2hhbmdlKTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1sb29wLXN0YXRlbWVudFxuICAgICAgZm9yIChjb25zdCBjaGFuZ2VzIG9mIGNoYW5nZXNMaXN0KSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1sb29wLXN0YXRlbWVudFxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgICAgICAgc3dpdGNoIChjaGFuZ2UudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICAgICAgY2FjaGUuc2V0KGNoYW5nZS5rZXksIGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICAgICAgY2FjaGUuZGVsKGNoYW5nZS5rZXkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHV0aWxzLmFzc2VydE5ldmVyKGNoYW5nZSk7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9yIFRTJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBzdG9yYWdlLmNvbW1pdChjaGFuZ2VTZXQpO1xuICAgIH0sXG4gICAgYXN5bmMgcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjYWNoZS5yZXNldCgpO1xuICAgICAgYXdhaXQgc3RvcmFnZS5yZXNldCgpO1xuICAgIH0sXG4gIH07XG59O1xuIl19
|