mirror of
https://github.com/status-im/codex-contracts-eth.git
synced 2025-02-12 08:26:46 +00:00
vault: check Lock invariant before writing
This commit is contained in:
parent
421a1eb5ba
commit
d35cc00841
@ -149,10 +149,12 @@ abstract contract VaultBase {
|
||||
Timestamp expiry,
|
||||
Timestamp maximum
|
||||
) internal {
|
||||
require(expiry <= maximum, ExpiryPastMaximum());
|
||||
Lock memory existing = _locks[controller][context];
|
||||
require(existing.maximum == Timestamp.wrap(0), AlreadyLocked());
|
||||
_locks[controller][context] = Lock({expiry: expiry, maximum: maximum});
|
||||
Lock memory lock = _locks[controller][context];
|
||||
require(lock.maximum == Timestamp.wrap(0), AlreadyLocked());
|
||||
lock.expiry = expiry;
|
||||
lock.maximum = maximum;
|
||||
_checkLockInvariant(lock);
|
||||
_locks[controller][context] = lock;
|
||||
}
|
||||
|
||||
function _extendLock(
|
||||
@ -163,8 +165,9 @@ abstract contract VaultBase {
|
||||
Lock memory lock = _locks[controller][context];
|
||||
require(lock.isLocked(), LockRequired());
|
||||
require(lock.expiry <= expiry, InvalidExpiry());
|
||||
require(expiry <= lock.maximum, ExpiryPastMaximum());
|
||||
_locks[controller][context].expiry = expiry;
|
||||
lock.expiry = expiry;
|
||||
_checkLockInvariant(lock);
|
||||
_locks[controller][context] = lock;
|
||||
}
|
||||
|
||||
function _flow(
|
||||
@ -198,6 +201,10 @@ abstract contract VaultBase {
|
||||
_flows[controller][context][to] = receiverFlow;
|
||||
}
|
||||
|
||||
function _checkLockInvariant(Lock memory lock) private pure {
|
||||
require(lock.expiry <= lock.maximum, ExpiryPastMaximum());
|
||||
}
|
||||
|
||||
function _checkFlowInvariant(
|
||||
Balance memory balance,
|
||||
Lock memory lock,
|
||||
|
Loading…
x
Reference in New Issue
Block a user