Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18233311 | 351 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
FXNLocker
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-28 */ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.8.20; interface IVeToken { struct LockedBalance { int128 amount; uint256 end; } function create_lock(uint256 _value, uint256 _unlock_time) external; function increase_amount(uint256 _value) external; function increase_unlock_time(uint256 _unlock_time) external; function withdraw() external; function locked__end(address) external view returns (uint256); function balanceOf(address) external view returns (uint256); } // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } interface IFeeDistributor { function claim() external returns (uint256); function token() external view returns (address); function checkpoint_token() external; function checkpoint_total_supply() external; function recover_balance(address token) external; function kill_me() external; function emergency_return() external returns (address); } // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/utils/SafeERC20.sol) // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol) /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); } /** * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Compatible with tokens that require the approval to be set to * 0 before setting it to a non-zero value. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } /** * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`. * Revert on invalid signature. */ function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } /// @title VeCRVLocker /// @notice Locker contract for locking tokens for a period of time compatible with the Voting Escrow contract from Curve /// @author Stake DAO /// @custom:contact [email protected] abstract contract VeCRVLocker { using SafeERC20 for IERC20; /// @notice Address of the depositor which will mint sdTokens. address public depositor; /// @notice Address of the accumulator which will accumulate rewards. address public accumulator; /// @notice Address of the governance contract. address public governance; /// @notice Address of the future governance contract. address public futureGovernance; /// @notice Address of the token being locked. address public immutable token; /// @notice Address of the Voting Escrow contract. address public immutable veToken; //////////////////////////////////////////////////////////////// /// --- EVENTS & ERRORS /////////////////////////////////////////////////////////////// /// @notice Event emitted when tokens are released from the locker. /// @param user Address who released the tokens. /// @param value Amount of tokens released. event Released(address indexed user, uint256 value); /// @notice Event emitted when a lock is created. /// @param value Amount of tokens locked. /// @param duration Duration of the lock. event LockCreated(uint256 value, uint256 duration); /// @notice Event emitted when a lock is increased. /// @param value Amount of tokens locked. /// @param duration Duration of the lock. event LockIncreased(uint256 value, uint256 duration); /// @notice Event emitted when the depositor is changed. /// @param newDepositor Address of the new depositor. event DepositorChanged(address indexed newDepositor); /// @notice Event emitted when the accumulator is changed. /// @param newAccumulator Address of the new accumulator. event AccumulatorChanged(address indexed newAccumulator); /// @notice Event emitted when a new governance is proposed. event GovernanceProposed(address indexed newGovernance); /// @notice Event emitted when the governance is changed. event GovernanceChanged(address indexed newGovernance); /// @notice Throws if caller is not the governance. error GOVERNANCE(); /// @notice Throws if caller is not the governance or depositor. error GOVERNANCE_OR_DEPOSITOR(); //////////////////////////////////////////////////////////////// /// --- MODIFIERS /////////////////////////////////////////////////////////////// modifier onlyGovernance() { if (msg.sender != governance) revert GOVERNANCE(); _; } modifier onlyGovernanceOrDepositor() { if (msg.sender != governance && msg.sender != depositor) revert GOVERNANCE_OR_DEPOSITOR(); _; } modifier onlyGovernanceOrAccumulator() { if (msg.sender != governance && msg.sender != accumulator) revert GOVERNANCE_OR_DEPOSITOR(); _; } constructor(address _governance, address _token, address _veToken) { token = _token; veToken = _veToken; governance = _governance; } /// @dev Returns the name of the locker. function name() public pure virtual returns (string memory) { return "VeCRV Locker"; } //////////////////////////////////////////////////////////////// /// --- LOCKER MANAGEMENT /////////////////////////////////////////////////////////////// /// @notice Create a lock for the contract on the Voting Escrow contract. /// @param _value Amount of tokens to lock /// @param _unlockTime Duration of the lock function createLock(uint256 _value, uint256 _unlockTime) external virtual onlyGovernanceOrDepositor { IERC20(token).safeApprove(veToken, type(uint256).max); IVeToken(veToken).create_lock(_value, _unlockTime); emit LockCreated(_value, _unlockTime); } /// @notice Increase the lock amount or duration for the contract on the Voting Escrow contract. /// @param _value Amount of tokens to lock /// @param _unlockTime Duration of the lock function increaseLock(uint256 _value, uint256 _unlockTime) external virtual onlyGovernanceOrDepositor { if (_value > 0) { IVeToken(veToken).increase_amount(_value); } if (_unlockTime > 0) { bool _canIncrease = (_unlockTime / 1 weeks * 1 weeks) > (IVeToken(veToken).locked__end(address(this))); if (_canIncrease) { IVeToken(veToken).increase_unlock_time(_unlockTime); } } emit LockIncreased(_value, _unlockTime); } /// @notice Claim the rewards from the fee distributor. /// @param _feeDistributor Address of the fee distributor. /// @param _token Address of the token to claim. /// @param _recipient Address to send the tokens to. function claimRewards(address _feeDistributor, address _token, address _recipient) external virtual onlyGovernanceOrAccumulator { uint256 claimed = IFeeDistributor(_feeDistributor).claim(); if (_recipient != address(0)) { IERC20(_token).safeTransfer(_recipient, claimed); } } /// @notice Release the tokens from the Voting Escrow contract when the lock expires. /// @param _recipient Address to send the tokens to function release(address _recipient) external virtual onlyGovernance { IVeToken(veToken).withdraw(); uint256 _balance = IERC20(token).balanceOf(address(this)); IERC20(token).safeTransfer(_recipient, _balance); emit Released(msg.sender, _balance); } //////////////////////////////////////////////////////////////// /// --- GOVERNANCE PARAMETERS /////////////////////////////////////////////////////////////// /// @notice Transfer the governance to a new address. /// @param _governance Address of the new governance. function transferGovernance(address _governance) external onlyGovernance { emit GovernanceProposed(futureGovernance = _governance); } /// @notice Accept the governance transfer. function acceptGovernance() external { if (msg.sender != futureGovernance) revert GOVERNANCE(); emit GovernanceChanged(governance = msg.sender); } /// @notice Change the depositor address. /// @param _depositor Address of the new depositor. function setDepositor(address _depositor) external onlyGovernance { emit DepositorChanged(depositor = _depositor); } function setAccumulator(address _accumulator) external onlyGovernance { emit AccumulatorChanged(accumulator = _accumulator); } /// @notice Execute an arbitrary transaction as the governance. /// @param to Address to send the transaction to. /// @param value Amount of ETH to send with the transaction. /// @param data Encoded data of the transaction. function execute(address to, uint256 value, bytes calldata data) external payable virtual onlyGovernance returns (bool, bytes memory) { (bool success, bytes memory result) = to.call{value: value}(data); return (success, result); } receive() external payable {} } /// @title FXNLocker /// @notice Locker contract for locking tokens for a period of time /// @author Stake DAO /// @custom:contact [email protected] contract FXNLocker is VeCRVLocker { constructor(address _depositor, address _token, address _veToken) VeCRVLocker(_depositor, _token, _veToken) {} function name() public pure override returns (string memory) { return "FXN Locker"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_depositor","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_veToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"GOVERNANCE","type":"error"},{"inputs":[],"name":"GOVERNANCE_OR_DEPOSITOR","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAccumulator","type":"address"}],"name":"AccumulatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDepositor","type":"address"}],"name":"DepositorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGovernance","type":"address"}],"name":"GovernanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGovernance","type":"address"}],"name":"GovernanceProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"LockCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"LockIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Released","type":"event"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accumulator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDistributor","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_unlockTime","type":"uint256"}],"name":"createLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"futureGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_unlockTime","type":"uint256"}],"name":"increaseLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_accumulator","type":"address"}],"name":"setAccumulator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"setDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"veToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405161134f38038061134f83398101604081905261002f9161007a565b6001600160a01b03918216608052811660a05260028054919092166001600160a01b03199091161790556100bd565b80516001600160a01b038116811461007557600080fd5b919050565b60008060006060848603121561008f57600080fd5b6100988461005e565b92506100a66020850161005e565b91506100b46040850161005e565b90509250925092565b60805160a05161122e610121600039600081816101c201528181610386015281816105bc0152818161063f015281816106eb0152818161080301526108470152600081816103370152818161040e0152818161049101526107e1015261122e6000f3fe6080604052600436106100f75760003560e01c8063b52c05fe1161008a578063d38bfff411610059578063d38bfff4146102c5578063edc34ece146102e5578063f2c098b714610305578063fc0c546a1461032557600080fd5b8063b52c05fe14610244578063b61d27f614610264578063c7c4ff4614610285578063cecb13ac146102a557600080fd5b80633b92eb23116100c65780633b92eb23146101b05780635aa6e675146101e45780635e70a6dc146102045780638070c5031461022457600080fd5b8063033811541461010357806306fdde03146101405780631916558714610179578063238efcbc1461019b57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b50600154610123906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014c57600080fd5b50604080518082018252600a815269232c27102637b1b5b2b960b11b602082015290516101379190610fec565b34801561018557600080fd5b50610199610194366004611022565b610359565b005b3480156101a757600080fd5b506101996104f1565b3480156101bc57600080fd5b506101237f000000000000000000000000000000000000000000000000000000000000000081565b3480156101f057600080fd5b50600254610123906001600160a01b031681565b34801561021057600080fd5b5061019961021f36600461103d565b61055c565b34801561023057600080fd5b50600354610123906001600160a01b031681565b34801561025057600080fd5b5061019961025f36600461103d565b610790565b61027761027236600461105f565b6108e2565b6040516101379291906110e6565b34801561029157600080fd5b50600054610123906001600160a01b031681565b3480156102b157600080fd5b506101996102c0366004611022565b610983565b3480156102d157600080fd5b506101996102e0366004611022565b6109f8565b3480156102f157600080fd5b50610199610300366004611101565b610a6d565b34801561031157600080fd5b50610199610320366004611022565b610b42565b34801561033157600080fd5b506101237f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b03163314610384576040516305189e0d60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156103df57600080fd5b505af11580156103f3573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a0823190602401602060405180830381865afa15801561045e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104829190611144565b90506104b86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610bb5565b60405181815233907fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e9060200160405180910390a25050565b6003546001600160a01b0316331461051c576040516305189e0d60e21b815260040160405180910390fd5b600280546001600160a01b031916339081179091556040517fa6a85f15b976d399f39ad43e515e75910bac714bc55eeff6131fb90780d6f74690600090a2565b6002546001600160a01b0316331480159061058257506000546001600160a01b03163314155b156105a0576040516336b401b760e01b815260040160405180910390fd5b811561062157604051631255d9df60e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634957677c90602401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b505050505b80156107525760405163adc6358960e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc6358990602401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190611144565b6106bf62093a808461115d565b6106cc9062093a8061117f565b1190508015610750576040516377fbd30960e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063eff7a61290602401600060405180830381600087803b15801561073757600080fd5b505af115801561074b573d6000803e3d6000fd5b505050505b505b60408051838152602081018390527f4879f53821b44fc745aeaf3081ec8771f44cac3bc5783d84c0024a2842b6844791015b60405180910390a15050565b6002546001600160a01b031633148015906107b657506000546001600160a01b03163314155b156107d4576040516336b401b760e01b815260040160405180910390fd5b61082a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000600019610c1d565b6040516365fc387360e01b815260048101839052602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906365fc387390604401600060405180830381600087803b15801561089357600080fd5b505af11580156108a7573d6000803e3d6000fd5b505060408051858152602081018590527f16c98f98e8586dcb1ba596347ab4ad208bd5cdef50bd70608711805ae0b70ab49350019050610784565b6002546000906060906001600160a01b03163314610913576040516305189e0d60e21b815260040160405180910390fd5b600080876001600160a01b03168787876040516109319291906111aa565b60006040518083038185875af1925050503d806000811461096e576040519150601f19603f3d011682016040523d82523d6000602084013e610973565b606091505b5090999098509650505050505050565b6002546001600160a01b031633146109ae576040516305189e0d60e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f76dc87d21cfee66d285c569296bc83491b75727ee3822c28eadbcdaf1b5d946f90600090a250565b6002546001600160a01b03163314610a23576040516305189e0d60e21b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b6990600090a250565b6002546001600160a01b03163314801590610a9357506001546001600160a01b03163314155b15610ab1576040516336b401b760e01b815260040160405180910390fd5b6000836001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b179190611144565b90506001600160a01b03821615610b3c57610b3c6001600160a01b0384168383610bb5565b50505050565b6002546001600160a01b03163314610b6d576040516305189e0d60e21b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917f165ea44172651427010df987e6fd454678cc3c3f3e7331ab563c596bc8e787f691a250565b6040516001600160a01b038316602482015260448101829052610c1890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d37565b505050565b801580610c975750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190611144565b155b610d075760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052610c1890849063095ea7b360e01b90606401610be1565b6000610d8c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e0c9092919063ffffffff16565b9050805160001480610dad575080806020019051810190610dad91906111ba565b610c185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610cfe565b6060610e1b8484600085610e23565b949350505050565b606082471015610e845760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610cfe565b600080866001600160a01b03168587604051610ea091906111dc565b60006040518083038185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610ee2565b606091505b5091509150610ef387838387610efe565b979650505050505050565b60608315610f6d578251600003610f66576001600160a01b0385163b610f665760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610cfe565b5081610e1b565b610e1b8383815115610f825781518083602001fd5b8060405162461bcd60e51b8152600401610cfe9190610fec565b60005b83811015610fb7578181015183820152602001610f9f565b50506000910152565b60008151808452610fd8816020860160208601610f9c565b601f01601f19169290920160200192915050565b602081526000610fff6020830184610fc0565b9392505050565b80356001600160a01b038116811461101d57600080fd5b919050565b60006020828403121561103457600080fd5b610fff82611006565b6000806040838503121561105057600080fd5b50508035926020909101359150565b6000806000806060858703121561107557600080fd5b61107e85611006565b935060208501359250604085013567ffffffffffffffff808211156110a257600080fd5b818701915087601f8301126110b657600080fd5b8135818111156110c557600080fd5b8860208285010111156110d757600080fd5b95989497505060200194505050565b8215158152604060208201526000610e1b6040830184610fc0565b60008060006060848603121561111657600080fd5b61111f84611006565b925061112d60208501611006565b915061113b60408501611006565b90509250925092565b60006020828403121561115657600080fd5b5051919050565b60008261117a57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176111a457634e487b7160e01b600052601160045260246000fd5b92915050565b8183823760009101908152919050565b6000602082840312156111cc57600080fd5b81518015158114610fff57600080fd5b600082516111ee818460208701610f9c565b919091019291505056fea26469706673582212205f18a30208711e1e305b04cbe3b9e36326b24154c2bc5132cd391bca0d0c66b464736f6c63430008140033000000000000000000000000000755fbe4a24d7478bfcfc1e561afce82d1ff62000000000000000000000000365accfca291e7d3914637abf1f7635db165bb09000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d469
Deployed Bytecode
0x6080604052600436106100f75760003560e01c8063b52c05fe1161008a578063d38bfff411610059578063d38bfff4146102c5578063edc34ece146102e5578063f2c098b714610305578063fc0c546a1461032557600080fd5b8063b52c05fe14610244578063b61d27f614610264578063c7c4ff4614610285578063cecb13ac146102a557600080fd5b80633b92eb23116100c65780633b92eb23146101b05780635aa6e675146101e45780635e70a6dc146102045780638070c5031461022457600080fd5b8063033811541461010357806306fdde03146101405780631916558714610179578063238efcbc1461019b57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b50600154610123906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014c57600080fd5b50604080518082018252600a815269232c27102637b1b5b2b960b11b602082015290516101379190610fec565b34801561018557600080fd5b50610199610194366004611022565b610359565b005b3480156101a757600080fd5b506101996104f1565b3480156101bc57600080fd5b506101237f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d46981565b3480156101f057600080fd5b50600254610123906001600160a01b031681565b34801561021057600080fd5b5061019961021f36600461103d565b61055c565b34801561023057600080fd5b50600354610123906001600160a01b031681565b34801561025057600080fd5b5061019961025f36600461103d565b610790565b61027761027236600461105f565b6108e2565b6040516101379291906110e6565b34801561029157600080fd5b50600054610123906001600160a01b031681565b3480156102b157600080fd5b506101996102c0366004611022565b610983565b3480156102d157600080fd5b506101996102e0366004611022565b6109f8565b3480156102f157600080fd5b50610199610300366004611101565b610a6d565b34801561031157600080fd5b50610199610320366004611022565b610b42565b34801561033157600080fd5b506101237f000000000000000000000000365accfca291e7d3914637abf1f7635db165bb0981565b6002546001600160a01b03163314610384576040516305189e0d60e21b815260040160405180910390fd5b7f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d4696001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156103df57600080fd5b505af11580156103f3573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f000000000000000000000000365accfca291e7d3914637abf1f7635db165bb096001600160a01b031691506370a0823190602401602060405180830381865afa15801561045e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104829190611144565b90506104b86001600160a01b037f000000000000000000000000365accfca291e7d3914637abf1f7635db165bb09168383610bb5565b60405181815233907fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e9060200160405180910390a25050565b6003546001600160a01b0316331461051c576040516305189e0d60e21b815260040160405180910390fd5b600280546001600160a01b031916339081179091556040517fa6a85f15b976d399f39ad43e515e75910bac714bc55eeff6131fb90780d6f74690600090a2565b6002546001600160a01b0316331480159061058257506000546001600160a01b03163314155b156105a0576040516336b401b760e01b815260040160405180910390fd5b811561062157604051631255d9df60e21b8152600481018390527f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d4696001600160a01b031690634957677c90602401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b505050505b80156107525760405163adc6358960e01b81523060048201526000907f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d4696001600160a01b03169063adc6358990602401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190611144565b6106bf62093a808461115d565b6106cc9062093a8061117f565b1190508015610750576040516377fbd30960e11b8152600481018390527f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d4696001600160a01b03169063eff7a61290602401600060405180830381600087803b15801561073757600080fd5b505af115801561074b573d6000803e3d6000fd5b505050505b505b60408051838152602081018390527f4879f53821b44fc745aeaf3081ec8771f44cac3bc5783d84c0024a2842b6844791015b60405180910390a15050565b6002546001600160a01b031633148015906107b657506000546001600160a01b03163314155b156107d4576040516336b401b760e01b815260040160405180910390fd5b61082a6001600160a01b037f000000000000000000000000365accfca291e7d3914637abf1f7635db165bb09167f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d469600019610c1d565b6040516365fc387360e01b815260048101839052602481018290527f000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d4696001600160a01b0316906365fc387390604401600060405180830381600087803b15801561089357600080fd5b505af11580156108a7573d6000803e3d6000fd5b505060408051858152602081018590527f16c98f98e8586dcb1ba596347ab4ad208bd5cdef50bd70608711805ae0b70ab49350019050610784565b6002546000906060906001600160a01b03163314610913576040516305189e0d60e21b815260040160405180910390fd5b600080876001600160a01b03168787876040516109319291906111aa565b60006040518083038185875af1925050503d806000811461096e576040519150601f19603f3d011682016040523d82523d6000602084013e610973565b606091505b5090999098509650505050505050565b6002546001600160a01b031633146109ae576040516305189e0d60e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f76dc87d21cfee66d285c569296bc83491b75727ee3822c28eadbcdaf1b5d946f90600090a250565b6002546001600160a01b03163314610a23576040516305189e0d60e21b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b6990600090a250565b6002546001600160a01b03163314801590610a9357506001546001600160a01b03163314155b15610ab1576040516336b401b760e01b815260040160405180910390fd5b6000836001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b179190611144565b90506001600160a01b03821615610b3c57610b3c6001600160a01b0384168383610bb5565b50505050565b6002546001600160a01b03163314610b6d576040516305189e0d60e21b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917f165ea44172651427010df987e6fd454678cc3c3f3e7331ab563c596bc8e787f691a250565b6040516001600160a01b038316602482015260448101829052610c1890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d37565b505050565b801580610c975750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190611144565b155b610d075760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052610c1890849063095ea7b360e01b90606401610be1565b6000610d8c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e0c9092919063ffffffff16565b9050805160001480610dad575080806020019051810190610dad91906111ba565b610c185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610cfe565b6060610e1b8484600085610e23565b949350505050565b606082471015610e845760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610cfe565b600080866001600160a01b03168587604051610ea091906111dc565b60006040518083038185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610ee2565b606091505b5091509150610ef387838387610efe565b979650505050505050565b60608315610f6d578251600003610f66576001600160a01b0385163b610f665760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610cfe565b5081610e1b565b610e1b8383815115610f825781518083602001fd5b8060405162461bcd60e51b8152600401610cfe9190610fec565b60005b83811015610fb7578181015183820152602001610f9f565b50506000910152565b60008151808452610fd8816020860160208601610f9c565b601f01601f19169290920160200192915050565b602081526000610fff6020830184610fc0565b9392505050565b80356001600160a01b038116811461101d57600080fd5b919050565b60006020828403121561103457600080fd5b610fff82611006565b6000806040838503121561105057600080fd5b50508035926020909101359150565b6000806000806060858703121561107557600080fd5b61107e85611006565b935060208501359250604085013567ffffffffffffffff808211156110a257600080fd5b818701915087601f8301126110b657600080fd5b8135818111156110c557600080fd5b8860208285010111156110d757600080fd5b95989497505060200194505050565b8215158152604060208201526000610e1b6040830184610fc0565b60008060006060848603121561111657600080fd5b61111f84611006565b925061112d60208501611006565b915061113b60408501611006565b90509250925092565b60006020828403121561115657600080fd5b5051919050565b60008261117a57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176111a457634e487b7160e01b600052601160045260246000fd5b92915050565b8183823760009101908152919050565b6000602082840312156111cc57600080fd5b81518015158114610fff57600080fd5b600082516111ee818460208701610f9c565b919091019291505056fea26469706673582212205f18a30208711e1e305b04cbe3b9e36326b24154c2bc5132cd391bca0d0c66b464736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000755fbe4a24d7478bfcfc1e561afce82d1ff62000000000000000000000000365accfca291e7d3914637abf1f7635db165bb09000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d469
-----Decoded View---------------
Arg [0] : _depositor (address): 0x000755Fbe4A24d7478bfcFC1E561AfCE82d1ff62
Arg [1] : _token (address): 0x365AccFCa291e7D3914637ABf1F7635dB165Bb09
Arg [2] : _veToken (address): 0xEC6B8A3F3605B083F7044C0F31f2cac0caf1d469
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000755fbe4a24d7478bfcfc1e561afce82d1ff62
Arg [1] : 000000000000000000000000365accfca291e7d3914637abf1f7635db165bb09
Arg [2] : 000000000000000000000000ec6b8a3f3605b083f7044c0f31f2cac0caf1d469
Deployed Bytecode Sourcemap
30115:261:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22872:26;;;;;;;;;;-1:-1:-1;22872:26:0;;;;-1:-1:-1;;;;;22872:26:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;22872:26:0;;;;;;;;30274:99;;;;;;;;;;-1:-1:-1;30346:19:0;;;;;;;;;;;-1:-1:-1;;;30346:19:0;;;;30274:99;;;;30346:19;30274:99;:::i;28001:293::-;;;;;;;;;;-1:-1:-1;28001:293:0;;;;;:::i;:::-;;:::i;:::-;;28800:169;;;;;;;;;;;;;:::i;23241:32::-;;;;;;;;;;;;;;;22960:25;;;;;;;;;;-1:-1:-1;22960:25:0;;;;-1:-1:-1;;;;;22960:25:0;;;26708:538;;;;;;;;;;-1:-1:-1;26708:538:0;;;;;:::i;:::-;;:::i;23054:31::-;;;;;;;;;;-1:-1:-1;23054:31:0;;;;-1:-1:-1;;;;;23054:31:0;;;26218:283;;;;;;;;;;-1:-1:-1;26218:283:0;;;;;:::i;:::-;;:::i;29611:303::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;22764:24::-;;;;;;;;;;-1:-1:-1;22764:24:0;;;;-1:-1:-1;;;;;22764:24:0;;;29219:140;;;;;;;;;;-1:-1:-1;29219:140:0;;;;;:::i;:::-;;:::i;28596:147::-;;;;;;;;;;-1:-1:-1;28596:147:0;;;;;:::i;:::-;;:::i;27491:354::-;;;;;;;;;;-1:-1:-1;27491:354:0;;;;;:::i;:::-;;:::i;29081:130::-;;;;;;;;;;-1:-1:-1;29081:130:0;;;;;:::i;:::-;;:::i;23146:30::-;;;;;;;;;;;;;;;28001:293;25151:10;;-1:-1:-1;;;;;25151:10:0;25137;:24;25133:49;;25170:12;;-1:-1:-1;;;25170:12:0;;;;;;;;;;;25133:49;28090:7:::1;-1:-1:-1::0;;;;;28081:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28141:38:0::1;::::0;-1:-1:-1;;;28141:38:0;;28173:4:::1;28141:38;::::0;::::1;160:51:1::0;28122:16:0::1;::::0;-1:-1:-1;28148:5:0::1;-1:-1:-1::0;;;;;28141:23:0::1;::::0;-1:-1:-1;28141:23:0::1;::::0;133:18:1;;28141:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28122:57:::0;-1:-1:-1;28190:48:0::1;-1:-1:-1::0;;;;;28197:5:0::1;28190:26;28217:10:::0;28122:57;28190:26:::1;:48::i;:::-;28256:30;::::0;3316:25:1;;;28265:10:0::1;::::0;28256:30:::1;::::0;3304:2:1;3289:18;28256:30:0::1;;;;;;;28070:224;28001:293:::0;:::o;28800:169::-;28866:16;;-1:-1:-1;;;;;28866:16:0;28852:10;:30;28848:55;;28891:12;;-1:-1:-1;;;28891:12:0;;;;;;;;;;;28848:55;28937:10;:23;;-1:-1:-1;;;;;;28937:23:0;28950:10;28937:23;;;;;;28919:42;;;;28937:10;;28919:42;28800:169::o;26708:538::-;25276:10;;-1:-1:-1;;;;;25276:10:0;25262;:24;;;;:51;;-1:-1:-1;25304:9:0;;-1:-1:-1;;;;;25304:9:0;25290:10;:23;;25262:51;25258:89;;;25322:25;;-1:-1:-1;;;25322:25:0;;;;;;;;;;;25258:89;26825:10;;26821:84:::1;;26852:41;::::0;-1:-1:-1;;;26852:41:0;;::::1;::::0;::::1;3316:25:1::0;;;26861:7:0::1;-1:-1:-1::0;;;;;26852:33:0::1;::::0;::::1;::::0;3289:18:1;;26852:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26821:84;26921:15:::0;;26917:270:::1;;27010:44;::::0;-1:-1:-1;;;27010:44:0;;27048:4:::1;27010:44;::::0;::::1;160:51:1::0;26953:17:0::1;::::0;27019:7:::1;-1:-1:-1::0;;;;;27010:29:0::1;::::0;::::1;::::0;133:18:1;;27010:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26974:21;26988:7;26974:11:::0;:21:::1;:::i;:::-;:31;::::0;26998:7:::1;26974:31;:::i;:::-;26973:82;26953:102;;27076:12;27072:104;;;27109:51;::::0;-1:-1:-1;;;27109:51:0;;::::1;::::0;::::1;3316:25:1::0;;;27118:7:0::1;-1:-1:-1::0;;;;;27109:38:0::1;::::0;::::1;::::0;3289:18:1;;27109:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27072:104;26938:249;26917:270;27204:34;::::0;;4018:25:1;;;4074:2;4059:18;;4052:34;;;27204::0::1;::::0;3991:18:1;27204:34:0::1;;;;;;;;26708:538:::0;;:::o;26218:283::-;25276:10;;-1:-1:-1;;;;;25276:10:0;25262;:24;;;;:51;;-1:-1:-1;25304:9:0;;-1:-1:-1;;;;;25304:9:0;25290:10;:23;;25262:51;25258:89;;;25322:25;;-1:-1:-1;;;25322:25:0;;;;;;;;;;;25258:89;26329:53:::1;-1:-1:-1::0;;;;;26336:5:0::1;26329:25;26355:7;-1:-1:-1::0;;26329:25:0::1;:53::i;:::-;26393:50;::::0;-1:-1:-1;;;26393:50:0;;::::1;::::0;::::1;4018:25:1::0;;;4059:18;;;4052:34;;;26402:7:0::1;-1:-1:-1::0;;;;;26393:29:0::1;::::0;::::1;::::0;3991:18:1;;26393:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26461:32:0::1;::::0;;4018:25:1;;;4074:2;4059:18;;4052:34;;;26461:32:0::1;::::0;-1:-1:-1;3991:18:1;;-1:-1:-1;26461:32:0::1;3844:248:1::0;29611:303:0;25151:10;;29770:4;;29776:12;;-1:-1:-1;;;;;25151:10:0;25137;:24;25133:49;;25170:12;;-1:-1:-1;;;25170:12:0;;;;;;;;;;;25133:49;29807:12:::1;29821:19:::0;29844:2:::1;-1:-1:-1::0;;;;;29844:7:0::1;29859:5;29866:4;;29844:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29806:65:0;;;;-1:-1:-1;29611:303:0;-1:-1:-1;;;;;;;29611:303:0:o;29219:140::-;25151:10;;-1:-1:-1;;;;;25151:10:0;25137;:24;25133:49;;25170:12;;-1:-1:-1;;;25170:12:0;;;;;;;;;;;25133:49;29324:11:::1;:26:::0;;-1:-1:-1;;;;;;29324:26:0::1;-1:-1:-1::0;;;;;29324:26:0;::::1;::::0;;::::1;::::0;;;29305:46:::1;::::0;::::1;::::0;-1:-1:-1;;29305:46:0::1;29219:140:::0;:::o;28596:147::-;25151:10;;-1:-1:-1;;;;;25151:10:0;25137;:24;25133:49;;25170:12;;-1:-1:-1;;;25170:12:0;;;;;;;;;;;25133:49;28704:16:::1;:30:::0;;-1:-1:-1;;;;;;28704:30:0::1;-1:-1:-1::0;;;;;28704:30:0;::::1;::::0;;::::1;::::0;;;28685:50:::1;::::0;::::1;::::0;-1:-1:-1;;28685:50:0::1;28596:147:::0;:::o;27491:354::-;25443:10;;-1:-1:-1;;;;;25443:10:0;25429;:24;;;;:53;;-1:-1:-1;25471:11:0;;-1:-1:-1;;;;;25471:11:0;25457:10;:25;;25429:53;25425:91;;;25491:25;;-1:-1:-1;;;25491:25:0;;;;;;;;;;;25425:91;27662:15:::1;27696;-1:-1:-1::0;;;;;27680:38:0::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27662:58:::0;-1:-1:-1;;;;;;27737:24:0;::::1;::::0;27733:105:::1;;27778:48;-1:-1:-1::0;;;;;27778:27:0;::::1;27806:10:::0;27818:7;27778:27:::1;:48::i;:::-;27651:194;27491:354:::0;;;:::o;29081:130::-;25151:10;;-1:-1:-1;;;;;25151:10:0;25137;:24;25133:49;;25170:12;;-1:-1:-1;;;25170:12:0;;;;;;;;;;;25133:49;29180:9:::1;:22:::0;;-1:-1:-1;;;;;;29180:22:0::1;-1:-1:-1::0;;;;;29180:22:0;::::1;::::0;;::::1;::::0;;29163:40:::1;::::0;29180:22;;29163:40:::1;::::0;::::1;29081:130:::0;:::o;16319:177::-;16429:58;;-1:-1:-1;;;;;4565:32:1;;16429:58:0;;;4547:51:1;4614:18;;;4607:34;;;16402:86:0;;16422:5;;-1:-1:-1;;;16452:23:0;4520:18:1;;16429:58:0;;;;-1:-1:-1;;16429:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;16429:58:0;-1:-1:-1;;;;;;16429:58:0;;;;;;;;;;16402:19;:86::i;:::-;16319:177;;;:::o;17215:582::-;17545:10;;;17544:62;;-1:-1:-1;17561:39:0;;-1:-1:-1;;;17561:39:0;;17585:4;17561:39;;;4864:34:1;-1:-1:-1;;;;;4934:15:1;;;4914:18;;;4907:43;17561:15:0;;;;;4799:18:1;;17561:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;17544:62;17522:166;;;;-1:-1:-1;;;17522:166:0;;5163:2:1;17522:166:0;;;5145:21:1;5202:2;5182:18;;;5175:30;5241:34;5221:18;;;5214:62;-1:-1:-1;;;5292:18:1;;;5285:52;5354:19;;17522:166:0;;;;;;;;;17726:62;;-1:-1:-1;;;;;4565:32:1;;17726:62:0;;;4547:51:1;4614:18;;;4607:34;;;17699:90:0;;17719:5;;-1:-1:-1;;;17749:22:0;4520:18:1;;17726:62:0;4373:274:1;20642:649:0;21066:23;21092:69;21120:4;21092:69;;;;;;;;;;;;;;;;;21100:5;-1:-1:-1;;;;;21092:27:0;;;:69;;;;;:::i;:::-;21066:95;;21180:10;:17;21201:1;21180:22;:56;;;;21217:10;21206:30;;;;;;;;;;;;:::i;:::-;21172:111;;;;-1:-1:-1;;;21172:111:0;;5868:2:1;21172:111:0;;;5850:21:1;5907:2;5887:18;;;5880:30;5946:34;5926:18;;;5919:62;-1:-1:-1;;;5997:18:1;;;5990:40;6047:19;;21172:111:0;5666:406:1;10201:229:0;10338:12;10370:52;10392:6;10400:4;10406:1;10409:12;10370:21;:52::i;:::-;10363:59;10201:229;-1:-1:-1;;;;10201:229:0:o;11287:455::-;11457:12;11515:5;11490:21;:30;;11482:81;;;;-1:-1:-1;;;11482:81:0;;6279:2:1;11482:81:0;;;6261:21:1;6318:2;6298:18;;;6291:30;6357:34;6337:18;;;6330:62;-1:-1:-1;;;6408:18:1;;;6401:36;6454:19;;11482:81:0;6077:402:1;11482:81:0;11575:12;11589:23;11616:6;-1:-1:-1;;;;;11616:11:0;11635:5;11642:4;11616:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11574:73;;;;11665:69;11692:6;11700:7;11709:10;11721:12;11665:26;:69::i;:::-;11658:76;11287:455;-1:-1:-1;;;;;;;11287:455:0:o;13860:644::-;14045:12;14074:7;14070:427;;;14102:10;:17;14123:1;14102:22;14098:290;;-1:-1:-1;;;;;7741:19:0;;;14312:60;;;;-1:-1:-1;;;14312:60:0;;6978:2:1;14312:60:0;;;6960:21:1;7017:2;6997:18;;;6990:30;7056:31;7036:18;;;7029:59;7105:18;;14312:60:0;6776:353:1;14312:60:0;-1:-1:-1;14409:10:0;14402:17;;14070:427;14452:33;14460:10;14472:12;15207:17;;:21;15203:388;;15439:10;15433:17;15496:15;15483:10;15479:2;15475:19;15468:44;15203:388;15566:12;15559:20;;-1:-1:-1;;;15559:20:0;;;;;;;;:::i;222:250:1:-;307:1;317:113;331:6;328:1;325:13;317:113;;;407:11;;;401:18;388:11;;;381:39;353:2;346:10;317:113;;;-1:-1:-1;;464:1:1;446:16;;439:27;222:250::o;477:271::-;519:3;557:5;551:12;584:6;579:3;572:19;600:76;669:6;662:4;657:3;653:14;646:4;639:5;635:16;600:76;:::i;:::-;730:2;709:15;-1:-1:-1;;705:29:1;696:39;;;;737:4;692:50;;477:271;-1:-1:-1;;477:271:1:o;753:220::-;902:2;891:9;884:21;865:4;922:45;963:2;952:9;948:18;940:6;922:45;:::i;:::-;914:53;753:220;-1:-1:-1;;;753:220:1:o;978:173::-;1046:20;;-1:-1:-1;;;;;1095:31:1;;1085:42;;1075:70;;1141:1;1138;1131:12;1075:70;978:173;;;:::o;1156:186::-;1215:6;1268:2;1256:9;1247:7;1243:23;1239:32;1236:52;;;1284:1;1281;1274:12;1236:52;1307:29;1326:9;1307:29;:::i;1347:248::-;1415:6;1423;1476:2;1464:9;1455:7;1451:23;1447:32;1444:52;;;1492:1;1489;1482:12;1444:52;-1:-1:-1;;1515:23:1;;;1585:2;1570:18;;;1557:32;;-1:-1:-1;1347:248:1:o;1600:733::-;1688:6;1696;1704;1712;1765:2;1753:9;1744:7;1740:23;1736:32;1733:52;;;1781:1;1778;1771:12;1733:52;1804:29;1823:9;1804:29;:::i;:::-;1794:39;;1880:2;1869:9;1865:18;1852:32;1842:42;;1935:2;1924:9;1920:18;1907:32;1958:18;1999:2;1991:6;1988:14;1985:34;;;2015:1;2012;2005:12;1985:34;2053:6;2042:9;2038:22;2028:32;;2098:7;2091:4;2087:2;2083:13;2079:27;2069:55;;2120:1;2117;2110:12;2069:55;2160:2;2147:16;2186:2;2178:6;2175:14;2172:34;;;2202:1;2199;2192:12;2172:34;2247:7;2242:2;2233:6;2229:2;2225:15;2221:24;2218:37;2215:57;;;2268:1;2265;2258:12;2215:57;1600:733;;;;-1:-1:-1;;2299:2:1;2291:11;;-1:-1:-1;;;1600:733:1:o;2338:299::-;2521:6;2514:14;2507:22;2496:9;2489:41;2566:2;2561;2550:9;2546:18;2539:30;2470:4;2586:45;2627:2;2616:9;2612:18;2604:6;2586:45;:::i;2642:334::-;2719:6;2727;2735;2788:2;2776:9;2767:7;2763:23;2759:32;2756:52;;;2804:1;2801;2794:12;2756:52;2827:29;2846:9;2827:29;:::i;:::-;2817:39;;2875:38;2909:2;2898:9;2894:18;2875:38;:::i;:::-;2865:48;;2932:38;2966:2;2955:9;2951:18;2932:38;:::i;:::-;2922:48;;2642:334;;;;;:::o;2981:184::-;3051:6;3104:2;3092:9;3083:7;3079:23;3075:32;3072:52;;;3120:1;3117;3110:12;3072:52;-1:-1:-1;3143:16:1;;2981:184;-1:-1:-1;2981:184:1:o;3352:217::-;3392:1;3418;3408:132;;3462:10;3457:3;3453:20;3450:1;3443:31;3497:4;3494:1;3487:15;3525:4;3522:1;3515:15;3408:132;-1:-1:-1;3554:9:1;;3352:217::o;3574:265::-;3647:9;;;3678;;3695:15;;;3689:22;;3675:37;3665:168;;3755:10;3750:3;3746:20;3743:1;3736:31;3790:4;3787:1;3780:15;3818:4;3815:1;3808:15;3665:168;3574:265;;;;:::o;4097:271::-;4280:6;4272;4267:3;4254:33;4236:3;4306:16;;4331:13;;;4306:16;4097:271;-1:-1:-1;4097:271:1:o;5384:277::-;5451:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:52;;;5520:1;5517;5510:12;5472:52;5552:9;5546:16;5605:5;5598:13;5591:21;5584:5;5581:32;5571:60;;5627:1;5624;5617:12;6484:287;6613:3;6651:6;6645:13;6667:66;6726:6;6721:3;6714:4;6706:6;6702:17;6667:66;:::i;:::-;6749:16;;;;;6484:287;-1:-1:-1;;6484:287:1:o
Swarm Source
ipfs://5f18a30208711e1e305b04cbe3b9e36326b24154c2bc5132cd391bca0d0c66b4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.