@exromany/lido-csm-sdk
Version:
[](https://github.com/lidofinance/lido-csm-sdk/blob/main/LICENSE.txt) [](h
51 lines • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkKeys = exports.removeKeys = exports.saveKeys = void 0;
const index_js_1 = require("../local-storage/index.js");
const KEY_TTL_IN_BLOCKS = 93_000;
const getStorageKey = (chainId) => `lido-csm-keys-${chainId}`;
const setKeys = (chainId, keys) => (0, index_js_1.saveToLocalStorage)(getStorageKey(chainId), keys);
const getKeys = (chainId) => (0, index_js_1.getFromLocalStorage)(getStorageKey(chainId)) || {};
const getIsKeyToKeep = (keyBlock, currentBlock) => {
if (!keyBlock || !currentBlock)
return true;
const age = Math.max(currentBlock - keyBlock, 0);
const isOld = age >= KEY_TTL_IN_BLOCKS;
return !isOld;
};
const cleanKeys = (keys, blockNumber) => {
return Object.entries(keys).reduce((updatedKeys, [pubKey, keyBlockNumber]) => {
const keepKey = getIsKeyToKeep(keyBlockNumber, blockNumber);
if (keepKey) {
updatedKeys[pubKey] = keyBlockNumber;
}
return updatedKeys;
}, {});
};
const saveKeys = (pubKeys, chainId, blockNumber) => {
const storedKeys = getKeys(chainId);
const updatedKeys = pubKeys.reduce((mergedKeys, pubKey) => {
mergedKeys[pubKey] = blockNumber;
return mergedKeys;
}, cleanKeys(storedKeys, blockNumber));
setKeys(chainId, updatedKeys);
};
exports.saveKeys = saveKeys;
const removeKeys = (pubKeys, chainId, blockNumber) => {
const storedKeys = getKeys(chainId);
const updatedKeys = pubKeys.reduce((mergedKeys, pubKey) => {
delete mergedKeys[pubKey];
return mergedKeys;
}, cleanKeys(storedKeys, blockNumber));
setKeys(chainId, updatedKeys);
};
exports.removeKeys = removeKeys;
const checkKeys = (pubKeys, chainId, blockNumber) => {
const storedKeys = getKeys(chainId);
return pubKeys.filter((pubKey) => {
const keyBlockNumber = storedKeys[pubKey];
return keyBlockNumber ? getIsKeyToKeep(keyBlockNumber, blockNumber) : false;
});
};
exports.checkKeys = checkKeys;
//# sourceMappingURL=cached-keys.js.map