# RD/USD Oracle Integration
## Keeper Functions
### drip
function on TroveManager
`function drip() external`
function is also called during protocol operations
check if stale
`function dripIsStale() returns (bool)`
```
// On TroveManager
DRIP_STALENESS_THRESHOLD = 1 hours;
```
Gas Optimization
hook can store last drip time from hook and not check `dripIsStale()` until `block.timestamp - last > DRIP_STALENESS_THRESHOLD` if you think it can save gas vs always checking `dripIsStale()`
### rate update
function on Relayer
`function updateRateWithMarket(uint256 marketPrice) external returns (uint256)`
rate is also updated during protocol operations
check if stale
`relayer.rateIsStale() returns (bool)`
```
// On Relayer
RATE_STALENESS_THRESHOLD = 2 hours;
```
### par update
function on Relayer
`function updateParWithMarket(uint256 marketPrice) external returns (uint256)`
par is also updated during protocol operations
check if stale
`relayer.parIsStale() returns (bool)`
```
// On Relayer
PAR_STALENESS_THRESHOLD = 3 hours;
```
Can use same check logic as above
### update both rate and par
function on relayer
`function updateRateAndParWithMarket(uint256 rateMarketPrice, uint256 parMarketPrice) external returns (uint256)`