@indigo-labs/indigo-sdk
Version:
Indigo SDK for interacting with Indigo endpoints via lucid-evolution
37 lines (34 loc) • 990 B
text/typescript
import {
Network,
slotToUnixTime,
unixTimeToSlot,
} from '@lucid-evolution/lucid';
/**
* Calculates the validity range based on the oracle expiration,
* and caps the upper bound when necessary.
*/
export function oracleExpirationAwareValidity(
currentSlot: number,
biasTime: number,
oracleExpiration: number,
network: Network,
): {
validFrom: number;
validTo: number;
} {
const validateFrom = slotToUnixTime(network, currentSlot - 1);
const defaultValidateTo = validateFrom + biasTime;
/// Take the oracle expiration time - 1 slot which is the last acceptable non-expired valid_to time
/// for the current oracle.
const cappedValidateTo = slotToUnixTime(
network,
unixTimeToSlot(network, oracleExpiration) - 1,
);
const isOracleActuallyExpired = cappedValidateTo <= validateFrom;
return {
validFrom: validateFrom,
validTo: isOracleActuallyExpired
? defaultValidateTo
: Math.min(defaultValidateTo, cappedValidateTo),
};
}