sanity for TimelockController and Votes
This commit is contained in:
63
certora/munged/utils/escrow/Escrow.sol
Normal file
63
certora/munged/utils/escrow/Escrow.sol
Normal file
@ -0,0 +1,63 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts v4.4.1 (utils/escrow/Escrow.sol)
|
||||
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
import "../../access/Ownable.sol";
|
||||
import "../Address.sol";
|
||||
|
||||
/**
|
||||
* @title Escrow
|
||||
* @dev Base escrow contract, holds funds designated for a payee until they
|
||||
* withdraw them.
|
||||
*
|
||||
* Intended usage: This contract (and derived escrow contracts) should be a
|
||||
* standalone contract, that only interacts with the contract that instantiated
|
||||
* it. That way, it is guaranteed that all Ether will be handled according to
|
||||
* the `Escrow` rules, and there is no need to check for payable functions or
|
||||
* transfers in the inheritance tree. The contract that uses the escrow as its
|
||||
* payment method should be its owner, and provide public methods redirecting
|
||||
* to the escrow's deposit and withdraw.
|
||||
*/
|
||||
contract Escrow is Ownable {
|
||||
using Address for address payable;
|
||||
|
||||
event Deposited(address indexed payee, uint256 weiAmount);
|
||||
event Withdrawn(address indexed payee, uint256 weiAmount);
|
||||
|
||||
mapping(address => uint256) private _deposits;
|
||||
|
||||
function depositsOf(address payee) public view returns (uint256) {
|
||||
return _deposits[payee];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Stores the sent amount as credit to be withdrawn.
|
||||
* @param payee The destination address of the funds.
|
||||
*/
|
||||
function deposit(address payee) public payable virtual onlyOwner {
|
||||
uint256 amount = msg.value;
|
||||
_deposits[payee] += amount;
|
||||
emit Deposited(payee, amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Withdraw accumulated balance for a payee, forwarding all gas to the
|
||||
* recipient.
|
||||
*
|
||||
* WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.
|
||||
* Make sure you trust the recipient, or are either following the
|
||||
* checks-effects-interactions pattern or using {ReentrancyGuard}.
|
||||
*
|
||||
* @param payee The address whose funds will be withdrawn and transferred to.
|
||||
*/
|
||||
function withdraw(address payable payee) public virtual onlyOwner {
|
||||
uint256 payment = _deposits[payee];
|
||||
|
||||
_deposits[payee] = 0;
|
||||
|
||||
payee.sendValue(payment);
|
||||
|
||||
emit Withdrawn(payee, payment);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user