Improve AccessManager (#4520)
This commit is contained in:
@ -53,9 +53,13 @@ library Time {
|
||||
*
|
||||
*
|
||||
* The `Delay` type is 128 bits long, and packs the following:
|
||||
* [000:031] uint32 for the current value (duration)
|
||||
* [032:063] uint32 for the pending value (duration)
|
||||
* [064:111] uint48 for the effect date (timepoint)
|
||||
*
|
||||
* ```
|
||||
* | [uint48]: effect date (timepoint)
|
||||
* | | [uint32]: current value (duration)
|
||||
* ↓ ↓ ↓ [uint32]: pending value (duration)
|
||||
* 0xAAAAAAAAAAAABBBBBBBBCCCCCCCC
|
||||
* ```
|
||||
*
|
||||
* NOTE: The {get} and {update} function operate using timestamps. Block number based delays should use the
|
||||
* {getAt} and {withUpdateAt} variants of these functions.
|
||||
@ -110,12 +114,14 @@ library Time {
|
||||
|
||||
/**
|
||||
* @dev Update a Delay object so that it takes a new duration after at a timepoint that is automatically computed
|
||||
* to enforce the old delay at the moment of the update.
|
||||
* to enforce the old delay at the moment of the update. Returns the updated Delay object and the timestamp when the
|
||||
* new delay becomes effective.
|
||||
*/
|
||||
function withUpdate(Delay self, uint32 newValue, uint32 minSetback) internal view returns (Delay) {
|
||||
function withUpdate(Delay self, uint32 newValue, uint32 minSetback) internal view returns (Delay, uint48) {
|
||||
uint32 value = self.get();
|
||||
uint32 setback = uint32(Math.max(minSetback, value > newValue ? value - newValue : 0));
|
||||
return self.withUpdateAt(newValue, timestamp() + setback);
|
||||
uint48 effect = timestamp() + setback;
|
||||
return (self.withUpdateAt(newValue, effect), effect);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user