vault: reorder functions

in roughly chronological order
This commit is contained in:
Mark Spanbroek 2025-02-03 16:45:30 +01:00
parent 6e531f2087
commit f64c373e8f
2 changed files with 157 additions and 157 deletions

View File

@ -30,24 +30,28 @@ contract Vault is VaultBase {
return _getLock(controller, context);
}
function lock(Context context, Timestamp expiry, Timestamp maximum) public {
Controller controller = Controller.wrap(msg.sender);
_lock(controller, context, expiry, maximum);
}
function extendLock(Context context, Timestamp expiry) public {
Controller controller = Controller.wrap(msg.sender);
_extendLock(controller, context, expiry);
}
function deposit(Context context, address from, uint128 amount) public {
Controller controller = Controller.wrap(msg.sender);
_deposit(controller, context, from, amount);
}
function withdraw(Context context, Recipient recipient) public {
function designate(
Context context,
Recipient recipient,
uint128 amount
) public {
Controller controller = Controller.wrap(msg.sender);
_withdraw(controller, context, recipient);
}
function withdrawByRecipient(Controller controller, Context context) public {
Recipient recipient = Recipient.wrap(msg.sender);
_withdraw(controller, context, recipient);
}
function burn(Context context, Recipient recipient) public {
Controller controller = Controller.wrap(msg.sender);
_burn(controller, context, recipient);
_designate(controller, context, recipient, amount);
}
function transfer(
@ -60,25 +64,6 @@ contract Vault is VaultBase {
_transfer(controller, context, from, to, amount);
}
function designate(
Context context,
Recipient recipient,
uint128 amount
) public {
Controller controller = Controller.wrap(msg.sender);
_designate(controller, context, recipient, amount);
}
function lock(Context context, Timestamp expiry, Timestamp maximum) public {
Controller controller = Controller.wrap(msg.sender);
_lockup(controller, context, expiry, maximum);
}
function extendLock(Context context, Timestamp expiry) public {
Controller controller = Controller.wrap(msg.sender);
_extendLock(controller, context, expiry);
}
function flow(
Context context,
Recipient from,
@ -88,4 +73,19 @@ contract Vault is VaultBase {
Controller controller = Controller.wrap(msg.sender);
_flow(controller, context, from, to, rate);
}
function burn(Context context, Recipient recipient) public {
Controller controller = Controller.wrap(msg.sender);
_burn(controller, context, recipient);
}
function withdraw(Context context, Recipient recipient) public {
Controller controller = Controller.wrap(msg.sender);
_withdraw(controller, context, recipient);
}
function withdrawByRecipient(Controller controller, Context context) public {
Recipient recipient = Recipient.wrap(msg.sender);
_withdraw(controller, context, recipient);
}
}

View File

@ -73,132 +73,7 @@ abstract contract VaultBase {
return _locks[controller][context];
}
function _deposit(
Controller controller,
Context context,
address from,
uint128 amount
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Recipient recipient = Recipient.wrap(from);
Balance memory balance = _balances[controller][context][recipient];
balance.available += amount;
lock.value += amount;
_balances[controller][context][recipient] = balance;
_locks[controller][context] = lock;
_token.safeTransferFrom(from, address(this), amount);
}
function _delete(
Controller controller,
Context context,
Recipient recipient
) private {
delete _balances[controller][context][recipient];
delete _flows[controller][context][recipient];
}
function _withdraw(
Controller controller,
Context context,
Recipient recipient
) internal {
Lock memory lock = _locks[controller][context];
require(!lock.isLocked(), Locked());
Balance memory balance = _getBalance(controller, context, recipient);
uint128 amount = balance.available + balance.designated;
lock.value -= amount;
if (lock.value == 0) {
delete _locks[controller][context];
} else {
_locks[controller][context] = lock;
}
_delete(controller, context, recipient);
_token.safeTransfer(Recipient.unwrap(recipient), amount);
}
function _burn(
Controller controller,
Context context,
Recipient recipient
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Flow memory flow = _flows[controller][context][recipient];
require(flow.rate == TokensPerSecond.wrap(0), CannotBurnFlowingTokens());
Balance memory balance = _getBalance(controller, context, recipient);
uint128 amount = balance.available + balance.designated;
lock.value -= amount;
if (lock.value == 0) {
delete _locks[controller][context];
} else {
_locks[controller][context] = lock;
}
_delete(controller, context, recipient);
_token.safeTransfer(address(0xdead), amount);
}
function _transfer(
Controller controller,
Context context,
Recipient from,
Recipient to,
uint128 amount
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Balance memory senderBalance = _getBalance(controller, context, from);
Balance memory receiverBalance = _getBalance(controller, context, to);
require(amount <= senderBalance.available, InsufficientBalance());
senderBalance.available -= amount;
receiverBalance.available += amount;
Flow memory senderFlow = _flows[controller][context][from];
_checkFlowInvariant(senderBalance, lock, senderFlow);
_balances[controller][context][from] = senderBalance;
_balances[controller][context][to] = receiverBalance;
}
function _designate(
Controller controller,
Context context,
Recipient recipient,
uint128 amount
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Balance memory balance = _balances[controller][context][recipient];
require(amount <= balance.available, InsufficientBalance());
balance.available -= amount;
balance.designated += amount;
Flow memory flow = _flows[controller][context][recipient];
_checkFlowInvariant(balance, lock, flow);
_balances[controller][context][recipient] = balance;
}
function _lockup(
function _lock(
Controller controller,
Context context,
Timestamp expiry,
@ -225,6 +100,72 @@ abstract contract VaultBase {
_locks[controller][context] = lock;
}
function _deposit(
Controller controller,
Context context,
address from,
uint128 amount
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Recipient recipient = Recipient.wrap(from);
Balance memory balance = _balances[controller][context][recipient];
balance.available += amount;
lock.value += amount;
_balances[controller][context][recipient] = balance;
_locks[controller][context] = lock;
_token.safeTransferFrom(from, address(this), amount);
}
function _designate(
Controller controller,
Context context,
Recipient recipient,
uint128 amount
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Balance memory balance = _balances[controller][context][recipient];
require(amount <= balance.available, InsufficientBalance());
balance.available -= amount;
balance.designated += amount;
Flow memory flow = _flows[controller][context][recipient];
_checkFlowInvariant(balance, lock, flow);
_balances[controller][context][recipient] = balance;
}
function _transfer(
Controller controller,
Context context,
Recipient from,
Recipient to,
uint128 amount
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Balance memory senderBalance = _getBalance(controller, context, from);
Balance memory receiverBalance = _getBalance(controller, context, to);
require(amount <= senderBalance.available, InsufficientBalance());
senderBalance.available -= amount;
receiverBalance.available += amount;
Flow memory senderFlow = _flows[controller][context][from];
_checkFlowInvariant(senderBalance, lock, senderFlow);
_balances[controller][context][from] = senderBalance;
_balances[controller][context][to] = receiverBalance;
}
function _flow(
Controller controller,
Context context,
@ -256,6 +197,65 @@ abstract contract VaultBase {
_flows[controller][context][to] = receiverFlow;
}
function _burn(
Controller controller,
Context context,
Recipient recipient
) internal {
Lock memory lock = _locks[controller][context];
require(lock.isLocked(), LockRequired());
Flow memory flow = _flows[controller][context][recipient];
require(flow.rate == TokensPerSecond.wrap(0), CannotBurnFlowingTokens());
Balance memory balance = _getBalance(controller, context, recipient);
uint128 amount = balance.available + balance.designated;
lock.value -= amount;
if (lock.value == 0) {
delete _locks[controller][context];
} else {
_locks[controller][context] = lock;
}
_delete(controller, context, recipient);
_token.safeTransfer(address(0xdead), amount);
}
function _withdraw(
Controller controller,
Context context,
Recipient recipient
) internal {
Lock memory lock = _locks[controller][context];
require(!lock.isLocked(), Locked());
Balance memory balance = _getBalance(controller, context, recipient);
uint128 amount = balance.available + balance.designated;
lock.value -= amount;
if (lock.value == 0) {
delete _locks[controller][context];
} else {
_locks[controller][context] = lock;
}
_delete(controller, context, recipient);
_token.safeTransfer(Recipient.unwrap(recipient), amount);
}
function _delete(
Controller controller,
Context context,
Recipient recipient
) private {
delete _balances[controller][context][recipient];
delete _flows[controller][context][recipient];
}
function _checkLockInvariant(Lock memory lock) private pure {
require(lock.expiry <= lock.maximum, ExpiryPastMaximum());
}