@waku/rln
Version:
RLN (Rate Limiting Nullifier) implementation for Waku
40 lines (37 loc) • 1.87 kB
JavaScript
import '../../../interfaces/dist/protocols.js';
import '../../../interfaces/dist/connection_manager.js';
import '../../../interfaces/dist/health_status.js';
import '../../../../node_modules/multiformats/dist/src/bases/base10.js';
import '../../../../node_modules/multiformats/dist/src/bases/base16.js';
import '../../../../node_modules/multiformats/dist/src/bases/base2.js';
import '../../../../node_modules/multiformats/dist/src/bases/base256emoji.js';
import '../../../../node_modules/multiformats/dist/src/bases/base32.js';
import '../../../../node_modules/multiformats/dist/src/bases/base36.js';
import '../../../../node_modules/multiformats/dist/src/bases/base58.js';
import '../../../../node_modules/multiformats/dist/src/bases/base64.js';
import '../../../../node_modules/multiformats/dist/src/bases/base8.js';
import '../../../../node_modules/multiformats/dist/src/bases/identity.js';
import '../../../../node_modules/multiformats/dist/src/codecs/json.js';
import { Logger } from '../../../utils/dist/logger.js';
const DefaultEpochUnitSeconds = 10; // the rln-relay epoch length in seconds
const log = new Logger("waku:rln:epoch");
function dateToEpoch(timestamp, epochUnitSeconds = DefaultEpochUnitSeconds) {
const time = timestamp.getTime();
const epoch = Math.floor(time / 1000 / epochUnitSeconds);
log.info("generated epoch", epoch);
return epoch;
}
function epochIntToBytes(epoch) {
const bytes = new Uint8Array(32);
const db = new DataView(bytes.buffer);
db.setUint32(0, epoch, true);
log.info("encoded epoch", epoch, bytes);
return bytes;
}
function epochBytesToInt(bytes) {
const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
const epoch = dv.getUint32(0, true);
log.info("decoded epoch", epoch, bytes);
return epoch;
}
export { dateToEpoch, epochBytesToInt, epochIntToBytes };