@exromany/lido-csm-sdk
Version:
[](https://github.com/lidofinance/lido-csm-sdk/blob/main/LICENSE.txt) [](h
45 lines • 1.9 kB
JavaScript
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