Source Code
Overview
ETH Balance
31.351 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 1,581,535 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Faucet | 24809270 | 5 secs ago | IN | 0 ETH | 0.0000001 | ||||
Faucet | 24809268 | 9 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809266 | 13 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809263 | 19 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809261 | 23 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809261 | 23 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809259 | 27 secs ago | IN | 0 ETH | 0.00000009 | ||||
Faucet | 24809255 | 35 secs ago | IN | 0 ETH | 0.00000009 | ||||
Faucet | 24809254 | 37 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809246 | 53 secs ago | IN | 0 ETH | 0.00000008 | ||||
Faucet | 24809245 | 55 secs ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809243 | 1 mins ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809241 | 1 min ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809240 | 1 min ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809237 | 1 min ago | IN | 0 ETH | 0.00000008 | ||||
Faucet | 24809236 | 1 min ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809236 | 1 min ago | IN | 0 ETH | 0.00000008 | ||||
Faucet | 24809236 | 1 min ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809232 | 1 min ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809230 | 1 min ago | IN | 0 ETH | 0.00000007 | ||||
Faucet | 24809227 | 1 min ago | IN | 0 ETH | 0.00000008 | ||||
Faucet | 24809226 | 1 min ago | IN | 0 ETH | 0.00000008 | ||||
Faucet | 24809223 | 1 min ago | IN | 0 ETH | 0.00000008 | ||||
Faucet | 24809221 | 1 min ago | IN | 0 ETH | 0.00000009 | ||||
Faucet | 24809217 | 1 min ago | IN | 0 ETH | 0.00000007 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
24809246 | 53 secs ago | 0.001 ETH | ||||
24809237 | 1 min ago | 0.001 ETH | ||||
24809236 | 1 min ago | 0.001 ETH | ||||
24809227 | 1 min ago | 0.001 ETH | ||||
24809226 | 1 min ago | 0.001 ETH | ||||
24809223 | 1 min ago | 0.001 ETH | ||||
24809216 | 1 min ago | 0.001 ETH | ||||
24809206 | 2 mins ago | 0.001 ETH | ||||
24809203 | 2 mins ago | 0.001 ETH | ||||
24809170 | 3 mins ago | 0.001 ETH | ||||
24809158 | 3 mins ago | 0.001 ETH | ||||
24809147 | 4 mins ago | 0.001 ETH | ||||
24809145 | 4 mins ago | 0.001 ETH | ||||
24809143 | 4 mins ago | 0.001 ETH | ||||
24809134 | 4 mins ago | 0.001 ETH | ||||
24809120 | 5 mins ago | 0.001 ETH | ||||
24809115 | 5 mins ago | 0.001 ETH | ||||
24809113 | 5 mins ago | 0.001 ETH | ||||
24809105 | 5 mins ago | 0.001 ETH | ||||
24809065 | 6 mins ago | 0.001 ETH | ||||
24809058 | 7 mins ago | 0.001 ETH | ||||
24809052 | 7 mins ago | 0.001 ETH | ||||
24809046 | 7 mins ago | 0.001 ETH | ||||
24809046 | 7 mins ago | 0.001 ETH | ||||
24809039 | 7 mins ago | 0.001 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Faucet
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
No with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; import {Token} from "../test/mocks/Token.sol"; /// @title Faucet /// @notice A contract for distributing test tokens /// @dev This contract creates and distributes two types of ERC20 tokens for testing purposes contract Faucet { /// @notice The reserve token (WETH) Token public wstETH; /// @notice The second reserve token (CBETH) Token public cbETH; /// @notice The coupon token (USDC) Token public couponToken; /// @notice The address of the deployer address private deployer; /// @notice A mapping to track whitelisted addresses mapping(address => bool) private whitelist; /// @notice Initializes the contract by creating new instances of reserve and coupon tokens constructor(address _wstETH, address _cbETH, address _couponToken) { deployer = msg.sender; whitelist[deployer] = true; if (_wstETH != address(0)) { wstETH = Token(_wstETH); } else { wstETH = new Token("Wrapped fake liquid staked Ether 2.0", "wstETH", true); } if (_cbETH != address(0)) { cbETH = Token(_cbETH); } else { cbETH = new Token("Coinbase Wrapped Fake Staked ETH", "cbETH", true); } if (_couponToken != address(0)) { couponToken = Token(_couponToken); } else { couponToken = new Token("Circle Fake USD", "USDC", true); } } /// @notice Distributes a fixed amount of both reserve and coupon tokens to the caller /// @dev Mints 1 WETH and 5000 USDC to the caller's address function faucet() public isWhitelisted() { wstETH.mint(msg.sender, 1 ether); cbETH.mint(msg.sender, 1 ether); couponToken.mint(msg.sender, 5000 ether); } /// @notice Distributes a specified amount of both reserve and coupon tokens to the caller /// @param amountWstETH The amount of WstETH to mint /// @param amountCbETH The amount of cbETH to mint /// @param amountCoupon The amount of coupon tokens to mint /// @param amountEth The amount of ETH to send to the caller /// @param onBehalfOf The address to mint the tokens on behalf of function faucet(uint256 amountWstETH, uint256 amountCbETH, uint256 amountCoupon, uint256 amountEth, address onBehalfOf) public isWhitelisted() { address user = onBehalfOf == address(0) ? msg.sender : onBehalfOf; if (amountWstETH > 0) { wstETH.mint(user, amountWstETH); } if (amountCbETH > 0) { cbETH.mint(user, amountCbETH); } if (amountCoupon > 0) { couponToken.mint(user, amountCoupon); } if (amountEth > 0) { (bool success, ) = payable(user).call{value: amountEth}(""); require(success, "Faucet: ETH transfer failed"); } } /// @notice Distributes a specified amount of both reserve and coupon tokens to the caller /// @param amountWstETH The amount of WstETH to mint /// @param amountCbETH The amount of cbETH to mint /// @param amountCoupon The amount of coupon tokens to mint /// @param amountEth The amount of ETH to send to the caller /// @param users The addresses to mint the tokens on behalf of function faucet(uint256 amountWstETH, uint256 amountCbETH, uint256 amountCoupon, uint256 amountEth, address[] memory users) public isWhitelisted() { for (uint256 i = 0; i < users.length; i++) { address user = users[i]; faucet(amountWstETH, amountCbETH, amountCoupon, amountEth, user); } } /// @notice Distributes a specified amount of reserve tokens to the caller /// @param amount The amount of reserve tokens to mint /// @param onBehalfOf The address to mint the tokens on behalf of function faucetReserve(uint256 amount, address onBehalfOf) public isWhitelisted() { address user = onBehalfOf == address(0) ? msg.sender : onBehalfOf; wstETH.mint(user, amount); } /// @notice Distributes a specified amount of coupon tokens to the caller /// @param amount The amount of coupon tokens to mint /// @param onBehalfOf The address to mint the tokens on behalf of function faucetCoupon(uint256 amount, address onBehalfOf) public isWhitelisted() { address user = onBehalfOf == address(0) ? msg.sender : onBehalfOf; couponToken.mint(user, amount); } /// @notice Adds an address to the whitelist /// @param account The address to add to the whitelist function addToWhitelist(address account) public isWhitelisted() { whitelist[account] = true; } /// @notice Fallback function to receive ETH receive() external payable {} modifier isWhitelisted() { require(whitelist[msg.sender], "Not whitelisted"); _; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract Token is ERC20 { uint8 private tokenDecimals; mapping(address => bool) private whitelist; bool public restricted; address public deployer; string private _tokenName; string private _tokenSymbol; constructor (string memory _nameParam, string memory _symbolParam, bool _restricted) ERC20(_nameParam, _symbolParam) { tokenDecimals = 18; _tokenName = _nameParam; _tokenSymbol = _symbolParam; restricted = _restricted; deployer = msg.sender; whitelist[deployer] = true; // Neeel's address whitelist[0x2516115b336E3a5A0790D8B6EfdF5bD8D7d263Dd] = true; } function mint(address to, uint256 amount) public { require(!restricted || whitelist[msg.sender], "Not authorized to mint"); _mint(to, amount); } function burn(address account, uint256 amount) public { require(!restricted || whitelist[msg.sender], "Not authorized to burn"); _burn(account, amount); } function addToWhitelist(address account) public { require(whitelist[msg.sender], "Not authorized to add to whitelist"); whitelist[account] = true; } function decimals() public view virtual override returns (uint8) { return tokenDecimals; } function setDecimals(uint8 _decimals) external { if (totalSupply() > 0) { revert("Cannot set decimals after minting"); } tokenDecimals = _decimals; } function name() public view virtual override returns (string memory) { return _tokenName; } function symbol() public view virtual override returns (string memory) { return _tokenSymbol; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "./IERC20.sol"; import {IERC20Metadata} from "./extensions/IERC20Metadata.sol"; import {Context} from "../../utils/Context.sol"; import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@uniswap/v3-periphery/=lib/v3-periphery/", "@uniswap/v3-core/=lib/v3-core/", "@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", "@chainlink/contracts/=lib/chainlink/contracts/", "@create3/contracts/=lib/create3/contracts/", "@balancer/contracts/=lib/balancer-v2-monorepo/pkg/", "@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/", "balancer-v2-monorepo/=lib/balancer-v2-monorepo/", "chainlink/=lib/chainlink/", "create3/=lib/create3/contracts/", "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/", "v3-core/=lib/v3-core/", "v3-periphery/=lib/v3-periphery/contracts/" ], "optimizer": { "enabled": false, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_wstETH","type":"address"},{"internalType":"address","name":"_cbETH","type":"address"},{"internalType":"address","name":"_couponToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cbETH","outputs":[{"internalType":"contract Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"couponToken","outputs":[{"internalType":"contract Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWstETH","type":"uint256"},{"internalType":"uint256","name":"amountCbETH","type":"uint256"},{"internalType":"uint256","name":"amountCoupon","type":"uint256"},{"internalType":"uint256","name":"amountEth","type":"uint256"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"faucet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWstETH","type":"uint256"},{"internalType":"uint256","name":"amountCbETH","type":"uint256"},{"internalType":"uint256","name":"amountCoupon","type":"uint256"},{"internalType":"uint256","name":"amountEth","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"faucet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"faucet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"faucetCoupon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"faucetReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wstETH","outputs":[{"internalType":"contract Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052346100305761001a610014610111565b91610521565b610022610035565b6111c36106fc82396111c390f35b61003b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100679061003f565b810190811060018060401b0382111761007f57604052565b610049565b90610097610090610035565b928361005d565b565b5f80fd5b60018060a01b031690565b6100b19061009d565b90565b6100bd816100a8565b036100c457565b5f80fd5b905051906100d5826100b4565b565b909160608284031261010c576101096100f2845f85016100c8565b9361010081602086016100c8565b936040016100c8565b90565b610099565b61012f6133528038038061012481610084565b9283398101906100d7565b909192565b5f1b90565b9061014a60018060a01b0391610134565b9181191691161790565b90565b61016b6101666101709261009d565b610154565b61009d565b90565b61017c90610157565b90565b61018890610173565b90565b90565b906101a361019e6101aa9261017f565b61018b565b8254610139565b9055565b5f1c90565b60018060a01b031690565b6101ca6101cf916101ae565b6101b3565b90565b6101dc90546101be565b90565b906101e99061017f565b5f5260205260405f2090565b9061020160ff91610134565b9181191691161790565b151590565b6102199061020b565b90565b90565b9061023461022f61023b92610210565b61021c565b82546101f5565b9055565b90565b61025661025161025b9261023f565b610154565b61009d565b90565b61026790610242565b90565b60209181520190565b60207f20322e3000000000000000000000000000000000000000000000000000000000917f577261707065642066616b65206c6971756964207374616b65642045746865725f8201520152565b6102cd602460409261026a565b6102d681610273565b0190565b5f7f7773744554480000000000000000000000000000000000000000000000000000910152565b61030e600660209261026a565b610317816102da565b0190565b6103249061020b565b9052565b919061035b906040610353610346606087018781035f8901526102c0565b8681036020880152610301565b94019061031b565b565b610365610035565b3d5f823e3d90fd5b61037690610157565b90565b6103829061036d565b90565b90565b9061039d6103986103a492610379565b610385565b8254610139565b9055565b6103b19061036d565b90565b5f7f436f696e6261736520577261707065642046616b65205374616b656420455448910152565b6103e76020809261026a565b6103f0816103b4565b0190565b5f7f6362455448000000000000000000000000000000000000000000000000000000910152565b610428600560209261026a565b610431816103f4565b0190565b9190610468906040610460610453606087018781035f8901526103db565b868103602088015261041b565b94019061031b565b565b5f7f436972636c652046616b65205553440000000000000000000000000000000000910152565b61049e600f60209261026a565b6104a78161046a565b0190565b5f7f5553444300000000000000000000000000000000000000000000000000000000910152565b6104df600460209261026a565b6104e8816104ab565b0190565b919061051f90604061051761050a606087018781035f890152610491565b86810360208801526104d2565b94019061031b565b565b61052c33600361018e565b61054b6001610546600461054060036101d2565b906101df565b61021f565b8061056661056061055b5f61025e565b6100a8565b916100a8565b14155f146106a35761057a610580916103a8565b5f610388565b5b8061059c6105966105915f61025e565b6100a8565b916100a8565b14155f1461064a576105b06105b7916103a8565b6001610388565b5b806105d36105cd6105c85f61025e565b6100a8565b916100a8565b14155f146105f1576105e76105ee916103a8565b6002610388565b5b565b5060016105fc610035565b90611a93820182811060018060401b0382111761064557829161062691611a936118bf85396104ec565b03905ff080156106405761063b906002610388565b6105ef565b61035d565b610049565b506001610655610035565b90611a93820182811060018060401b0382111761069e57829161067f91611a936118bf8539610435565b03905ff0801561069957610694906001610388565b6105b8565b61035d565b610049565b5060016106ae610035565b90611a93820182811060018060401b038211176106f65782916106d891611a936118bf8539610328565b03905ff080156106f1576106ec905f610388565b610581565b61035d565b61004956fe60806040526004361015610015575b366105d957005b61001f5f356100ae565b806329024ee1146100a9578063457cf77a146100a45780634aa07e641461009f57806351bd11661461009a57806362e16f2014610095578063813c7bce146100905780639688a8521461008b578063de5f72fd146100865763e43252d70361000e576105a6565b610555565b610521565b6104ea565b610460565b6103fe565b6103ba565b610378565b610295565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b90565b6100d2816100c6565b036100d957565b5f80fd5b905035906100ea826100c9565b565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610118906100f0565b810190811067ffffffffffffffff82111761013257604052565b6100fa565b9061014a6101436100b4565b928361010e565b565b67ffffffffffffffff81116101645760208091020190565b6100fa565b5f80fd5b60018060a01b031690565b6101819061016d565b90565b61018d81610178565b0361019457565b5f80fd5b905035906101a582610184565b565b909291926101bc6101b78261014c565b610137565b93818552602080860192028301928184116101f957915b8383106101e05750505050565b602080916101ee8486610198565b8152019201916101d3565b610169565b9080601f8301121561021c57816020610219933591016101a7565b90565b6100ec565b91909160a08184031261028b5761023a835f83016100dd565b9261024881602084016100dd565b9261025682604085016100dd565b9261026483606083016100dd565b92608082013567ffffffffffffffff81116102865761028392016101fe565b90565b6100c2565b6100be565b5f0190565b346102c7576102b16102a8366004610221565b939290926107be565b6102b96100b4565b806102c381610290565b0390f35b6100ba565b5f9103126102d657565b6100be565b1c90565b60018060a01b031690565b6102fa9060086102ff93026102db565b6102df565b90565b9061030d91546102ea565b90565b61031c60025f90610302565b90565b90565b61033661033161033b9261016d565b61031f565b61016d565b90565b61034790610322565b90565b6103539061033e565b90565b61035f9061034a565b9052565b9190610376905f60208501940190610356565b565b346103a8576103883660046102cc565b6103a4610393610310565b61039b6100b4565b91829182610363565b0390f35b6100ba565b6103b75f80610302565b90565b346103ea576103ca3660046102cc565b6103e66103d56103ad565b6103dd6100b4565b91829182610363565b0390f35b6100ba565b6103fb60015f90610302565b90565b3461042e5761040e3660046102cc565b61042a6104196103ef565b6104216100b4565b91829182610363565b0390f35b6100ba565b919060408382031261045b578061044f610458925f86016100dd565b93602001610198565b90565b6100be565b3461048f57610479610473366004610433565b90610961565b6104816100b4565b8061048b81610290565b0390f35b6100ba565b919060a0838203126104e5576104ac815f85016100dd565b926104ba82602083016100dd565b926104e26104cb84604085016100dd565b936104d981606086016100dd565b93608001610198565b90565b6100be565b3461051c576105066104fd366004610494565b93929092610d5f565b61050e6100b4565b8061051881610290565b0390f35b6100ba565b346105505761053a610534366004610433565b90610e52565b6105426100b4565b8061054c81610290565b0390f35b6100ba565b34610583576105653660046102cc565b61056d6110ea565b6105756100b4565b8061057f81610290565b0390f35b6100ba565b906020828203126105a15761059e915f01610198565b90565b6100be565b346105d4576105be6105b9366004610588565b611182565b6105c66100b4565b806105d081610290565b0390f35b6100ba565b5f80fd5b6105e69061033e565b90565b906105f3906105dd565b5f5260205260405f2090565b5f1c90565b60ff1690565b61061661061b916105ff565b610604565b90565b610628905461060a565b90565b60209181520190565b5f7f4e6f742077686974656c69737465640000000000000000000000000000000000910152565b610668600f60209261062b565b61067181610634565b0190565b61068a9060208101905f81830391015261065b565b90565b1561069457565b61069c6100b4565b62461bcd60e51b8152806106b260048201610675565b0390fd5b906106df949392916106da6106d56106d0600433906105e9565b61061e565b61068d565b610754565b565b90565b6106f86106f36106fd926106e1565b61031f565b6100c6565b90565b600161070c91016100c6565b90565b5190565b634e487b7160e01b5f52603260045260245ffd5b906107318261070f565b811015610742576020809102010190565b610713565b6107519051610178565b90565b92919094936107625f6106e4565b5b8061077e6107786107738561070f565b6100c6565b916100c6565b10156107b5576107b0906107ab61079e610799858490610727565b610747565b87908a8790899293610d5f565b610700565b610763565b50505050509050565b906107cb949392916106b6565b565b906107f3916107ee6107e96107e4600433906105e9565b61061e565b61068d565b6108a4565b565b61080961080461080e926106e1565b61031f565b61016d565b90565b61081a906107f5565b90565b61082961082e916105ff565b6102df565b90565b61083b905461081d565b90565b5f80fd5b60e01b90565b5f91031261085257565b6100be565b61086090610178565b9052565b61086d906100c6565b9052565b91602061089292949361088b60408201965f830190610857565b0190610864565b565b61089c6100b4565b3d5f823e3d90fd5b90806108c06108ba6108b55f610811565b610178565b91610178565b145f1461095c5750335b6108dc6108d76002610831565b61034a565b916340c10f19919092803b15610957576109095f80946109146108fd6100b4565b97889687958694610842565b845260048401610871565b03925af1801561095257610926575b50565b610945905f3d811161094b575b61093d818361010e565b810190610848565b5f610923565b503d610933565b610894565b61083e565b6108ca565b9061096b916107cd565b565b906109969493929161099161098c610987600433906105e9565b61061e565b61068d565b610ac6565b565b6109a190610322565b90565b6109ad90610998565b90565b6109b99061033e565b90565b905090565b6109cc5f80926109bc565b0190565b6109d9906109c1565b90565b67ffffffffffffffff81116109fa576109f66020916100f0565b0190565b6100fa565b90610a11610a0c836109dc565b610137565b918252565b606090565b3d5f14610a3657610a2b3d6109ff565b903d5f602084013e5b565b610a3e610a16565b90610a34565b5f7f4661756365743a20455448207472616e73666572206661696c65640000000000910152565b610a78601b60209261062b565b610a8181610a44565b0190565b610a9a9060208101905f818303910152610a6b565b90565b15610aa457565b610aac6100b4565b62461bcd60e51b815280610ac260048201610a85565b0390fd5b9380610ae2610adc610ad75f610811565b610178565b91610178565b145f14610d5a5750335b9380610b00610afa5f6106e4565b916100c6565b11610cc6575b5080610b1a610b145f6106e4565b916100c6565b11610c31575b5080610b34610b2e5f6106e4565b916100c6565b11610b9c575b5080610b4e610b485f6106e4565b916100c6565b11610b58575b5050565b5f8091610b6f610b6a610b95956109a4565b6109b0565b90610b786100b4565b9081610b83816109d0565b03925af1610b8f610a1b565b50610a9d565b5f80610b54565b610bae610ba96002610831565b61034a565b906340c10f1990849092803b15610c2c57610bdc5f8094610be7610bd06100b4565b97889687958694610842565b845260048401610871565b03925af18015610c2757610bfb575b610b3a565b610c1a905f3d8111610c20575b610c12818361010e565b810190610848565b5f610bf6565b503d610c08565b610894565b61083e565b610c43610c3e6001610831565b61034a565b906340c10f1990859092803b15610cc157610c715f8094610c7c610c656100b4565b97889687958694610842565b845260048401610871565b03925af18015610cbc57610c90575b610b20565b610caf905f3d8111610cb5575b610ca7818361010e565b810190610848565b5f610c8b565b503d610c9d565b610894565b61083e565b610cd7610cd25f610831565b61034a565b906340c10f1990869092803b15610d5557610d055f8094610d10610cf96100b4565b97889687958694610842565b845260048401610871565b03925af18015610d5057610d24575b610b06565b610d43905f3d8111610d49575b610d3b818361010e565b810190610848565b5f610d1f565b503d610d31565b610894565b61083e565b610aec565b90610d6c9493929161096d565b565b90610d9491610d8f610d8a610d85600433906105e9565b61061e565b61068d565b610d96565b565b9080610db2610dac610da75f610811565b610178565b91610178565b145f14610e4d5750335b610dcd610dc85f610831565b61034a565b916340c10f19919092803b15610e4857610dfa5f8094610e05610dee6100b4565b97889687958694610842565b845260048401610871565b03925af18015610e4357610e17575b50565b610e36905f3d8111610e3c575b610e2e818361010e565b810190610848565b5f610e14565b503d610e24565b610894565b61083e565b610dbc565b90610e5c91610d6e565b565b610e7a610e75610e70600433906105e9565b61061e565b61068d565b610e82610f22565b565b90565b610e9b610e96610ea092610e84565b61031f565b6100c6565b90565b610eac90610e87565b9052565b916020610ed1929493610eca60408201965f830190610857565b0190610ea3565b565b90565b610eea610ee5610eef92610ed3565b61031f565b6100c6565b90565b610efb90610ed6565b9052565b916020610f20929493610f1960408201965f830190610857565b0190610ef2565b565b610f33610f2e5f610831565b61034a565b6340c10f1933670de0b6b3a764000092803b156110e557610f675f8094610f72610f5b6100b4565b97889687958694610842565b845260048401610eb0565b03925af180156110e0576110b4575b50610f94610f8f6001610831565b61034a565b6340c10f1933670de0b6b3a764000092803b156110af57610fc85f8094610fd3610fbc6100b4565b97889687958694610842565b845260048401610eb0565b03925af180156110aa5761107e575b50610ff5610ff06002610831565b61034a565b6340c10f193369010f0cf064dd5920000092803b156110795761102b5f809461103661101f6100b4565b97889687958694610842565b845260048401610eff565b03925af1801561107457611048575b50565b611067905f3d811161106d575b61105f818361010e565b810190610848565b5f611045565b503d611055565b610894565b61083e565b61109d905f3d81116110a3575b611095818361010e565b810190610848565b5f610fe2565b503d61108b565b610894565b61083e565b6110d3905f3d81116110d9575b6110cb818361010e565b810190610848565b5f610f81565b503d6110c1565b610894565b61083e565b6110f2610e5e565b565b6111199061111461110f61110a600433906105e9565b61061e565b61068d565b61116a565b565b5f1b90565b9061112c60ff9161111b565b9181191691161790565b151590565b61114490611136565b90565b90565b9061115f61115a6111669261113b565b611147565b8254611120565b9055565b6111809061117b60019160046105e9565b61114a565b565b61118b906110f4565b56fea264697066735822122076e8aa78656f53800965e35a251de8743b9d450cb49e96187ae0d3175d4589c664736f6c634300081a00336080604052346100305761001a6100146101bd565b916105b2565b610022610035565b611432610661823961143290f35b61003b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100679061003f565b810190811060018060401b0382111761007f57604052565b610049565b90610097610090610035565b928361005d565b565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b60018060401b0381116100c5576100c160209161003f565b0190565b610049565b90825f9392825e0152565b909291926100ea6100e5826100a9565b610084565b9381855260208501908284011161010657610104926100ca565b565b6100a5565b9080601f8301121561012957816020610126935191016100d5565b90565b6100a1565b151590565b61013c8161012e565b0361014357565b5f80fd5b9050519061015482610133565b565b90916060828403126101b8575f82015160018060401b0381116101b3578361017f91840161010b565b9260208301519060018060401b0382116101ae576101a2816101ab93860161010b565b93604001610147565b90565b61009d565b61009d565b610099565b6101db611a93803803806101d081610084565b928339810190610156565b909192565b90565b60ff1690565b90565b6102006101fb610205926101e0565b6101e9565b6101e3565b90565b5f1b90565b9061021960ff91610208565b9181191691161790565b61023761023261023c926101e3565b6101e9565b6101e3565b90565b90565b9061025761025261025e92610223565b61023f565b825461020d565b9055565b5190565b634e487b7160e01b5f52602260045260245ffd5b906001600283049216801561029a575b602083101461029557565b610266565b91607f169161028a565b5f5260205f2090565b601f602091010490565b1b90565b919060086102d69102916102d05f19846102b7565b926102b7565b9181191691161790565b90565b6102f76102f26102fc926102e0565b6101e9565b6102e0565b90565b90565b9190610318610313610320936102e3565b6102ff565b9083546102bb565b9055565b5f90565b61033a91610334610324565b91610302565b565b5b818110610348575050565b806103555f600193610328565b0161033d565b9190601f811161036b575b505050565b61037761039c936102a4565b906020610383846102ad565b830193106103a4575b610395906102ad565b019061033c565b5f8080610366565b91506103958192905061038c565b1c90565b906103c6905f19906008026103b2565b191690565b816103d5916103b6565b906002021790565b906103e781610262565b9060018060401b0382116104a55761040982610403855461027a565b8561035b565b602090601f831160011461043d5791809161042c935f92610431575b50506103cb565b90555b565b90915001515f80610425565b601f1983169161044c856102a4565b925f5b81811061048d57509160029391856001969410610473575b5050500201905561042f565b610483910151601f8416906103b6565b90555f8080610467565b9193602060018192878701518155019501920161044f565b610049565b906104b4916103dd565b565b6104bf9061012e565b90565b90565b906104da6104d56104e1926104b6565b6104c2565b825461020d565b9055565b60081b90565b906104fe610100600160a81b03916104e5565b9181191691161790565b60018060a01b031690565b61052761052261052c92610508565b6101e9565b610508565b90565b61053890610513565b90565b6105449061052f565b90565b90565b9061055f61055a6105669261053b565b610547565b82546104eb565b9055565b60081c90565b60018060a01b031690565b61058761058c9161056a565b610570565b90565b610599905461057b565b90565b906105a69061053b565b5f5260205260405f2090565b6105f292916105e46105eb926105c9818490610648565b6105dd6105d660126101ec565b6005610242565b60086104aa565b60096104aa565b60076104c5565b6105fd33600761054a565b61061c60016106176006610611600761058f565b9061059c565b6104c5565b61064660016106416006732516115b336e3a5a0790d8b6efdf5bd8d7d263dd9061059c565b6104c5565b565b9061065761065e9260036104aa565b60046104aa565b56fe60806040526004361015610013575b61071e565b61001d5f3561010c565b806306fdde0314610107578063095ea7b31461010257806318160ddd146100fd57806323b872dd146100f8578063313ce567146100f357806340c10f19146100ee5780637072c6b1146100e957806370a08231146100e45780637a1395aa146100df57806395d89b41146100da5780639dc29fac146100d5578063a9059cbb146100d0578063d5f39488146100cb578063dd62ed3e146100c65763e43252d70361000e576106eb565b6106b5565b610653565b6105ba565b610586565b610551565b61051e565b6104a8565b610455565b6103e2565b6103a8565b61034a565b6102db565b610283565b61019a565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f91031261012a57565b61011c565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b61017061017960209361017e936101678161012f565b93848093610133565b9586910161013c565b610147565b0190565b6101979160208201915f818403910152610151565b90565b346101ca576101aa366004610120565b6101c66101b561087b565b6101bd610112565b91829182610182565b0390f35b610118565b60018060a01b031690565b6101e3906101cf565b90565b6101ef816101da565b036101f657565b5f80fd5b90503590610207826101e6565b565b90565b61021581610209565b0361021c57565b5f80fd5b9050359061022d8261020c565b565b9190604083820312610257578061024b610254925f86016101fa565b93602001610220565b90565b61011c565b151590565b61026a9061025c565b9052565b9190610281905f60208501940190610261565b565b346102b4576102b061029f61029936600461022f565b90610895565b6102a7610112565b9182918261026e565b0390f35b610118565b6102c290610209565b9052565b91906102d9905f602085019401906102b9565b565b3461030b576102eb366004610120565b6103076102f66108e4565b6102fe610112565b918291826102c6565b0390f35b610118565b90916060828403126103455761034261032b845f85016101fa565b9361033981602086016101fa565b93604001610220565b90565b61011c565b3461037b57610377610366610360366004610310565b916108fa565b61036e610112565b9182918261026e565b0390f35b610118565b60ff1690565b61038f90610380565b9052565b91906103a6905f60208501940190610386565b565b346103d8576103b8366004610120565b6103d46103c3610954565b6103cb610112565b91829182610393565b0390f35b610118565b5f0190565b34610411576103fb6103f536600461022f565b90610a5a565b610403610112565b8061040d816103dd565b0390f35b610118565b1c90565b60ff1690565b6104309060086104359302610416565b61041a565b90565b906104439154610420565b90565b61045260075f90610438565b90565b3461048557610465366004610120565b610481610470610446565b610478610112565b9182918261026e565b0390f35b610118565b906020828203126104a3576104a0915f016101fa565b90565b61011c565b346104d8576104d46104c36104be36600461048a565b610abe565b6104cb610112565b918291826102c6565b0390f35b610118565b6104e681610380565b036104ed57565b5f80fd5b905035906104fe826104dd565b565b9060208282031261051957610516915f016104f1565b90565b61011c565b3461054c57610536610531366004610500565b610bd4565b61053e610112565b80610548816103dd565b0390f35b610118565b3461058157610561366004610120565b61057d61056c610c22565b610574610112565b91829182610182565b0390f35b610118565b346105b55761059f61059936600461022f565b90610cba565b6105a7610112565b806105b1816103dd565b0390f35b610118565b346105eb576105e76105d66105d036600461022f565b90610d08565b6105de610112565b9182918261026e565b0390f35b610118565b60018060a01b031690565b61060b9060086106109302610416565b6105f0565b90565b9061061e91546105fb565b90565b61062e6007600190610613565b90565b61063a906101da565b9052565b9190610651905f60208501940190610631565b565b3461068357610663366004610120565b61067f61066e610621565b610676610112565b9182918261063e565b0390f35b610118565b91906040838203126106b057806106a46106ad925f86016101fa565b936020016101fa565b90565b61011c565b346106e6576106e26106d16106cb366004610688565b90610d40565b6106d9610112565b918291826102c6565b0390f35b610118565b34610719576107036106fe36600461048a565b610e3f565b61070b610112565b80610715816103dd565b0390f35b610118565b5f80fd5b606090565b634e487b7160e01b5f52602260045260245ffd5b906001600283049216801561075b575b602083101461075657565b610727565b91607f169161074b565b60209181520190565b5f5260205f2090565b905f929180549061079161078a8361073b565b8094610765565b916001811690815f146107e857506001146107ac575b505050565b6107b9919293945061076e565b915f925b8184106107d057505001905f80806107a7565b600181602092959395548486015201910192906107bd565b92949550505060ff19168252151560200201905f80806107a7565b9061080d91610777565b90565b634e487b7160e01b5f52604160045260245ffd5b9061082e90610147565b810190811067ffffffffffffffff82111761084857604052565b610810565b9061086d6108669261085d610112565b93848092610803565b0383610824565b565b6108789061084d565b90565b610883610722565b5061088e600861086f565b90565b5f90565b6108b2916108a1610891565b506108aa610e77565b919091610e84565b600190565b5f90565b5f1c90565b90565b6108cf6108d4916108bb565b6108c0565b90565b6108e190546108c3565b90565b6108ec6108b7565b506108f760026108d7565b90565b9161092492610907610891565b5061091c610913610e77565b82908491610ed4565b919091610f88565b600190565b5f90565b60ff1690565b61093f610944916108bb565b61092d565b90565b6109519054610933565b90565b61095c610929565b506109676005610947565b90565b61097661097b916108bb565b61041a565b90565b610988905461096a565b90565b90565b6109a261099d6109a7926101cf565b61098b565b6101cf565b90565b6109b39061098e565b90565b6109bf906109aa565b90565b906109cc906109b6565b5f5260205260405f2090565b5f7f4e6f7420617574686f72697a656420746f206d696e7400000000000000000000910152565b610a0c6016602092610133565b610a15816109d8565b0190565b610a2e9060208101905f8183039101526109ff565b90565b15610a3857565b610a40610112565b62461bcd60e51b815280610a5660048201610a19565b0390fd5b90610a8791610a72610a6c600761097e565b1561025c565b8015610a89575b610a8290610a31565b611025565b565b50610a82610aa1610a9c600633906109c2565b61097e565b9050610a79565b90610ab2906109b6565b5f5260205260405f2090565b610ad4610ad991610acd6108b7565b505f610aa8565b6108d7565b90565b90565b610af3610aee610af892610adc565b61098b565b610209565b90565b60207f6700000000000000000000000000000000000000000000000000000000000000917f43616e6e6f742073657420646563696d616c73206166746572206d696e74696e5f8201520152565b610b556021604092610133565b610b5e81610afb565b0190565b610b779060208101905f818303910152610b48565b90565b5f1b90565b90610b8b60ff91610b7a565b9181191691161790565b610ba9610ba4610bae92610380565b61098b565b610380565b90565b90565b90610bc9610bc4610bd092610b95565b610bb1565b8254610b7f565b9055565b610bdc6108e4565b610bee610be85f610adf565b91610209565b11610c0057610bfe906005610bb4565b565b610c08610112565b62461bcd60e51b815280610c1e60048201610b62565b0390fd5b610c2a610722565b50610c35600961086f565b90565b5f7f4e6f7420617574686f72697a656420746f206275726e00000000000000000000910152565b610c6c6016602092610133565b610c7581610c38565b0190565b610c8e9060208101905f818303910152610c5f565b90565b15610c9857565b610ca0610112565b62461bcd60e51b815280610cb660048201610c79565b0390fd5b90610ce791610cd2610ccc600761097e565b1561025c565b8015610ce9575b610ce290610c91565b611083565b565b50610ce2610d01610cfc600633906109c2565b61097e565b9050610cd9565b610d2591610d14610891565b50610d1d610e77565b919091610f88565b600190565b90610d34906109b6565b5f5260205260405f2090565b610d6591610d5b610d6092610d536108b7565b506001610d2a565b610aa8565b6108d7565b90565b60207f7374000000000000000000000000000000000000000000000000000000000000917f4e6f7420617574686f72697a656420746f2061646420746f2077686974656c695f8201520152565b610dc26022604092610133565b610dcb81610d68565b0190565b610de49060208101905f818303910152610db5565b90565b15610dee57565b610df6610112565b62461bcd60e51b815280610e0c60048201610dcf565b0390fd5b610e199061025c565b90565b90565b90610e34610e2f610e3b92610e10565b610e1c565b8254610b7f565b9055565b610e7190610e5f610e5a610e55600633906109c2565b61097e565b610de7565b610e6c60019160066109c2565b610e1f565b565b5f90565b610e7f610e73565b503390565b91610e929291600192611137565b565b604090610ebd610ec49496959396610eb360608401985f850190610631565b60208301906102b9565b01906102b9565b565b90610ed19103610209565b90565b929192610ee2818390610d40565b9081610ef7610ef15f19610209565b91610209565b03610f04575b5050509050565b81610f17610f1187610209565b91610209565b10610f3d57610f349394610f2c919392610ec6565b905f92611137565b805f8080610efd565b50610f5c849291925f938493637dc7a0d960e11b855260048501610e94565b0390fd5b610f74610f6f610f7992610adc565b61098b565b6101cf565b90565b610f8590610f60565b90565b9182610fa4610f9e610f995f610f7c565b6101da565b916101da565b14610ffe5781610fc4610fbe610fb95f610f7c565b6101da565b916101da565b14610fd757610fd59291909161128d565b565b610ffa610fe35f610f7c565b5f91829163ec442f0560e01b83526004830161063e565b0390fd5b61102161100a5f610f7c565b5f918291634b637e8f60e11b83526004830161063e565b0390fd5b8061104061103a6110355f610f7c565b6101da565b916101da565b1461105c5761105a916110525f610f7c565b91909161128d565b565b61107f6110685f610f7c565b5f91829163ec442f0560e01b83526004830161063e565b0390fd5b908161109f6110996110945f610f7c565b6101da565b916101da565b146110bb576110b991906110b25f610f7c565b909161128d565b565b6110de6110c75f610f7c565b5f918291634b637e8f60e11b83526004830161063e565b0390fd5b906110ee5f1991610b7a565b9181191691161790565b61110c61110761111192610209565b61098b565b610209565b90565b90565b9061112c611127611133926110f8565b611114565b82546110e2565b9055565b90928161115461114e6111495f610f7c565b6101da565b916101da565b1461121f578361117461116e6111695f610f7c565b6101da565b916101da565b146111f8576111988361119361118c60018690610d2a565b8790610aa8565b611117565b6111a2575b505050565b9190916111ed6111db6111d57f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936109b6565b936109b6565b936111e4610112565b918291826102c6565b0390a35f808061119d565b61121b6112045f610f7c565b5f918291634a1406b160e11b83526004830161063e565b0390fd5b61124261122b5f610f7c565b5f91829163e602df0560e01b83526004830161063e565b0390fd5b634e487b7160e01b5f52601160045260245ffd5b61126961126f91939293610209565b92610209565b820180921161127a57565b611246565b9061128a9101610209565b90565b919091806112ab6112a56112a05f610f7c565b6101da565b916101da565b145f1461138c576112cf6112c8836112c360026108d7565b61125a565b6002611117565b5b826112eb6112e56112e05f610f7c565b6101da565b916101da565b145f146113605761130f6113088361130360026108d7565b610ec6565b6002611117565b5b91909161135b6113496113437fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936109b6565b936109b6565b93611352610112565b918291826102c6565b0390a3565b611387826113816113725f8790610aa8565b9161137c836108d7565b61127f565b90611117565b611310565b61139f61139a5f8390610aa8565b6108d7565b806113b26113ac85610209565b91610209565b106113da576113c56113d5918490610ec6565b6113d05f8490610aa8565b611117565b6112d0565b906113f89091925f93849363391434e360e21b855260048501610e94565b0390fdfea26469706673582212204729e46b8716d21a7d35fbd2bd96f9a940a188f51031335fe8c1e7f51ad89dcd64736f6c634300081a003300000000000000000000000013e5fb0b6534bb22cbc59fae339dbbe0dc9068710000000000000000000000001197766b82eee9c2e57674e53f0d961590e43769000000000000000000000000f7464321de37bde4c03aaeef6b1e7b71379a9a64
Deployed Bytecode
0x60806040526004361015610015575b366105d957005b61001f5f356100ae565b806329024ee1146100a9578063457cf77a146100a45780634aa07e641461009f57806351bd11661461009a57806362e16f2014610095578063813c7bce146100905780639688a8521461008b578063de5f72fd146100865763e43252d70361000e576105a6565b610555565b610521565b6104ea565b610460565b6103fe565b6103ba565b610378565b610295565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b90565b6100d2816100c6565b036100d957565b5f80fd5b905035906100ea826100c9565b565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610118906100f0565b810190811067ffffffffffffffff82111761013257604052565b6100fa565b9061014a6101436100b4565b928361010e565b565b67ffffffffffffffff81116101645760208091020190565b6100fa565b5f80fd5b60018060a01b031690565b6101819061016d565b90565b61018d81610178565b0361019457565b5f80fd5b905035906101a582610184565b565b909291926101bc6101b78261014c565b610137565b93818552602080860192028301928184116101f957915b8383106101e05750505050565b602080916101ee8486610198565b8152019201916101d3565b610169565b9080601f8301121561021c57816020610219933591016101a7565b90565b6100ec565b91909160a08184031261028b5761023a835f83016100dd565b9261024881602084016100dd565b9261025682604085016100dd565b9261026483606083016100dd565b92608082013567ffffffffffffffff81116102865761028392016101fe565b90565b6100c2565b6100be565b5f0190565b346102c7576102b16102a8366004610221565b939290926107be565b6102b96100b4565b806102c381610290565b0390f35b6100ba565b5f9103126102d657565b6100be565b1c90565b60018060a01b031690565b6102fa9060086102ff93026102db565b6102df565b90565b9061030d91546102ea565b90565b61031c60025f90610302565b90565b90565b61033661033161033b9261016d565b61031f565b61016d565b90565b61034790610322565b90565b6103539061033e565b90565b61035f9061034a565b9052565b9190610376905f60208501940190610356565b565b346103a8576103883660046102cc565b6103a4610393610310565b61039b6100b4565b91829182610363565b0390f35b6100ba565b6103b75f80610302565b90565b346103ea576103ca3660046102cc565b6103e66103d56103ad565b6103dd6100b4565b91829182610363565b0390f35b6100ba565b6103fb60015f90610302565b90565b3461042e5761040e3660046102cc565b61042a6104196103ef565b6104216100b4565b91829182610363565b0390f35b6100ba565b919060408382031261045b578061044f610458925f86016100dd565b93602001610198565b90565b6100be565b3461048f57610479610473366004610433565b90610961565b6104816100b4565b8061048b81610290565b0390f35b6100ba565b919060a0838203126104e5576104ac815f85016100dd565b926104ba82602083016100dd565b926104e26104cb84604085016100dd565b936104d981606086016100dd565b93608001610198565b90565b6100be565b3461051c576105066104fd366004610494565b93929092610d5f565b61050e6100b4565b8061051881610290565b0390f35b6100ba565b346105505761053a610534366004610433565b90610e52565b6105426100b4565b8061054c81610290565b0390f35b6100ba565b34610583576105653660046102cc565b61056d6110ea565b6105756100b4565b8061057f81610290565b0390f35b6100ba565b906020828203126105a15761059e915f01610198565b90565b6100be565b346105d4576105be6105b9366004610588565b611182565b6105c66100b4565b806105d081610290565b0390f35b6100ba565b5f80fd5b6105e69061033e565b90565b906105f3906105dd565b5f5260205260405f2090565b5f1c90565b60ff1690565b61061661061b916105ff565b610604565b90565b610628905461060a565b90565b60209181520190565b5f7f4e6f742077686974656c69737465640000000000000000000000000000000000910152565b610668600f60209261062b565b61067181610634565b0190565b61068a9060208101905f81830391015261065b565b90565b1561069457565b61069c6100b4565b62461bcd60e51b8152806106b260048201610675565b0390fd5b906106df949392916106da6106d56106d0600433906105e9565b61061e565b61068d565b610754565b565b90565b6106f86106f36106fd926106e1565b61031f565b6100c6565b90565b600161070c91016100c6565b90565b5190565b634e487b7160e01b5f52603260045260245ffd5b906107318261070f565b811015610742576020809102010190565b610713565b6107519051610178565b90565b92919094936107625f6106e4565b5b8061077e6107786107738561070f565b6100c6565b916100c6565b10156107b5576107b0906107ab61079e610799858490610727565b610747565b87908a8790899293610d5f565b610700565b610763565b50505050509050565b906107cb949392916106b6565b565b906107f3916107ee6107e96107e4600433906105e9565b61061e565b61068d565b6108a4565b565b61080961080461080e926106e1565b61031f565b61016d565b90565b61081a906107f5565b90565b61082961082e916105ff565b6102df565b90565b61083b905461081d565b90565b5f80fd5b60e01b90565b5f91031261085257565b6100be565b61086090610178565b9052565b61086d906100c6565b9052565b91602061089292949361088b60408201965f830190610857565b0190610864565b565b61089c6100b4565b3d5f823e3d90fd5b90806108c06108ba6108b55f610811565b610178565b91610178565b145f1461095c5750335b6108dc6108d76002610831565b61034a565b916340c10f19919092803b15610957576109095f80946109146108fd6100b4565b97889687958694610842565b845260048401610871565b03925af1801561095257610926575b50565b610945905f3d811161094b575b61093d818361010e565b810190610848565b5f610923565b503d610933565b610894565b61083e565b6108ca565b9061096b916107cd565b565b906109969493929161099161098c610987600433906105e9565b61061e565b61068d565b610ac6565b565b6109a190610322565b90565b6109ad90610998565b90565b6109b99061033e565b90565b905090565b6109cc5f80926109bc565b0190565b6109d9906109c1565b90565b67ffffffffffffffff81116109fa576109f66020916100f0565b0190565b6100fa565b90610a11610a0c836109dc565b610137565b918252565b606090565b3d5f14610a3657610a2b3d6109ff565b903d5f602084013e5b565b610a3e610a16565b90610a34565b5f7f4661756365743a20455448207472616e73666572206661696c65640000000000910152565b610a78601b60209261062b565b610a8181610a44565b0190565b610a9a9060208101905f818303910152610a6b565b90565b15610aa457565b610aac6100b4565b62461bcd60e51b815280610ac260048201610a85565b0390fd5b9380610ae2610adc610ad75f610811565b610178565b91610178565b145f14610d5a5750335b9380610b00610afa5f6106e4565b916100c6565b11610cc6575b5080610b1a610b145f6106e4565b916100c6565b11610c31575b5080610b34610b2e5f6106e4565b916100c6565b11610b9c575b5080610b4e610b485f6106e4565b916100c6565b11610b58575b5050565b5f8091610b6f610b6a610b95956109a4565b6109b0565b90610b786100b4565b9081610b83816109d0565b03925af1610b8f610a1b565b50610a9d565b5f80610b54565b610bae610ba96002610831565b61034a565b906340c10f1990849092803b15610c2c57610bdc5f8094610be7610bd06100b4565b97889687958694610842565b845260048401610871565b03925af18015610c2757610bfb575b610b3a565b610c1a905f3d8111610c20575b610c12818361010e565b810190610848565b5f610bf6565b503d610c08565b610894565b61083e565b610c43610c3e6001610831565b61034a565b906340c10f1990859092803b15610cc157610c715f8094610c7c610c656100b4565b97889687958694610842565b845260048401610871565b03925af18015610cbc57610c90575b610b20565b610caf905f3d8111610cb5575b610ca7818361010e565b810190610848565b5f610c8b565b503d610c9d565b610894565b61083e565b610cd7610cd25f610831565b61034a565b906340c10f1990869092803b15610d5557610d055f8094610d10610cf96100b4565b97889687958694610842565b845260048401610871565b03925af18015610d5057610d24575b610b06565b610d43905f3d8111610d49575b610d3b818361010e565b810190610848565b5f610d1f565b503d610d31565b610894565b61083e565b610aec565b90610d6c9493929161096d565b565b90610d9491610d8f610d8a610d85600433906105e9565b61061e565b61068d565b610d96565b565b9080610db2610dac610da75f610811565b610178565b91610178565b145f14610e4d5750335b610dcd610dc85f610831565b61034a565b916340c10f19919092803b15610e4857610dfa5f8094610e05610dee6100b4565b97889687958694610842565b845260048401610871565b03925af18015610e4357610e17575b50565b610e36905f3d8111610e3c575b610e2e818361010e565b810190610848565b5f610e14565b503d610e24565b610894565b61083e565b610dbc565b90610e5c91610d6e565b565b610e7a610e75610e70600433906105e9565b61061e565b61068d565b610e82610f22565b565b90565b610e9b610e96610ea092610e84565b61031f565b6100c6565b90565b610eac90610e87565b9052565b916020610ed1929493610eca60408201965f830190610857565b0190610ea3565b565b90565b610eea610ee5610eef92610ed3565b61031f565b6100c6565b90565b610efb90610ed6565b9052565b916020610f20929493610f1960408201965f830190610857565b0190610ef2565b565b610f33610f2e5f610831565b61034a565b6340c10f1933670de0b6b3a764000092803b156110e557610f675f8094610f72610f5b6100b4565b97889687958694610842565b845260048401610eb0565b03925af180156110e0576110b4575b50610f94610f8f6001610831565b61034a565b6340c10f1933670de0b6b3a764000092803b156110af57610fc85f8094610fd3610fbc6100b4565b97889687958694610842565b845260048401610eb0565b03925af180156110aa5761107e575b50610ff5610ff06002610831565b61034a565b6340c10f193369010f0cf064dd5920000092803b156110795761102b5f809461103661101f6100b4565b97889687958694610842565b845260048401610eff565b03925af1801561107457611048575b50565b611067905f3d811161106d575b61105f818361010e565b810190610848565b5f611045565b503d611055565b610894565b61083e565b61109d905f3d81116110a3575b611095818361010e565b810190610848565b5f610fe2565b503d61108b565b610894565b61083e565b6110d3905f3d81116110d9575b6110cb818361010e565b810190610848565b5f610f81565b503d6110c1565b610894565b61083e565b6110f2610e5e565b565b6111199061111461110f61110a600433906105e9565b61061e565b61068d565b61116a565b565b5f1b90565b9061112c60ff9161111b565b9181191691161790565b151590565b61114490611136565b90565b90565b9061115f61115a6111669261113b565b611147565b8254611120565b9055565b6111809061117b60019160046105e9565b61114a565b565b61118b906110f4565b56fea264697066735822122076e8aa78656f53800965e35a251de8743b9d450cb49e96187ae0d3175d4589c664736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000013e5fb0b6534bb22cbc59fae339dbbe0dc9068710000000000000000000000001197766b82eee9c2e57674e53f0d961590e43769000000000000000000000000f7464321de37bde4c03aaeef6b1e7b71379a9a64
-----Decoded View---------------
Arg [0] : _wstETH (address): 0x13e5FB0B6534BB22cBC59Fae339dbBE0Dc906871
Arg [1] : _cbETH (address): 0x1197766B82Eee9c2e57674E53F0D961590e43769
Arg [2] : _couponToken (address): 0xf7464321dE37BdE4C03AAeeF6b1e7b71379A9a64
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000013e5fb0b6534bb22cbc59fae339dbbe0dc906871
Arg [1] : 0000000000000000000000001197766b82eee9c2e57674e53f0d961590e43769
Arg [2] : 000000000000000000000000f7464321de37bde4c03aaeef6b1e7b71379a9a64
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.