UNPKG

@exromany/lido-csm-sdk

Version:

[![GitHub license](https://img.shields.io/github/license/lidofinance/lido-csm-sdk?color=limegreen)](https://github.com/lidofinance/lido-csm-sdk/blob/main/LICENSE.txt) [![Version npm](https://img.shields.io/npm/v/@lidofinance/lido-csm-sdk?label=version)](h

45 lines 1.9 kB
import { getFromLocalStorage, saveToLocalStorage, } from '../local-storage/index.js'; const KEY_TTL_IN_BLOCKS = 93_000; // ~ 2 weeks: 60 * 60 * 24 * 7 * 2 / 13 const getStorageKey = (chainId) => `lido-csm-keys-${chainId}`; const setKeys = (chainId, keys) => saveToLocalStorage(getStorageKey(chainId), keys); const getKeys = (chainId) => 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; }, {}); }; export 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); }; export 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); }; export const checkKeys = (pubKeys, chainId, blockNumber) => { const storedKeys = getKeys(chainId); return pubKeys.filter((pubKey) => { const keyBlockNumber = storedKeys[pubKey]; return keyBlockNumber ? getIsKeyToKeep(keyBlockNumber, blockNumber) : false; }); }; //# sourceMappingURL=cached-keys.js.map