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