@symbioticfi/relay-stats-ts
Version:
TypeScript library for deriving validator sets from Symbiotic network contracts
119 lines • 5.33 kB
TypeScript
import { PublicClient, Hex } from 'viem';
import { CrossChainAddress, NetworkConfig, ValidatorSet, CacheInterface, ValidatorSetHeader, NetworkData, AggregatorExtraDataEntry, EpochData, ValSetStatus, SettlementValSetStatus, SettlementValSetLog } from './types.js';
import { AggregatorMode } from './constants.js';
export declare const determineValSetStatus: (clientFactory: (chainId: number) => PublicClient, settlements: readonly CrossChainAddress[], epoch: number, preferFinalized: boolean) => Promise<ValSetStatus>;
export interface ValidatorSetDeriverConfig {
rpcUrls: string[];
driverAddress: CrossChainAddress;
cache?: CacheInterface | null;
maxSavedEpochs?: number;
}
export declare class ValidatorSetDeriver {
private readonly clients;
private readonly driverAddress;
private readonly cache;
private readonly maxSavedEpochs;
private readonly initializedPromise;
private readonly rpcUrls;
private readonly valsetEventsState;
constructor(config: ValidatorSetDeriverConfig);
/**
* Derive auxiliary network data used by the Relay system.
* - Reads NETWORK and SUBNETWORK from the ValSet Driver
* - Reads EIP-712 domain from a given settlement contract
*/
getNetworkData(settlement?: CrossChainAddress, finalized?: boolean): Promise<NetworkData>;
/**
* Build key/value style extraData entries like relay Aggregator.GenerateExtraData
* - simple: keccak(ValidatorsData) and compressed aggregated G1 key
* - zk: totalActiveValidators and MiMC-based validators hash
* Note: This is a lightweight TS analog without bn254 ops; it uses available data.
*/
getAggregatorsExtraData(mode: AggregatorMode, keyTags?: number[], finalized?: boolean, epoch?: number): Promise<AggregatorExtraDataEntry[]>;
getEpochData(options?: {
epoch?: number;
finalized?: boolean;
includeNetworkData?: boolean;
includeValSetEvent?: boolean;
settlement?: CrossChainAddress;
aggregatorKeyTags?: number[];
}): Promise<EpochData>;
/**
* Static factory method that ensures the deriver is fully initialized before returning
*/
static create(config: ValidatorSetDeriverConfig): Promise<ValidatorSetDeriver>;
private initializeClients;
private validateRequiredChains;
private resolveEpoch;
private getVerificationMode;
private isValSetStatus;
private isValidatorSet;
private canCacheValSetStatus;
private canCacheValidatorSet;
private isAggregatorExtraCacheEntry;
private updateValidatorSetStatus;
private isCachedNetworkConfigEntry;
private isNetworkConfigStructure;
private mapDriverConfig;
private loadNetworkConfigData;
private settlementCacheKey;
private settlementsCacheKey;
private loadValSetStatus;
private loadAggregatorsExtraData;
private buildValidatorSet;
private ensureInitialized;
private getClient;
private multicallExists;
private executeChunkedMulticall;
private populateVaultCollateralMetadata;
private dedupeAddresses;
private normalizeTokenMetadataValue;
private readTokenMetadataField;
private getDriverContract;
private readDriverNumber;
private getFromCache;
private setToCache;
private deleteFromCache;
getCurrentEpoch(finalized?: boolean): Promise<number>;
getCurrentEpochDuration(finalized?: boolean): Promise<number>;
getCurrentEpochStart(finalized?: boolean): Promise<number>;
getNextEpoch(finalized?: boolean): Promise<number>;
getNextEpochDuration(finalized?: boolean): Promise<number>;
getNextEpochStart(finalized?: boolean): Promise<number>;
getEpochStart(epoch: number, finalized?: boolean): Promise<number>;
getEpochDuration(epoch: number, finalized?: boolean): Promise<number>;
getEpochIndex(timestamp: number, finalized?: boolean): Promise<number>;
getNetworkConfig(epoch?: number, finalized?: boolean): Promise<NetworkConfig>;
getValidatorSet(epoch?: number, finalized?: boolean): Promise<ValidatorSet>;
/**
* Get the current validator set (simplified interface)
*/
getCurrentValidatorSet(): Promise<ValidatorSet>;
/**
* Get the current network configuration (simplified interface)
*/
getCurrentNetworkConfig(): Promise<NetworkConfig>;
getTotalActiveVotingPower(validatorSet: ValidatorSet): bigint;
getValidatorSetHeader(validatorSet: ValidatorSet): ValidatorSetHeader;
abiEncodeValidatorSetHeader(header: ValidatorSetHeader): Hex;
hashValidatorSetHeader(header: ValidatorSetHeader): Hex;
getValidatorSetHeaderHash(validatorSet: ValidatorSet): Hex;
private getVotingPowers;
private getKeys;
private getValsetStatus;
private getOrCreateValSetEventsState;
private selectSettlementForEvent;
getValSetStatus(epoch: number, finalized?: boolean): Promise<ValSetStatus>;
getValSetSettlementStatuses(options?: {
epoch?: number;
finalized?: boolean;
settlements?: CrossChainAddress[];
}): Promise<SettlementValSetStatus[]>;
getValSetLogEvents(options?: {
epoch?: number;
finalized?: boolean;
settlements?: CrossChainAddress[];
}): Promise<SettlementValSetLog[]>;
private retrieveValSetEvent;
}
//# sourceMappingURL=deriver.d.ts.map