Latest 25 from a total of 267 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Donate | 11049079 | 1322 days ago | IN | 0 ETH | 0.000321837988 ETH | ||||
| Donate | 11049058 | 1322 days ago | IN | 0 ETH | 0.000319180891 ETH | ||||
| Donate | 11049047 | 1322 days ago | IN | 0 ETH | 0.000394968085 ETH | ||||
| Donate | 11049046 | 1322 days ago | IN | 0 ETH | 0.000323605535 ETH | ||||
| Donate | 11049043 | 1322 days ago | IN | 0 ETH | 0.000397274272 ETH | ||||
| Donate | 11049042 | 1322 days ago | IN | 0 ETH | 0.000322622842 ETH | ||||
| Donate | 11049041 | 1322 days ago | IN | 0 ETH | 0.000323598315 ETH | ||||
| Donate | 11049036 | 1322 days ago | IN | 0 ETH | 0.000326266242 ETH | ||||
| Donate | 11049035 | 1322 days ago | IN | 0 ETH | 0.000327257599 ETH | ||||
| Donate | 11049034 | 1322 days ago | IN | 0 ETH | 0.000398304619 ETH | ||||
| Donate | 11049031 | 1322 days ago | IN | 0 ETH | 0.000326266964 ETH | ||||
| Donate | 11049019 | 1322 days ago | IN | 0 ETH | 0.000327269152 ETH | ||||
| Donate | 11049018 | 1322 days ago | IN | 0 ETH | 0.000323598315 ETH | ||||
| Donate | 11049017 | 1322 days ago | IN | 0 ETH | 0.000396950077 ETH | ||||
| Donate | 11049012 | 1322 days ago | IN | 0 ETH | 0.0003226149 ETH | ||||
| Donate | 11048995 | 1322 days ago | IN | 0 ETH | 0.000325269831 ETH | ||||
| Donate | 11048979 | 1322 days ago | IN | 0 ETH | 0.000323610589 ETH | ||||
| Donate | 11048973 | 1322 days ago | IN | 0 ETH | 0.000394967363 ETH | ||||
| Donate | 11048955 | 1322 days ago | IN | 0 ETH | 0.000395959442 ETH | ||||
| Donate | 11048951 | 1322 days ago | IN | 0 ETH | 0.000396988345 ETH | ||||
| Donate | 11048946 | 1322 days ago | IN | 0 ETH | 0.000393982504 ETH | ||||
| Donate | 11048940 | 1322 days ago | IN | 0 ETH | 0.000394974583 ETH | ||||
| Donate | 11048930 | 1322 days ago | IN | 0 ETH | 0.000394967363 ETH | ||||
| Donate | 11048906 | 1322 days ago | IN | 0 ETH | 0.000326255412 ETH | ||||
| Donate | 11048901 | 1322 days ago | IN | 0 ETH | 0.000399610784 ETH |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 39156213 | 1122 days ago | 0 ETH | ||||
| 39156213 | 1122 days ago | 0 ETH | ||||
| 39156213 | 1122 days ago | 0 ETH | ||||
| 39156213 | 1122 days ago | 0 ETH | ||||
| 21158178 | 1208 days ago | 0 ETH | ||||
| 20626749 | 1214 days ago | 0 ETH | ||||
| 20574433 | 1214 days ago | 0 ETH | ||||
| 20341621 | 1217 days ago | 0 ETH | ||||
| 20341621 | 1217 days ago | 0 ETH | ||||
| 20341621 | 1217 days ago | 0 ETH | ||||
| 20341621 | 1217 days ago | 0 ETH | ||||
| 20054002 | 1220 days ago | 0 ETH | ||||
| 19910004 | 1222 days ago | 0 ETH | ||||
| 19910004 | 1222 days ago | 0 ETH | ||||
| 19910004 | 1222 days ago | 0 ETH | ||||
| 19910004 | 1222 days ago | 0 ETH | ||||
| 19532119 | 1226 days ago | 0 ETH | ||||
| 19532119 | 1226 days ago | 0 ETH | ||||
| 19532119 | 1226 days ago | 0 ETH | ||||
| 19532119 | 1226 days ago | 0 ETH | ||||
| 17653924 | 1249 days ago | 0 ETH | ||||
| 17653924 | 1249 days ago | 0 ETH | ||||
| 17653924 | 1249 days ago | 0 ETH | ||||
| 17653924 | 1249 days ago | 0 ETH | ||||
| 17639542 | 1249 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TGEVault
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import './interfaces/IController.sol';
contract TGEVault {
ERC20 public immutable underlyingToken;
ERC20 public immutable pls;
IController public immutable controller;
uint256 public immutable allocation;
mapping(address => uint256) public deposit;
mapping(address => bool) public claimed;
address[] public users;
uint256 public totalDeposits;
constructor(
address _controller,
address _pls,
address _underlyingToken,
uint256 _allocation
) {
controller = IController(_controller);
controller.addVault(address(this));
pls = ERC20(_pls);
underlyingToken = ERC20(_underlyingToken);
allocation = _allocation;
}
function donate(uint256 _amt) external {
require(controller.started(), 'Soon');
require(_amt > 0, 'Amount is 0');
uint256 _prev = underlyingToken.balanceOf(address(this));
underlyingToken.transferFrom(msg.sender, address(this), _amt);
require(_prev + _amt == underlyingToken.balanceOf(address(this)), 'Quantity mismatch');
// If user's first deposit, add to list of users
if (deposit[msg.sender] == 0) {
users.push(msg.sender);
}
deposit[msg.sender] += _amt;
totalDeposits += _amt;
emit Donate(msg.sender, _amt);
}
/** CONTROLLER FUNCTIONS */
/// @dev Should only be callable by controller, guards in controller
function claim(address _user, address _to) external {
require(msg.sender == address(controller), 'Unauthorized');
claimed[_user] = true;
uint256 plsAllocation = calculateShare(_user);
pls.transfer(_to, plsAllocation);
emit Claim(_user, _to, plsAllocation);
}
function withdrawFunds(address _to) external {
require(msg.sender == address(controller), 'Unauthorized');
uint256 amt = underlyingToken.balanceOf(address(this));
underlyingToken.transfer(_to, amt);
emit WithdrawFunds(_to, address(underlyingToken), amt);
}
/** GOVERNANCE FUNCTIONS */
/// @dev Governance address can retrieve stuck funds
function retrieve(ERC20 token) external {
require(msg.sender == controller.governance(), 'Unauthorized');
require(token != underlyingToken, 'token = underlying');
if (address(this).balance > 0) {
payable(controller.governance()).transfer(address(this).balance);
}
token.transfer(controller.governance(), token.balanceOf(address(this)));
}
/** VIEWS */
/// @dev Get share of the allocation based on how much they deposited.
function calculateShare(address _addr) public view returns (uint256) {
return (allocation * deposit[_addr]) / totalDeposits;
}
function getUsers() external view returns (address[] memory) {
return users;
}
function getUserCount() external view returns (uint256) {
return users.length;
}
event Donate(address indexed user, uint256 amt);
event WithdrawFunds(address indexed to, address underlyingToken, uint256 amt);
event Claim(address indexed user, address to, uint256 plsAmt);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.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}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* 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.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* 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 override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override 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 value {ERC20} uses, unless this function is
* 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 override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override 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 `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` 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 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
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 `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, _allowances[owner][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = _allowances[owner][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* 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.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` 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.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Spend `amount` form the allowance of `owner` toward `spender`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
interface IController {
function addVault(address) external;
function started() external view returns (bool);
function tokenClaimEnabled() external view returns (bool);
function governance() external view returns (address);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
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 v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_pls","type":"address"},{"internalType":"address","name":"_underlyingToken","type":"address"},{"internalType":"uint256","name":"_allocation","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"plsAmt","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Donate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"underlyingToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"WithdrawFunds","type":"event"},{"inputs":[],"name":"allocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"calculateShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"donate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUserCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pls","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"}],"name":"retrieve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlyingToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"users","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6101006040523480156200001257600080fd5b506040516200130e3803806200130e8339810160408190526200003591620000ce565b6001600160a01b03841660c08190526040516312b5ad0160e11b815230600482015263256b5a0290602401600060405180830381600087803b1580156200007b57600080fd5b505af115801562000090573d6000803e3d6000fd5b5050506001600160a01b0393841660a05250911660805260e0525062000120565b80516001600160a01b0381168114620000c957600080fd5b919050565b60008060008060808587031215620000e557600080fd5b620000f085620000b1565b93506200010060208601620000b1565b92506200011060408601620000b1565b6060959095015193969295505050565b60805160a05160c05160e05161114b620001c3600039600081816101e70152610ae701526000818161028f01528181610315015281816104820152818161055c01528181610707015281816108b90152610b1d01526000818161014401526107ba015260008181610183015281816103fa0152818161092d015281816109d801528181610a6501528181610c6201528181610d220152610dbc015261114b6000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c80637d88209711610097578063d17c61dc11610066578063d17c61dc14610244578063f14faf6f14610257578063f340fa011461026a578063f77c47911461028a57600080fd5b80637d882097146101cb57806388a17bde146101e2578063b5cb15f714610209578063c884ef831461021157600080fd5b8063223e5a9d116100d3578063223e5a9d1461013f5780632495a5991461017e578063365b98b2146101a557806368742da6146101b857600080fd5b8062ce8e3e146100f95780630a79309b1461011757806321c0b3421461012c575b600080fd5b6101016102b1565b60405161010e9190610f73565b60405180910390f35b61012a610125366004610fd8565b610313565b005b61012a61013a366004610ffc565b6106fc565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010e565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b6101666101b3366004611035565b610884565b61012a6101c6366004610fd8565b6108ae565b6101d460035481565b60405190815260200161010e565b6101d47f000000000000000000000000000000000000000000000000000000000000000081565b6002546101d4565b61023461021f366004610fd8565b60016020526000908152604090205460ff1681565b604051901515815260200161010e565b6101d4610252366004610fd8565b610ac2565b61012a610265366004611035565b610b1b565b6101d4610278366004610fd8565b60006020819052908152604090205481565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b6060600280548060200260200160405190810160405280929190818152602001828054801561030957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102eb575b5050505050905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b15801561036c57600080fd5b505afa158015610380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a4919061104e565b6001600160a01b0316336001600160a01b0316146103f85760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141561047a5760405162461bcd60e51b815260206004820152601260248201527f746f6b656e203d20756e6465726c79696e67000000000000000000000000000060448201526064016103ef565b471561054b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b1580156104d957600080fd5b505afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061104e565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610549573d6000803e3d6000fd5b505b806001600160a01b031663a9059cbb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b357600080fd5b505afa1580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb919061104e565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561062a57600080fd5b505afa15801561063e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610662919061106b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156106c057600080fd5b505af11580156106d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f89190611084565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107635760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064016103ef565b6001600160a01b03821660009081526001602081905260408220805460ff1916909117905561079183610ac2565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561080057600080fd5b505af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190611084565b50604080516001600160a01b038481168252602082018490528516917f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd987068910160405180910390a2505050565b6002818154811061089457600080fd5b6000918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109155760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064016103ef565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561097757600080fd5b505afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af919061106b565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190611084565b50604080516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081168252602082018490528416917fed6f8d0c62ba20cbb1a26a2e520f629cb6a66a1e8049adfd9acbbf6a4ba93ad091015b60405180910390a25050565b6003546001600160a01b038216600090815260208190526040812054909190610b0b907f00000000000000000000000000000000000000000000000000000000000000006110bc565b610b1591906110db565b92915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631f2698ab6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190611084565b610bfa5760405162461bcd60e51b81526004016103ef9060208082526004908201527f536f6f6e00000000000000000000000000000000000000000000000000000000604082015260600190565b60008111610c4a5760405162461bcd60e51b815260206004820152600b60248201527f416d6f756e74206973203000000000000000000000000000000000000000000060448201526064016103ef565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610cac57600080fd5b505afa158015610cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce4919061106b565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401602060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190611084565b506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610e0657600080fd5b505afa158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e919061106b565b610e4883836110fd565b14610e955760405162461bcd60e51b815260206004820152601160248201527f5175616e74697479206d69736d6174636800000000000000000000000000000060448201526064016103ef565b33600090815260208190526040902054610f0457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b3360009081526020819052604081208054849290610f239084906110fd565b925050819055508160036000828254610f3c91906110fd565b909155505060405182815233907f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef1390602001610ab6565b6020808252825182820181905260009190848201906040850190845b81811015610fb45783516001600160a01b031683529284019291840191600101610f8f565b50909695505050505050565b6001600160a01b0381168114610fd557600080fd5b50565b600060208284031215610fea57600080fd5b8135610ff581610fc0565b9392505050565b6000806040838503121561100f57600080fd5b823561101a81610fc0565b9150602083013561102a81610fc0565b809150509250929050565b60006020828403121561104757600080fd5b5035919050565b60006020828403121561106057600080fd5b8151610ff581610fc0565b60006020828403121561107d57600080fd5b5051919050565b60006020828403121561109657600080fd5b81518015158114610ff557600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156110d6576110d66110a6565b500290565b6000826110f857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611110576111106110a6565b50019056fea264697066735822122094a7d752df04e81993e0a79621bfbb67bc631ed6e2d587b3978a352571ef720a64736f6c63430008090033000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d1000000000000000000000000051318b7d00db7acc4026c88c3952b66278b6a67f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee55000000000000000000000000000000000000000000027b46536c66c8e3000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f45760003560e01c80637d88209711610097578063d17c61dc11610066578063d17c61dc14610244578063f14faf6f14610257578063f340fa011461026a578063f77c47911461028a57600080fd5b80637d882097146101cb57806388a17bde146101e2578063b5cb15f714610209578063c884ef831461021157600080fd5b8063223e5a9d116100d3578063223e5a9d1461013f5780632495a5991461017e578063365b98b2146101a557806368742da6146101b857600080fd5b8062ce8e3e146100f95780630a79309b1461011757806321c0b3421461012c575b600080fd5b6101016102b1565b60405161010e9190610f73565b60405180910390f35b61012a610125366004610fd8565b610313565b005b61012a61013a366004610ffc565b6106fc565b6101667f00000000000000000000000051318b7d00db7acc4026c88c3952b66278b6a67f81565b6040516001600160a01b03909116815260200161010e565b6101667f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5581565b6101666101b3366004611035565b610884565b61012a6101c6366004610fd8565b6108ae565b6101d460035481565b60405190815260200161010e565b6101d47f000000000000000000000000000000000000000000027b46536c66c8e300000081565b6002546101d4565b61023461021f366004610fd8565b60016020526000908152604090205460ff1681565b604051901515815260200161010e565b6101d4610252366004610fd8565b610ac2565b61012a610265366004611035565b610b1b565b6101d4610278366004610fd8565b60006020819052908152604090205481565b6101667f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d1081565b6060600280548060200260200160405190810160405280929190818152602001828054801561030957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102eb575b5050505050905090565b7f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d106001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b15801561036c57600080fd5b505afa158015610380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a4919061104e565b6001600160a01b0316336001600160a01b0316146103f85760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b7f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee556001600160a01b0316816001600160a01b0316141561047a5760405162461bcd60e51b815260206004820152601260248201527f746f6b656e203d20756e6465726c79696e67000000000000000000000000000060448201526064016103ef565b471561054b577f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d106001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b1580156104d957600080fd5b505afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061104e565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610549573d6000803e3d6000fd5b505b806001600160a01b031663a9059cbb7f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d106001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b357600080fd5b505afa1580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb919061104e565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561062a57600080fd5b505afa15801561063e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610662919061106b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156106c057600080fd5b505af11580156106d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f89190611084565b5050565b336001600160a01b037f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d1016146107635760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064016103ef565b6001600160a01b03821660009081526001602081905260408220805460ff1916909117905561079183610ac2565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192507f00000000000000000000000051318b7d00db7acc4026c88c3952b66278b6a67f9091169063a9059cbb90604401602060405180830381600087803b15801561080057600080fd5b505af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190611084565b50604080516001600160a01b038481168252602082018490528516917f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd987068910160405180910390a2505050565b6002818154811061089457600080fd5b6000918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d1016146109155760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064016103ef565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee556001600160a01b0316906370a082319060240160206040518083038186803b15801561097757600080fd5b505afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af919061106b565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192507f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee559091169063a9059cbb90604401602060405180830381600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190611084565b50604080516001600160a01b037f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5581168252602082018490528416917fed6f8d0c62ba20cbb1a26a2e520f629cb6a66a1e8049adfd9acbbf6a4ba93ad091015b60405180910390a25050565b6003546001600160a01b038216600090815260208190526040812054909190610b0b907f000000000000000000000000000000000000000000027b46536c66c8e30000006110bc565b610b1591906110db565b92915050565b7f000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d106001600160a01b0316631f2698ab6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190611084565b610bfa5760405162461bcd60e51b81526004016103ef9060208082526004908201527f536f6f6e00000000000000000000000000000000000000000000000000000000604082015260600190565b60008111610c4a5760405162461bcd60e51b815260206004820152600b60248201527f416d6f756e74206973203000000000000000000000000000000000000000000060448201526064016103ef565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee556001600160a01b0316906370a082319060240160206040518083038186803b158015610cac57600080fd5b505afa158015610cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce4919061106b565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490529091507f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee556001600160a01b0316906323b872dd90606401602060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190611084565b506040516370a0823160e01b81523060048201527f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee556001600160a01b0316906370a082319060240160206040518083038186803b158015610e0657600080fd5b505afa158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e919061106b565b610e4883836110fd565b14610e955760405162461bcd60e51b815260206004820152601160248201527f5175616e74697479206d69736d6174636800000000000000000000000000000060448201526064016103ef565b33600090815260208190526040902054610f0457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b3360009081526020819052604081208054849290610f239084906110fd565b925050819055508160036000828254610f3c91906110fd565b909155505060405182815233907f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef1390602001610ab6565b6020808252825182820181905260009190848201906040850190845b81811015610fb45783516001600160a01b031683529284019291840191600101610f8f565b50909695505050505050565b6001600160a01b0381168114610fd557600080fd5b50565b600060208284031215610fea57600080fd5b8135610ff581610fc0565b9392505050565b6000806040838503121561100f57600080fd5b823561101a81610fc0565b9150602083013561102a81610fc0565b809150509250929050565b60006020828403121561104757600080fd5b5035919050565b60006020828403121561106057600080fd5b8151610ff581610fc0565b60006020828403121561107d57600080fd5b5051919050565b60006020828403121561109657600080fd5b81518015158114610ff557600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156110d6576110d66110a6565b500290565b6000826110f857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611110576111106110a6565b50019056fea264697066735822122094a7d752df04e81993e0a79621bfbb67bc631ed6e2d587b3978a352571ef720a64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d1000000000000000000000000051318b7d00db7acc4026c88c3952b66278b6a67f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee55000000000000000000000000000000000000000000027b46536c66c8e3000000
-----Decoded View---------------
Arg [0] : _controller (address): 0x195B6eA50150900A25FA0928b8B65B03C7666D10
Arg [1] : _pls (address): 0x51318B7D00db7ACc4026C88c3952B66278B6A67F
Arg [2] : _underlyingToken (address): 0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55
Arg [3] : _allocation (uint256): 3000000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000195b6ea50150900a25fa0928b8b65b03c7666d10
Arg [1] : 00000000000000000000000051318b7d00db7acc4026c88c3952b66278b6a67f
Arg [2] : 0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee55
Arg [3] : 000000000000000000000000000000000000000000027b46536c66c8e3000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ARB | 100.00% | $0.013784 | 6,276.1249 | $86.51 |
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.