Description:
Multi-signature wallet contract requiring multiple confirmations for transaction execution.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"lib/ve-governance/src/delegation/SelfDelegationEscrowIVotesAdapter.sol": {
"content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import {EscrowIVotesAdapter} from "@delegation/EscrowIVotesAdapter.sol";
/// @title SelfDelegationEscrowIVotesAdapter
/// @notice A minimal fork of EscrowIVotesAdapter that enforces self-delegation only
/// @dev Restricts users to only delegate their voting power to themselves.
/// Preserves all auto-delegation behavior from the parent contract:
/// 1. Calling delegate(self) auto-delegates all existing tokens
/// 2. Future locks are auto-delegated via moveDelegateVotes hook
contract SelfDelegationEscrowIVotesAdapter is EscrowIVotesAdapter {
/// @notice Constructor with same signature as parent for deployment compatibility
/// @param _coefficients Array of [constant, linear, quadratic] coefficients for voting power curve
/// @param _maxEpochs Maximum number of epochs for the curve
constructor(
int256[3] memory _coefficients,
uint256 _maxEpochs
) EscrowIVotesAdapter(_coefficients, _maxEpochs) {}
/// @notice Override to enforce self-delegation only
/// @dev Users can ONLY delegate to themselves. Attempting to delegate to others reverts.
/// Auto-delegation behavior is preserved:
/// - All existing tokens are immediately delegated to self
/// - Future locks auto-delegate via moveDelegateVotes hook
/// @param _delegatee Must equal msg.sender, otherwise reverts with DelegationNotAllowed
function delegate(address _delegatee) public override whenNotPaused {
address sender = _msgSender();
// ENFORCE: Only self-delegation allowed
if (_delegatee != sender) {
revert DelegationNotAllowed();
}
// Call parent implementation to preserve all auto-delegation logic
super.delegate(_delegatee);
}
}
"
},
"lib/ve-governance/src/delegation/EscrowIVotesAdapter.sol": {
"content": "/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import {
IVotesUpgradeable
} from "@openzeppelin/contracts-upgradeable/governance/utils/IVotesUpgradeable.sol";
import {
SafeCastUpgradeable
} from "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol";
import {
ReentrancyGuardUpgradeable as ReentrancyGuard
} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
import {
PausableUpgradeable as Pausable
} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol";
import {IERC721EnumerableMintableBurnable as IERC721EMB} from "@lock/IERC721EMB.sol";
import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import {IERC6372} from "@openzeppelin/contracts/interfaces/IERC6372.sol";
import {IDAO} from "@aragon/osx-commons-contracts/src/dao/IDAO.sol";
import {
DaoAuthorizableUpgradeable as DaoAuthorizable
} from "@aragon/osx-commons-contracts/src/permission/auth/DaoAuthorizableUpgradeable.sol";
import {
IVotingEscrowIncreasingV1_2_0 as IVotingEscrow
} from "@escrow/IVotingEscrowIncreasing_v1_2_0.sol";
import {VotingEscrowV1_2_0 as VotingEscrow} from "@escrow/VotingEscrowIncreasing_v1_2_0.sol";
import {IClockV1_2_0 as IClock} from "@clock/IClock_v1_2_0.sol";
import {IEscrowIVotesAdapter, IDelegateMoveVoteRecipient} from "./IEscrowIVotesAdapter.sol";
import {CurveConstantLib} from "@libs/CurveConstantLib.sol";
import {SignedFixedPointMath} from "@libs/SignedFixedPointMathLib.sol";
import {DelegationHelper} from "./DelegationHelper.sol";
contract EscrowIVotesAdapter is
IERC6372,
ReentrancyGuard,
Pausable,
DaoAuthorizable,
UUPSUpgradeable,
DelegationHelper
{
using SafeCastUpgradeable for uint256;
/// @notice The Gauge admin can can create and manage voting gauges for token holders
bytes32 public constant DELEGATION_ADMIN_ROLE = keccak256("DELEGATION_ADMIN");
/// @notice The role used to call `setDelegateAddress` and delegate/undelegate for specific tokens.
bytes32 public constant DELEGATION_TOKEN_ROLE = keccak256("DELEGATION_TOKEN_ROLE");
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
int256 public immutable SHARED_QUADRATIC_COEFFICIENT;
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
int256 public immutable SHARED_LINEAR_COEFFICIENT;
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
int256 public immutable SHARED_CONSTANT_COEFFICIENT;
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
uint256 public immutable MAX_EPOCHS;
/// @notice Clock contract for epoch duration
address public escrowClock;
mapping(address => mapping(uint256 => int256)) internal slopeChanges;
mapping(address => mapping(uint256 => GlobalPoint)) public pointHistory;
mapping(address => address) private delegatees_;
mapping(address => uint256) public latestPointIndex;
mapping(address => bool) private autoDelegationDisabled_;
uint256 private maxTime;
/*///////////////////////////////////////////////////////////////
Initialization
//////////////////////////////////////////////////////////////*/
/// @custom:oz-upgrades-unsafe-allow constructor
constructor(int256[3] memory _coefficients, uint256 _maxEpochs) {
SHARED_CONSTANT_COEFFICIENT = _coefficients[0];
SHARED_LINEAR_COEFFICIENT = _coefficients[1];
SHARED_QUADRATIC_COEFFICIENT = _coefficients[2];
MAX_EPOCHS = _maxEpochs;
_disableInitializers();
}
function initialize(
address _dao,
address _escrow,
address _clock,
bool _startPaused
) external initializer {
__DaoAuthorizableUpgradeable_init(IDAO(_dao));
__ReentrancyGuard_init();
__DelegationHelper_init(_escrow);
escrowClock = _clock;
if (_startPaused) _pause();
maxTime = IClock(escrowClock).epochDuration() * MAX_EPOCHS;
}
function pause() external auth(DELEGATION_ADMIN_ROLE) {
_pause();
}
function unpause() external auth(DELEGATION_ADMIN_ROLE) {
_unpause();
}
/// @dev Note that by default, auto delegation of tokenIds is turned on.
function setAutoDelegationDisabled(bool _disabled) external {
address sender = _msgSender();
autoDelegationDisabled_[sender] = _disabled;
emit AutoDelegationDisabledSet(sender, _disabled);
}
/*//////////////////////////////////////////////////////////////
Delegate Functions
//////////////////////////////////////////////////////////////*/
/// @param _delegatee The new delegatee address.
/// @dev Allows to change a delegatee address. This is useful
/// for cases when delegator has huge number of tokens in
/// which case `delegate(address)` would go out of gas.
/// In rare cases, Caller first has to undelegate all tokens,
/// then call this function and then call `delegate(tokenIds)`.
function setDelegateAddress(
address _delegatee
) public whenNotPaused auth(DELEGATION_TOKEN_ROLE) {
address sender = _msgSender();
if (numberOfDelegatedTokens[sender] != 0) {
revert DelegationNotAllowed();
}
address currentDelegatee = delegates(sender);
delegatees_[sender] = _delegatee;
emit DelegateChanged(sender, currentDelegatee, _delegatee);
}
/// @dev Note that `_tokenIds` must be either owned or approved to sender and tokens must not be delegated yet.
/// @param _tokenIds The array of token ids that will be delegated to the current delegatee of `sender`.
function delegate(
uint256[] memory _tokenIds
) public virtual whenNotPaused auth(DELEGATION_TOKEN_ROLE) {
address sender = _msgSender();
address delegatee = delegates(sender);
if (delegatee == address(0)) {
revert DelegateeNotSet();
}
if (_tokenIds.length == 0) {
revert TokenListEmpty();
}
_delegate(sender, delegatee, _tokenIds, true);
}
/// @dev Undelegates currently delegated tokens from the current delegatee
/// and delegates all owned tokens by the sender to the new delegatee.
/// @param _delegatee The new delegatee address.
function delegate(address _delegatee) public virtual whenNotPaused {
address sender = _msgSender();
address currentDelegatee = delegates(sender);
uint256[] memory tokenIds = VotingEscrow(escrow).ownedTokens(sender);
uint256 ownedTokenLength = tokenIds.length;
if (currentDelegatee != address(0) && ownedTokenLength != 0) {
uint256[] memory delegatedTokenIds = getDelegatedTokens(tokenIds);
if (delegatedTokenIds.length != 0) {
_undelegate(sender, currentDelegatee, delegatedTokenIds, false);
}
}
delegatees_[sender] = _delegatee;
if (!autoDelegationDisabled(sender) && _delegatee != address(0) && ownedTokenLength != 0) {
_delegate(sender, _delegatee, tokenIds, false);
}
emit DelegateChanged(sender, currentDelegatee, _delegatee);
}
/// @dev Note that the token ids must be currently delegated and must be owned/approved to the sender.
/// @param _tokenIds The array of token ids that will be undelegated from the current delegatee.
function undelegate(
uint256[] memory _tokenIds
) public virtual whenNotPaused auth(DELEGATION_TOKEN_ROLE) {
address sender = _msgSender();
address delegatee = delegates(sender);
if (delegatee == address(0)) {
revert DelegateeNotSet();
}
if (_tokenIds.length == 0) {
revert TokenListEmpty();
}
_undelegate(sender, delegatee, _tokenIds, true);
}
/// @notice private helper function to delegate token ids to the `_delegatee`.
/// @dev It updates checkpoints, sets token delegation to true and
/// updates voting power on the address gauge voter.
/// @param _sender The address that owns `_tokenIds` and delegates.
/// @param _delegatee The new delegatee address to which `_tokenIds` will be delegated.
/// @param _tokenIds The array of token ids. Note that it's caller's responsibility to not
/// call this function for empty list of `_tokenIds`.
/// @param _validate The boolean flag of whether to validate that token ids are owned by the `_sender` or not.
/// In some cases, validation is not needed as caller already knows that there's no need.
function _delegate(
address _sender,
address _delegatee,
uint256[] memory _tokenIds,
bool _validate
) internal virtual {
(int256 totalBias, int256 totalSlope) = (0, 0);
for (uint256 i = 0; i < _tokenIds.length; i++) {
uint256 tokenId = _tokenIds[i];
if (_validate) {
if (!IVotingEscrow(escrow).isApprovedOrOwner(_sender, tokenId)) {
revert NotApprovedOrOwner();
}
if (tokenIsDelegated(tokenId)) {
revert TokenAlreadyDelegated(tokenId);
}
}
// Ensure that voting power is greater than 0.
// This can not be figured out with only `locked` data, as
// token might exist, but might not be warm.
if (IVotingEscrow(escrow).votingPower(tokenId) == 0) {
revert VotingPowerZero(tokenId);
}
_setDelegated(tokenId, true);
IVotingEscrow.LockedBalance memory locked = IVotingEscrow(escrow).locked(tokenId);
(int256 bias, int256 slope) = _getBiasAndSlope(_delegatee, locked, _positive);
totalBias += bias;
totalSlope += slope;
}
numberOfDelegatedTokens[_sender] += _tokenIds.length;
_checkpoint(totalBias, totalSlope, _delegatee);
IVotingEscrow(escrow).updateVotingPower(_sender, _delegatee);
emit TokensDelegated(_sender, _delegatee, _tokenIds);
}
/// @notice private helper function to undelegate token ids to the `_delegatee`.
/// @dev It updates checkpoints, sets token delegation to false and
/// updates voting power on the address gauge voter.
/// @param _sender The address that owns `_tokenIds` and undelegates.
/// @param _delegatee The delegatee address from which `_tokenIds` will be undelegated.
/// @param _tokenIds The array of token ids. Note that it's caller's responsibility to not
/// call this function for empty list of `_tokenIds`.
/// @param _validate The boolean flag of whether to validate that token ids are owned by the `_sender` or not.
/// In some cases, validation is not needed as caller already knows that there's no need.
function _undelegate(
address _sender,
address _delegatee,
uint256[] memory _tokenIds,
bool _validate
) internal virtual {
(int256 totalBias, int256 totalSlope) = (0, 0);
for (uint256 i = 0; i < _tokenIds.length; i++) {
uint256 tokenId = _tokenIds[i];
if (_validate) {
if (!IVotingEscrow(escrow).isApprovedOrOwner(_sender, tokenId)) {
revert NotApprovedOrOwner();
}
if (!tokenIsDelegated(tokenId)) {
revert TokenNotDelegated(tokenId);
}
}
_setDelegated(tokenId, false);
IVotingEscrow.LockedBalance memory locked = IVotingEscrow(escrow).locked(tokenId);
(int256 bias, int256 slope) = _getBiasAndSlope(_delegatee, locked, _negative);
totalBias += bias;
totalSlope += slope;
}
numberOfDelegatedTokens[_sender] -= _tokenIds.length;
_checkpoint(totalBias, totalSlope, _delegatee);
IVotingEscrow(escrow).updateVotingPower(_sender, _delegatee);
emit TokensUndelegated(_sender, _delegatee, _tokenIds);
}
/// @notice It returns which tokens are currently delegated from the list of `_tokenIds`.
function getDelegatedTokens(
uint256[] memory _tokenIds
) public view virtual returns (uint256[] memory) {
uint256[] memory delegatedTokenIds = new uint256[](_tokenIds.length);
uint256 count;
for (uint256 i = 0; i < _tokenIds.length; ++i) {
if (tokenIsDelegated(_tokenIds[i])) {
delegatedTokenIds[count++] = _tokenIds[i];
}
}
// Trim to size
assembly {
mstore(delegatedTokenIds, count)
}
return delegatedTokenIds;
}
/// @notice Whether an `account` has disabled auto delegation or not.
/// @param _account The address on which auto delegation is checked for.
/// @return True if auto delegation is disabled, otherwise false.
function autoDelegationDisabled(address _account) public view virtual returns (bool) {
return autoDelegationDisabled_[_account];
}
/*//////////////////////////////////////////////////////////////
IERC6372 Functions
//////////////////////////////////////////////////////////////*/
/// @inheritdoc IERC6372
function clock() external view returns (uint48) {
return uint48(block.timestamp);
}
/// @inheritdoc IERC6372
function CLOCK_MODE() external pure returns (string memory) {
return "mode=timestamp";
}
/*//////////////////////////////////////////////////////////////
Checkpoint Functions
//////////////////////////////////////////////////////////////*/
function checkpointTransition(
address _delegatee,
uint256 _transitionCount
) external whenNotPaused {
_checkpoint(0, 0, _delegatee, _transitionCount);
}
function _checkpoint(
int256 _totalBias,
int256 _totalSlope,
address _delegatee
) internal override {
_checkpoint(_totalBias, _totalSlope, _delegatee, 255);
}
function _checkpoint(
int256 _totalBias,
int256 _totalSlope,
address _delegatee,
uint256 _transitionCount
) internal override {
if(_transitionCount == 0) revert ZeroTransition();
GlobalPoint memory lastPoint = GlobalPoint({
bias: 0,
slope: 0,
writtenTs: uint48(block.timestamp)
});
uint256 latestPointIndex_ = latestPointIndex[_delegatee];
if (latestPointIndex_ > 0) {
lastPoint = pointHistory[_delegatee][latestPointIndex_];
}
// Get slope changes for the delegatee
mapping(uint256 => int256) storage slopeChanges_ = slopeChanges[_delegatee];
uint256 expectedWrittenTs;
{
uint256 checkpointInterval = IClock(escrowClock).checkpointInterval();
uint256 lastPointCheckpoint = lastPoint.writtenTs;
uint256 t_i = (lastPointCheckpoint / checkpointInterval) * checkpointInterval;
// Since `_checkpoint` can be called manually due to transition,
// the global point's writtenTs shouldn't be block.timestamp
// by default, but whatever the transition's max week is.
expectedWrittenTs = t_i + _transitionCount * checkpointInterval;
if (expectedWrittenTs > block.timestamp) {
expectedWrittenTs = block.timestamp;
}
for (uint256 i = 0; i < _transitionCount; ++i) {
t_i += checkpointInterval;
int256 dSlope;
if (t_i > expectedWrittenTs) {
t_i = expectedWrittenTs;
} else {
dSlope = slopeChanges_[t_i];
}
lastPoint.bias += lastPoint.slope * int256(t_i - lastPointCheckpoint);
lastPoint.slope -= dSlope;
if (lastPoint.slope < 0) lastPoint.slope = 0;
if (lastPoint.bias < 0) lastPoint.bias = 0;
lastPointCheckpoint = t_i;
if (t_i == expectedWrittenTs) {
break;
}
}
}
// totalBias and totalSlope can be negative, in which case
// it will subtract instead of adding.
lastPoint.bias += _totalBias;
lastPoint.slope += _totalSlope;
lastPoint.writtenTs = uint48(expectedWrittenTs);
if (lastPoint.slope < 0) lastPoint.slope = 0;
if (lastPoint.bias < 0) lastPoint.bias = 0;
latestPointIndex[_delegatee] = ++latestPointIndex_;
pointHistory[_delegatee][latestPointIndex_] = lastPoint;
}
/// @notice Proxies a call to the ERC721 contract
/// @dev Useful for calling contracts looking to validate if the contract is token-like
function balanceOf(address _account) public view virtual returns (uint256) {
address lockNFT = IVotingEscrow(escrow).lockNFT();
if (lockNFT == address(0)) return 0;
return IERC721EMB(lockNFT).balanceOf(_account);
}
/*//////////////////////////////////////////////////////////////
IVotes Function
//////////////////////////////////////////////////////////////*/
/// @notice Returns the current amount of votes that `account` has.
function getVotes(address _account) external view returns (uint256) {
return _delegateBalanceAt(_account, block.timestamp);
}
/// @notice Returns the amount of votes that `account` had at a specific moment in the past.
function getPastVotes(address _account, uint256 _timestamp) public view returns (uint256) {
return _delegateBalanceAt(_account, _timestamp);
}
/// @notice Returns the total supply of votes available at a specific moment in the past.
/// @dev This value is the sum of all available votes, which is not necessarily the sum
/// of all delegated votes. Votes that have not been delegated are still part of
/// total supply, even though they would not participate in a vote.
function getPastTotalSupply(uint256 _timestamp) external view returns (uint256) {
return IVotingEscrow(escrow).totalVotingPowerAt(_timestamp);
}
/// @inheritdoc IEscrowIVotesAdapter
function delegates(address _account) public view virtual override returns (address) {
return delegatees_[_account];
}
/// @dev Not implemented.
function delegateBySig(address, uint256, uint256, uint8, bytes32, bytes32) public virtual {
revert DelegateBySigNotSupported();
}
/*//////////////////////////////////////////////////////////////
Binary Search Functions
//////////////////////////////////////////////////////////////*/
function getPastDelegatePointIndex(
address _delegatee,
uint256 _timestamp
) internal view returns (uint256) {
uint256 latestPointIndex_ = latestPointIndex[_delegatee];
if (latestPointIndex_ == 0) return 0;
mapping(uint256 => GlobalPoint) storage pointHistory_ = pointHistory[_delegatee];
// First check most recent balance
if (pointHistory_[latestPointIndex_].writtenTs <= _timestamp) return (latestPointIndex_);
// Next check implicit zero balance
if (pointHistory_[1].writtenTs > _timestamp) return 0;
uint256 lower = 0;
uint256 upper = latestPointIndex_;
while (upper > lower) {
uint256 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
GlobalPoint storage delegatePoint = pointHistory_[center];
if (delegatePoint.writtenTs == _timestamp) {
return center;
} else if (delegatePoint.writtenTs < _timestamp) {
lower = center;
} else {
upper = center - 1;
}
}
return lower;
}
/// @notice Calculate total voting power at some point in the past
/// @param _timestamp Time to calculate the total voting power at
/// @return Total voting power at that time
function _delegateBalanceAt(
address _delegatee,
uint256 _timestamp
) internal view returns (uint256) {
uint256 index = getPastDelegatePointIndex(_delegatee, _timestamp);
// epoch 0 is an empty point
if (index == 0) return 0;
GlobalPoint memory point = pointHistory[_delegatee][index];
int256 bias = point.bias;
int256 slope = point.slope;
uint256 ts = point.writtenTs;
mapping(uint256 => int256) storage slopeChanges_ = slopeChanges[_delegatee];
uint256 checkpointInterval = IClock(escrowClock).checkpointInterval();
uint256 t_i = (ts / checkpointInterval) * checkpointInterval;
for (uint256 i = 0; i < 255; ++i) {
t_i += checkpointInterval;
int256 dSlope = 0;
if (t_i > _timestamp) {
t_i = _timestamp;
} else {
dSlope = slopeChanges_[t_i];
}
bias += slope * int256(t_i - ts);
if (t_i == _timestamp) {
break;
}
slope -= dSlope;
ts = t_i;
}
if (bias < 0) bias = 0;
return uint256(SignedFixedPointMath.fromFP(bias));
}
/*//////////////////////////////////////////////////////////////
Private Helper Functions
//////////////////////////////////////////////////////////////*/
/// @dev Note that this function also updates slopeChanges.
function _getBiasAndSlope(
address _delegatee,
IVotingEscrow.LockedBalance memory _locked,
function(int256) view returns (int256) op
) internal override returns (int256, int256) {
uint256 elapsed = block.timestamp - _locked.start;
elapsed = elapsed > maxTime ? maxTime : elapsed;
int256 amount = uint256(_locked.amount).toInt256();
int256 slope = amount * SHARED_LINEAR_COEFFICIENT;
int256 bias = slope *
int256(elapsed) +
amount *
SHARED_CONSTANT_COEFFICIENT;
if (bias < 0) bias = 0;
if (elapsed < maxTime) {
slope = op(slope);
slopeChanges[_delegatee][_locked.start + maxTime] += slope;
} else {
slope = 0;
}
return (op(bias), slope);
}
/// @notice Returns the address of the implementation contract in the [proxy storage slot](https://eips.ethereum.org/EIPS/eip-1967) slot the [UUPS proxy](https://eips.ethereum.org/EIPS/eip-1822) is pointing to.
/// @return The address of the implementation contract.
function implementation() public view returns (address) {
return _getImplementation();
}
/// @notice Internal method authorizing the upgrade of the contract via the [upgradeability mechanism for UUPS proxies](https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable) (see [ERC-1822](https://eips.ethereum.org/EIPS/eip-1822)).
function _authorizeUpgrade(address) internal virtual override auth(DELEGATION_ADMIN_ROLE) {}
/// @dev Reserved storage space to allow for layout changes in the future.
uint256[43] private __gap;
}
"
},
"lib/ve-governance/lib/openzeppelin-contracts-upgradeable/contracts/governance/utils/IVotesUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (governance/utils/IVotes.sol)
pragma solidity ^0.8.0;
/**
* @dev Common interface for {ERC20Votes}, {ERC721Votes}, and other {Votes}-enabled contracts.
*
* _Available since v4.5._
*/
interface IVotesUpgradeable {
/**
* @dev Emitted when an account changes their delegate.
*/
event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);
/**
* @dev Emitted when a token transfer or delegate change results in changes to a delegate's number of votes.
*/
event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);
/**
* @dev Returns the current amount of votes that `account` has.
*/
function getVotes(address account) external view returns (uint256);
/**
* @dev Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is
* configured to use block numbers, this will return the value at the end of the corresponding block.
*/
function getPastVotes(address account, uint256 timepoint) external view returns (uint256);
/**
* @dev Returns the total supply of votes available at a specific moment in the past. If the `clock()` is
* configured to use block numbers, this will return the value at the end of the corresponding block.
*
* NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes.
* Votes that have not been delegated are still part of total supply, even though they would not participate in a
* vote.
*/
function getPastTotalSupply(uint256 timepoint) external view returns (uint256);
/**
* @dev Returns the delegate that `account` has chosen.
*/
function delegates(address account) external view returns (address);
/**
* @dev Delegates votes from the sender to `delegatee`.
*/
function delegate(address delegatee) external;
/**
* @dev Delegates votes from signer to `delegatee`.
*/
function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external;
}
"
},
"lib/ve-governance/lib/openzeppelin-contracts-upgradeable/contracts/utils/math/SafeCastUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SafeCast.sol)
// This file was procedurally generated from scripts/generate/templates/SafeCast.js.
pragma solidity ^0.8.0;
/**
* @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
* checks.
*
* Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
* easily result in undesired exploitation or bugs, since developers usually
* assume that overflows raise errors. `SafeCast` restores this intuition by
* reverting the transaction when such an operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*
* Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
* all math on `uint256` and `int256` and then downcasting.
*/
library SafeCastUpgradeable {
/**
* @dev Returns the downcasted uint248 from uint256, reverting on
* overflow (when the input is greater than largest uint248).
*
* Counterpart to Solidity's `uint248` operator.
*
* Requirements:
*
* - input must fit into 248 bits
*
* _Available since v4.7._
*/
function toUint248(uint256 value) internal pure returns (uint248) {
require(value <= type(uint248).max, "SafeCast: value doesn't fit in 248 bits");
return uint248(value);
}
/**
* @dev Returns the downcasted uint240 from uint256, reverting on
* overflow (when the input is greater than largest uint240).
*
* Counterpart to Solidity's `uint240` operator.
*
* Requirements:
*
* - input must fit into 240 bits
*
* _Available since v4.7._
*/
function toUint240(uint256 value) internal pure returns (uint240) {
require(value <= type(uint240).max, "SafeCast: value doesn't fit in 240 bits");
return uint240(value);
}
/**
* @dev Returns the downcasted uint232 from uint256, reverting on
* overflow (when the input is greater than largest uint232).
*
* Counterpart to Solidity's `uint232` operator.
*
* Requirements:
*
* - input must fit into 232 bits
*
* _Available since v4.7._
*/
function toUint232(uint256 value) internal pure returns (uint232) {
require(value <= type(uint232).max, "SafeCast: value doesn't fit in 232 bits");
return uint232(value);
}
/**
* @dev Returns the downcasted uint224 from uint256, reverting on
* overflow (when the input is greater than largest uint224).
*
* Counterpart to Solidity's `uint224` operator.
*
* Requirements:
*
* - input must fit into 224 bits
*
* _Available since v4.2._
*/
function toUint224(uint256 value) internal pure returns (uint224) {
require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
return uint224(value);
}
/**
* @dev Returns the downcasted uint216 from uint256, reverting on
* overflow (when the input is greater than largest uint216).
*
* Counterpart to Solidity's `uint216` operator.
*
* Requirements:
*
* - input must fit into 216 bits
*
* _Available since v4.7._
*/
function toUint216(uint256 value) internal pure returns (uint216) {
require(value <= type(uint216).max, "SafeCast: value doesn't fit in 216 bits");
return uint216(value);
}
/**
* @dev Returns the downcasted uint208 from uint256, reverting on
* overflow (when the input is greater than largest uint208).
*
* Counterpart to Solidity's `uint208` operator.
*
* Requirements:
*
* - input must fit into 208 bits
*
* _Available since v4.7._
*/
function toUint208(uint256 value) internal pure returns (uint208) {
require(value <= type(uint208).max, "SafeCast: value doesn't fit in 208 bits");
return uint208(value);
}
/**
* @dev Returns the downcasted uint200 from uint256, reverting on
* overflow (when the input is greater than largest uint200).
*
* Counterpart to Solidity's `uint200` operator.
*
* Requirements:
*
* - input must fit into 200 bits
*
* _Available since v4.7._
*/
function toUint200(uint256 value) internal pure returns (uint200) {
require(value <= type(uint200).max, "SafeCast: value doesn't fit in 200 bits");
return uint200(value);
}
/**
* @dev Returns the downcasted uint192 from uint256, reverting on
* overflow (when the input is greater than largest uint192).
*
* Counterpart to Solidity's `uint192` operator.
*
* Requirements:
*
* - input must fit into 192 bits
*
* _Available since v4.7._
*/
function toUint192(uint256 value) internal pure returns (uint192) {
require(value <= type(uint192).max, "SafeCast: value doesn't fit in 192 bits");
return uint192(value);
}
/**
* @dev Returns the downcasted uint184 from uint256, reverting on
* overflow (when the input is greater than largest uint184).
*
* Counterpart to Solidity's `uint184` operator.
*
* Requirements:
*
* - input must fit into 184 bits
*
* _Available since v4.7._
*/
function toUint184(uint256 value) internal pure returns (uint184) {
require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits");
return uint184(value);
}
/**
* @dev Returns the downcasted uint176 from uint256, reverting on
* overflow (when the input is greater than largest uint176).
*
* Counterpart to Solidity's `uint176` operator.
*
* Requirements:
*
* - input must fit into 176 bits
*
* _Available since v4.7._
*/
function toUint176(uint256 value) internal pure returns (uint176) {
require(value <= type(uint176).max, "SafeCast: value doesn't fit in 176 bits");
return uint176(value);
}
/**
* @dev Returns the downcasted uint168 from uint256, reverting on
* overflow (when the input is greater than largest uint168).
*
* Counterpart to Solidity's `uint168` operator.
*
* Requirements:
*
* - input must fit into 168 bits
*
* _Available since v4.7._
*/
function toUint168(uint256 value) internal pure returns (uint168) {
require(value <= type(uint168).max, "SafeCast: value doesn't fit in 168 bits");
return uint168(value);
}
/**
* @dev Returns the downcasted uint160 from uint256, reverting on
* overflow (when the input is greater than largest uint160).
*
* Counterpart to Solidity's `uint160` operator.
*
* Requirements:
*
* - input must fit into 160 bits
*
* _Available since v4.7._
*/
function toUint160(uint256 value) internal pure returns (uint160) {
require(value <= type(uint160).max, "SafeCast: value doesn't fit in 160 bits");
return uint160(value);
}
/**
* @dev Returns the downcasted uint152 from uint256, reverting on
* overflow (when the input is greater than largest uint152).
*
* Counterpart to Solidity's `uint152` operator.
*
* Requirements:
*
* - input must fit into 152 bits
*
* _Available since v4.7._
*/
function toUint152(uint256 value) internal pure returns (uint152) {
require(value <= type(uint152).max, "SafeCast: value doesn't fit in 152 bits");
return uint152(value);
}
/**
* @dev Returns the downcasted uint144 from uint256, reverting on
* overflow (when the input is greater than largest uint144).
*
* Counterpart to Solidity's `uint144` operator.
*
* Requirements:
*
* - input must fit into 144 bits
*
* _Available since v4.7._
*/
function toUint144(uint256 value) internal pure returns (uint144) {
require(value <= type(uint144).max, "SafeCast: value doesn't fit in 144 bits");
return uint144(value);
}
/**
* @dev Returns the downcasted uint136 from uint256, reverting on
* overflow (when the input is greater than largest uint136).
*
* Counterpart to Solidity's `uint136` operator.
*
* Requirements:
*
* - input must fit into 136 bits
*
* _Available since v4.7._
*/
function toUint136(uint256 value) internal pure returns (uint136) {
require(value <= type(uint136).max, "SafeCast: value doesn't fit in 136 bits");
return uint136(value);
}
/**
* @dev Returns the downcasted uint128 from uint256, reverting on
* overflow (when the input is greater than largest uint128).
*
* Counterpart to Solidity's `uint128` operator.
*
* Requirements:
*
* - input must fit into 128 bits
*
* _Available since v2.5._
*/
function toUint128(uint256 value) internal pure returns (uint128) {
require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
return uint128(value);
}
/**
* @dev Returns the downcasted uint120 from uint256, reverting on
* overflow (when the input is greater than largest uint120).
*
* Counterpart to Solidity's `uint120` operator.
*
* Requirements:
*
* - input must fit into 120 bits
*
* _Available since v4.7._
*/
function toUint120(uint256 value) internal pure returns (uint120) {
require(value <= type(uint120).max, "SafeCast: value doesn't fit in 120 bits");
return uint120(value);
}
/**
* @dev Returns the downcasted uint112 from uint256, reverting on
* overflow (when the input is greater than largest uint112).
*
* Counterpart to Solidity's `uint112` operator.
*
* Requirements:
*
* - input must fit into 112 bits
*
* _Available since v4.7._
*/
function toUint112(uint256 value) internal pure returns (uint112) {
require(value <= type(uint112).max, "SafeCast: value doesn't fit in 112 bits");
return uint112(value);
}
/**
* @dev Returns the downcasted uint104 from uint256, reverting on
* overflow (when the input is greater than largest uint104).
*
* Counterpart to Solidity's `uint104` operator.
*
* Requirements:
*
* - input must fit into 104 bits
*
* _Available since v4.7._
*/
function toUint104(uint256 value) internal pure returns (uint104) {
require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits");
return uint104(value);
}
/**
* @dev Returns the downcasted uint96 from uint256, reverting on
* overflow (when the input is greater than largest uint96).
*
* Counterpart to Solidity's `uint96` operator.
*
* Requirements:
*
* - input must fit into 96 bits
*
* _Available since v4.2._
*/
function toUint96(uint256 value) internal pure returns (uint96) {
require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
return uint96(value);
}
/**
* @dev Returns the downcasted uint88 from uint256, reverting on
* overflow (when the input is greater than largest uint88).
*
* Counterpart to Solidity's `uint88` operator.
*
* Requirements:
*
* - input must fit into 88 bits
*
* _Available since v4.7._
*/
function toUint88(uint256 value) internal pure returns (uint88) {
require(value <= type(uint88).max, "SafeCast: value doesn't fit in 88 bits");
return uint88(value);
}
/**
* @dev Returns the downcasted uint80 from uint256, reverting on
* overflow (when the input is greater than largest uint80).
*
* Counterpart to Solidity's `uint80` operator.
*
* Requirements:
*
* - input must fit into 80 bits
*
* _Available since v4.7._
*/
function toUint80(uint256 value) internal pure returns (uint80) {
require(value <= type(uint80).max, "SafeCast: value doesn't fit in 80 bits");
return uint80(value);
}
/**
* @dev Returns the downcasted uint72 from uint256, reverting on
* overflow (when the input is greater than largest uint72).
*
* Counterpart to Solidity's `uint72` operator.
*
* Requirements:
*
* - input must fit into 72 bits
*
* _Available since v4.7._
*/
function toUint72(uint256 value) internal pure returns (uint72) {
require(value <= type(uint72).max, "SafeCast: value doesn't fit in 72 bits");
return uint72(value);
}
/**
* @dev Returns the downcasted uint64 from uint256, reverting on
* overflow (when the input is greater than largest uint64).
*
* Counterpart to Solidity's `uint64` operator.
*
* Requirements:
*
* - input must fit into 64 bits
*
* _Available since v2.5._
*/
function toUint64(uint256 value) internal pure returns (uint64) {
require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
return uint64(value);
}
/**
* @dev Returns the downcasted uint56 from uint256, reverting on
* overflow (when the input is greater than largest uint56).
*
* Counterpart to Solidity's `uint56` operator.
*
* Requirements:
*
* - input must fit into 56 bits
*
* _Available since v4.7._
*/
function toUint56(uint256 value) internal pure returns (uint56) {
require(value <= type(uint56).max, "SafeCast: value doesn't fit in 56 bits");
return uint56(value);
}
/**
* @dev Returns the downcasted uint48 from uint256, reverting on
* overflow (when the input is greater than largest uint48).
*
* Counterpart to Solidity's `uint48` operator.
*
* Requirements:
*
* - input must fit into 48 bits
*
* _Available since v4.7._
*/
function toUint48(uint256 value) internal pure returns (uint48) {
require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits");
return uint48(value);
}
/**
* @dev Returns the downcasted uint40 from uint256, reverting on
* overflow (when the input is greater than largest uint40).
*
* Counterpart to Solidity's `uint40` operator.
*
* Requirements:
*
* - input must fit into 40 bits
*
* _Available since v4.7._
*/
function toUint40(uint256 value) internal pure returns (uint40) {
require(value <= type(uint40).max, "SafeCast: value doesn't fit in 40 bits");
return uint40(value);
}
/**
* @dev Returns the downcasted uint32 from uint256, reverting on
* overflow (when the input is greater than largest uint32).
*
* Counterpart to Solidity's `uint32` operator.
*
* Requirements:
*
* - input must fit into 32 bits
*
* _Available since v2.5._
*/
function toUint32(uint256 value) internal pure returns (uint32) {
require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
return uint32(value);
}
/**
* @dev Returns the downcasted uint24 from uint256, reverting on
* overflow (when the input is greater than largest uint24).
*
* Counterpart to Solidity's `uint24` operator.
*
* Requirements:
*
* - input must fit into 24 bits
*
* _Available since v4.7._
*/
function toUint24(uint256 value) internal pure returns (uint24) {
require(value <= type(uint24).max, "SafeCast: value doesn't fit in 24 bits");
return uint24(value);
}
/**
* @dev Returns the downcasted uint16 from uint256, reverting on
* overflow (when the input is greater than largest uint16).
*
* Counterpart to Solidity's `uint16` operator.
*
* Requirements:
*
* - input must fit into 16 bits
*
* _Available since v2.5._
*/
function toUint16(uint256 value) internal pure returns (uint16) {
require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
return uint16(value);
}
/**
* @dev Returns the downcasted uint8 from uint256, reverting on
* overflow (when the input is greater than largest uint8).
*
* Counterpart to Solidity's `uint8` operator.
*
* Requirements:
*
* - input must fit into 8 bits
*
* _Available since v2.5._
*/
function toUint8(uint256 value) internal pure returns (uint8) {
require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
return uint8(value);
}
/**
* @dev Converts a signed int256 into an unsigned uint256.
*
* Requirements:
*
* - input must be greater than or equal to 0.
*
* _Available since v3.0._
*/
function toUint256(int256 value) internal pure returns (uint256) {
require(value >= 0, "SafeCast: value must be positive");
return uint256(value);
}
/**
* @dev Returns the downcasted int248 from int256, reverting on
* overflow (when the input is less than smallest int248 or
* greater than largest int248).
*
* Counterpart to Solidity's `int248` operator.
*
* Requirements:
*
* - input must fit into 248 bits
*
* _Available since v4.7._
*/
function toInt248(int256 value) internal pure returns (int248 downcasted) {
downcasted = int248(value);
require(downcasted == value, "SafeCast: value doesn't fit in 248 bits");
}
/**
* @dev Returns the downcasted int240 from int256, reverting on
* overflow (when the input is less than smallest int240 or
* greater than largest int240).
*
* Counterpart to Solidity's `int240` operator.
*
* Requirements:
*
* - input must fit into 240 bits
*
* _Available since v4.7._
*/
function toInt240(int256 value) internal pure returns (int240 downcasted) {
downcasted = int240(value);
require(downcasted == value, "SafeCast: value doesn't fit in 240 bits");
}
/**
* @dev Returns the downcasted int232 from int256, reverting on
* overflow (when the input is less than smallest int232 or
* greater than largest int232).
*
* Counterpart to Solidity's `int232` operator.
*
* Requirements:
*
* - input must fit into 232 bits
*
* _Available since v4.7._
*/
function toInt232(int256 value) internal pure returns (int232 downcasted) {
downcasted = int232(value);
require(downcasted == value, "SafeCast: value doesn't fit in 232 bits");
}
/**
* @dev Returns the downcasted int224 from int256, reverting on
* overflow (when the input is less than smallest int224 or
* greater than largest int224).
*
* Counterpart to Solidity's `int224` operator.
*
* Requirements:
*
* - input must fit into 224 bits
*
* _Available since v4.7._
*/
function toInt224(int256 value) internal pure returns (int224 downcasted) {
downcasted = int224(value);
require(downcasted == value, "SafeCast: value doesn't fit in 224 bits");
}
/**
* @dev Returns the downcasted int216 from int256, reverting on
* overflow (when the input is less than smallest int216 or
* greater than largest int216).
*
* Counterpart to Solidity's `int216` operator.
*
* Requirements:
*
* - input must fit into 216 bits
*
* _Available since v4.7._
*/
function toInt216(int256 value) internal pure returns (int216 downcasted) {
downcasted = int216(value);
require(downcasted == value, "SafeCast: value doesn't fit in 216 bits");
}
/**
* @dev Returns the downcasted int208 from int256, reverting on
* overflow (when the input is less than smallest int208 or
* greater than largest int208).
*
* Counterpart to Solidity's `int208` operator.
*
* Requirements:
*
* - input must fit into 208 bits
*
* _Available since v4.7._
*/
function toInt208(int256 value) internal pure returns (int208 downcasted) {
downcasted = int208(value);
require(downcasted == value, "SafeCast: value doesn't fit in 208 bits");
}
/**
* @dev Returns the downcasted int200 from int256, reverting on
* overflow (when the input is less than smallest int200 or
* greater than largest int200).
*
* Counterpart to Solidity's `int200` operator.
*
* Requirements:
*
* - input must fit into 200 bits
*
* _Available since v4.7._
*/
function toInt200(int256 value) internal pure returns (int200 downcasted) {
downcasted = int200(value);
require(downcasted == value, "SafeCast: value doesn't fit in 200 bits");
}
/**
* @dev Returns the downcasted int192 from int256, reverting on
* overflow (when the input is less than smallest int192 or
* greater than largest int192).
*
* Counterpart to Solidity's `int192` operator.
*
* Requirements:
*
* - input must fit into 192 bits
*
* _Available since v4.7._
*/
function toInt192(int256 value) internal pure returns (int192 downcasted) {
downcasted = int192(value);
require(downcasted == value, "SafeCast: value doesn't fit in 192 bits");
}
/**
* @dev Returns the downcasted int184 from int256, reverting on
* overflow (when the input is less than smallest int184 or
* greater than largest int184).
*
* Counterpart to Solidity's `int184` operator.
*
* Requirements:
*
* - input must fit into 184 bits
*
* _Available since v4.7._
*/
function toInt184(int256 value) internal pure returns (int184 downcasted) {
downcasted = int184(value);
require(downcasted == value, "SafeCast: value doesn't fit in 184 bits");
}
/**
* @dev Returns the downcasted int176 from int256, reverting on
* overflow (when the input is less than smallest int176 or
* greater than largest int176).
*
* Counterpart to Solidity's `int176` operator.
*
* Requirements:
*
* - input must fit into 176 bits
*
* _Available since v4.7._
*/
function toInt176(int256 value) internal pure returns (int176 downcasted) {
downcasted = int176(value);
require(downcasted == value, "SafeCast: value doesn't fit in 176 bits");
}
/**
* @dev Returns the downcasted int168 from int256, reverting on
* overflow (when the input is less than smallest int168 or
* greater than largest int168).
*
* Counterpart to Solidity's `int168` operator.
*
* Requirements:
*
* - input must fit into 168 bits
*
* _Available since v4.7._
*/
function toInt168(int256 value) internal pure returns (int168 downcasted) {
downcasted = int168(value);
require(downcasted == value, "SafeCast: value doesn't fit in 168 bits");
}
/**
* @dev Returns the downcasted int160 from int256, reverting on
* overflow (when the input is less than smallest int160 or
* greater than largest int160).
*
* Counterpart to Solidity's `int160` operator.
*
* Requirements:
*
* - input must fit into 160 bits
*
* _Available since v4.7._
*/
function toInt160(int256 value) internal pure returns (int160 downcasted) {
downcasted = int160(value);
require(downcasted == value, "SafeCast: value doesn't fit in 160 bits");
}
/**
* @dev Returns the downcasted int152 from int256, reverting on
* overflow (when the input is less than smallest int152 or
* greater than largest int152).
*
* Counterpart to Solidity's `int152` operator.
*
* Requirements:
*
* - input must fit into 152 bits
*
* _Available since v4.7._
*/
function toInt152(int256 value) internal pure returns (int152 downcasted) {
downcasted = int152(value);
require(downcasted == value, "SafeCast: value doesn't fit in 152 bits");
}
/**
* @dev Returns the downcasted int144 from int256, reverting on
* overflow (when the input is less than smallest int144 or
* greater than largest int144).
*
* Counterpart to Solidity's `int144` operator.
*
* Requirements:
*
* - input must fit into 144 bits
*
* _Available since v4.7._
*/
function toInt144(int256 value) internal pure returns (int144 downcasted) {
downcasted = int144(value);
require(downcasted == value, "SafeCast: value doesn't fit in 144 bits");
}
/**
* @dev Returns the downcasted int136 from int256, reverting on
* overflow (when the input is less than smallest int136 or
* greater than largest int136).
*
* Counterpart to Solidity's `int136` operator.
*
* Requirements:
*
* - input must fit into 136 bits
*
* _Available since v4.7._
*/
function toInt136(int256 value) internal pure returns (int136 downcasted) {
downcasted = int136(value);
require(downcasted == value, "SafeCast: value doesn't fit in 136 bits");
}
/**
* @dev Returns the downcasted int128 from int256, reverting on
* overflow (when the input is less than smallest int128 or
* greater than largest int128).
*
* Counterpart to Solidity's `int128` operator.
*
* Requirements:
*
* - input must fit into 128 bits
*
* _Available since v3.1._
*/
function toInt128(int256 value) internal pure returns (int128 downcasted) {
downcasted = int128(value);
require(downcasted == value, "SafeCast: value doesn't fit in 128 bits");
}
/**
* @dev Returns the downcasted int120 from int256, reverting on
* overflow (when the input is less than smallest int120 or
* greater than largest int120).
*
* Counterpart to Solidity's `int120` operator.
*
* Requirements:
*
* - input must fit into 120 bits
*
* _Available since v4.7._
*/
function toInt120(int256 value) internal pure returns (int120 downcasted) {
downcasted = int120(value);
require(downcasted == value, "SafeCast: value doesn't fit in 120 bits");
}
/**
* @dev Returns the downcasted int112 from int256, reverting on
* overflow (when the input is less than smallest int112 or
* greater than largest int112).
*
* Counterpart to Solidity's `int112` operator.
*
* Requirements:
*
* - input must fit into 112 bits
*
* _Available since v4.7._
*/
function toInt112(int256 value) internal pure returns (int112 downcasted) {
downcasted = int112(value);
require(downcasted == value, "SafeCast: value doesn't fit in 112 bits");
}
/**
* @dev Returns the downcasted int104 from int256, reverting on
* overflow (when the input is less than smallest int104 or
* greater than largest int104).
*
* Counterpart to Solidity's `int104` operator.
*
* Requirements:
*
* - input must fit into 104 bits
*
* _Available since v4.7._
*/
function toInt104(int256 value) internal pure returns (int104 downcasted) {
downcasted = int104(value);
require(downcasted == value, "SafeCast: value doesn't fit in 104 bits");
}
/**
* @dev Returns the downcasted int96 from int256, reverting on
* overflow (when the input is less than smallest int96 or
* greater than largest int96).
*
* Counterpart to Solidity's `int96` operator.
*
* Requirements:
*
* - input must fit into 96 bits
*
* _Available since v4.7._
*/
function toInt96(int256 value) internal pure returns (int96 downcasted) {
downcasted = int96(value);
require(downcasted == value, "SafeCast: value doesn't fit in 96 bits");
}
/**
* @dev Returns the downcasted int88 from int256, reverting on
* overflow (when the input is less than smallest int88 or
* greater than largest int88).
*
* Counterpart to Solidity's `int88` operator.
*
* Requirements:
*
* - input must fit into 88 bits
*
* _Available since v4.7._
*/
function toInt88(int256 value) internal pure returns (int88 downcasted) {
downcasted = int88(value);
require(downcasted == value, "SafeCast: value doesn't fit in 88 bits");
}
/**
* @dev Returns the downcasted int80 from int256, reverting on
* overflow (when the input is less than smallest int80 or
* greater than largest int80).
*
* Counterpart to Solidity's `int80` operator.
*
* Requirements:
*
* - input must fit into 80 bits
*
* _Available since v4.7._
*/
function toInt80(int256 value) internal pure returns (int80 downcasted) {
downcasted = int80(value);
require(downcasted == value, "SafeCast: value doesn't fit in 80 bits");
}
/**
* @dev Returns the downcasted int72 from int256, reverting on
* overflow (when the input is less than smallest int72 or
* greater than largest int72).
*
* Counterpart to Solidity's `int72` operator.
*
* Requirements:
*
* - input must fit into 72 bits
*
* _Available since v4.7._
*/
function toInt72(int256 value) internal pure returns (int72 downcasted) {
downcasted = int72(value);
require(downcasted == value, "SafeCast: value doesn't fit in 72 bits");
}
/**
* @dev Returns the downcasted int64 from int256, reverting on
* overflow (when the input is less than smallest int64 or
* greater than largest int64).
*
* Counterpart to Solidity's `int64` operator.
*
* Requirements:
*
* - input must fit into 64 bits
*
* _Available since v3.1._
*/
function toInt64(int256 value) internal pure returns (int64 downcasted) {
downcasted = int64(value);
require(downcasted == value, "SafeCast: value doesn't fit in 64 bits");
}
/**
* @dev Returns the downcasted int56 from int256, reverting on
* overflow (when the input is less than smallest int56 or
* greater than largest int56).
*
* Counterpart to Solidity's `int56` operator.
*
* Requirements:
*
* - input must fit into 56 bits
*
* _Available since v4.7._
*/
function toInt56(int256 value) internal pure returns (int56 downcasted) {
downcasted = int56(value);
require(downcasted == value, "SafeCast: value doesn't fit in 56 bits");
}
/**
* @dev Returns the downcasted int48 from int256, reverting on
* overflow (when the input is less than smallest int48 or
* greater than largest int48).
*
* Counterpart to Solidity's `int48` operator.
*
* Requirements:
*
* - input must fit into 48 bits
*
* _Available since v4.7._
*/
function toInt48(int256 value) internal pure returns (int48 downcasted) {
downcasted = int48(value);
require(downcasted == value, "SafeCast: value doesn't fit in 48 bits");
}
/**
* @dev Returns the downcasted int40 from int256, reverting on
* overflow (when the input is less than smallest int40 or
* greater than largest int40).
*
* Counterpart to Solidity's `int40` operator.
*
* Requirements:
*
* - input must fit into 40 bits
*
* _Available since v4.7._
*/
function toInt40(int256 value) internal pure returns (int40 downcasted) {
downcasted = int40(value);
require(downcasted == value, "SafeCast: value doesn't fit in 40 bits");
}
/**
* @dev Returns the downcasted int32 from int256, reverting on
* overflow (when the input is less than smallest int32 or
* greater than largest int32).
*
* Counterpart to Solidity's `int32` operator.
*
* Requirements:
*
* - input must fit into 32 bits
*
* _Available since v3.1._
*/
function toInt32(int256 value) internal pure returns (int32 downcasted) {
downcasted = int32(value);
require(downcasted == value, "SafeCast: value doesn't fit in 32 bits");
}
/**
* @dev Returns the downcasted int24 from int256, reverting on
* overflow (when the input is less than smallest int24 or
* greater than largest int24).
*
* Counterpart to Solidity's `int24` operator.
*
* Requirements:
*
* - input must fit into 24 bits
*
* _Available since v4.7._
*/
function toInt24(int256 value) internal pure returns (int24 downcasted) {
downcasted = int24(value);
require(downcasted == value, "SafeCast: value doesn't fit in 24 bits");
}
/**
* @dev Returns the downcasted int16 from int256, reverting on
* overflow (when the input is less than smallest int16 or
* greater than largest int16).
*
* Counterpart to Solidity's `int16` operator.
*
* Requirements:
*
* - input must fit into 16 bits
*
* _Available since v3.1._
*/
function toInt16(int256 value) internal pure returns (int16 downcasted) {
downcasted = int16(value);
require(downcasted == value, "SafeCast: value doesn't fit in 16 bits");
}
/**
* @dev Returns the downcasted int8 from int256, reverting on
* overflow (when the input is less than smallest int8 or
* greater than largest int8).
*
* Counterpart to Solidity's `int8` operator.
*
* Requirements:
*
* - input must fit into 8 bits
*
* _Available since v3.1._
*/
function toInt8(int256 value) internal pure returns (int8 downcasted) {
downcasted = int8(value);
require(downcasted == value, "SafeCast: value doesn't fit in 8 bits");
}
/**
* @dev Converts an unsigned uint256 into a signed int256.
*
* Requirements:
*
* - input must be less than or equal to maxInt256.
*
* _Available since v3.0._
*/
function toInt256(uint256 value) internal pure returns (int256) {
// Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
return int256(value);
}
}
"
},
"lib/ve-governance/lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
import "../proxy/utils/Ini
Submitted on: 2025-11-07 20:51:37
Comments
Log in to comment.
No comments yet.