Source Code
Latest 25 from a total of 34 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Create Vault | 21450446 | 226 days ago | IN | 0 FRAX | 0.00005746 | ||||
| Create Vault | 21403452 | 227 days ago | IN | 0 FRAX | 0.00013639 | ||||
| Create Vault | 21390382 | 228 days ago | IN | 0 FRAX | 0.00022007 | ||||
| Create Vault | 21389983 | 228 days ago | IN | 0 FRAX | 0.00021257 | ||||
| Create Vault | 21389715 | 228 days ago | IN | 0 FRAX | 0.00025417 | ||||
| Create Vault | 21389422 | 228 days ago | IN | 0 FRAX | 0.00045803 | ||||
| Create Vault | 21389241 | 228 days ago | IN | 0 FRAX | 0.00045391 | ||||
| Create Vault | 21389087 | 228 days ago | IN | 0 FRAX | 0.00023679 | ||||
| Create Vault | 21388784 | 228 days ago | IN | 0 FRAX | 0.00024881 | ||||
| Create Vault | 21139780 | 233 days ago | IN | 0 FRAX | 0.00000709 | ||||
| Create Vault | 21119112 | 234 days ago | IN | 0 FRAX | 0.00004648 | ||||
| Whitelist Protoc... | 21115087 | 234 days ago | IN | 0 FRAX | 0.00003182 | ||||
| Whitelist Protoc... | 21113402 | 234 days ago | IN | 0 FRAX | 0.00001392 | ||||
| Whitelist Protoc... | 21113018 | 234 days ago | IN | 0 FRAX | 0.0000146 | ||||
| Create Vault | 21107220 | 234 days ago | IN | 0 FRAX | 0.00000955 | ||||
| Create Vault | 21107135 | 234 days ago | IN | 0 FRAX | 0.0000104 | ||||
| Create Vault | 21107092 | 234 days ago | IN | 0 FRAX | 0.00001171 | ||||
| Set Bot Address | 21107069 | 234 days ago | IN | 0 FRAX | 0.00001009 | ||||
| Create Vault | 21078293 | 235 days ago | IN | 0 FRAX | 0.00004803 | ||||
| Create Vault | 21076614 | 235 days ago | IN | 0 FRAX | 0.00008621 | ||||
| Create Vault | 21067635 | 235 days ago | IN | 0 FRAX | 0.00002091 | ||||
| Create Vault | 21067609 | 235 days ago | IN | 0 FRAX | 0.00002038 | ||||
| Create Vault | 21067546 | 235 days ago | IN | 0 FRAX | 0.00002088 | ||||
| Set Bot Address | 21064385 | 235 days ago | IN | 0 FRAX | 0.00001309 | ||||
| Create Vault | 21064374 | 235 days ago | IN | 0 FRAX | 0.00001369 |
Latest 16 internal transactions
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 21450446 | 226 days ago | Contract Creation | 0 FRAX | |||
| 21403452 | 227 days ago | Contract Creation | 0 FRAX | |||
| 21390382 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21389983 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21389715 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21389422 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21389241 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21389087 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21388784 | 228 days ago | Contract Creation | 0 FRAX | |||
| 21139780 | 233 days ago | Contract Creation | 0 FRAX | |||
| 21119112 | 234 days ago | Contract Creation | 0 FRAX | |||
| 21107220 | 234 days ago | Contract Creation | 0 FRAX | |||
| 21107092 | 234 days ago | Contract Creation | 0 FRAX | |||
| 20768578 | 242 days ago | Contract Creation | 0 FRAX | |||
| 20766869 | 242 days ago | Contract Creation | 0 FRAX | |||
| 20460914 | 249 days ago | Contract Creation | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
VaultCreator
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 832 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./Vault.sol";
contract VaultCreator {
address public admin; // Multisig for VaultCreator
address public botAddress;
mapping(address => bool) public whitelistedProtocols;
mapping(address => address) public userToVault;
address[] public allVaults;
event AdminChanged(address indexed oldAdmin, address indexed newAdmin);
event BotAddressChanged(address indexed oldBotAddress, address indexed newBotAddress);
event ProtocolWhitelisted(address indexed protocol);
event ProtocolUnwhitelisted(address indexed protocol);
event VaultCreated(address indexed user, address indexed vaultAddress);
modifier onlyAdmin() {
require(msg.sender == admin, "VaultCreator: Not admin");
_;
}
modifier onlyBot() {
require(msg.sender == botAddress, "VaultCreator: Not bot");
_;
}
constructor(address _initialAdmin, address _initialBotAddress) {
require(_initialAdmin != address(0), "VaultCreator: Invalid admin address");
require(_initialBotAddress != address(0), "VaultCreator: Invalid bot address");
admin = _initialAdmin;
botAddress = _initialBotAddress;
emit AdminChanged(address(0), _initialAdmin);
emit BotAddressChanged(address(0), _initialBotAddress);
}
function createVault(address _userAddress) external onlyBot returns (address vaultAddress) {
require(_userAddress != address(0), "VaultCreator: Invalid user address");
require(userToVault[_userAddress] == address(0), "VaultCreator: Vault already exists for user");
// Pass this contract's admin as the 'admin' for the vault
Vault newVault = new Vault(_userAddress, botAddress, admin, address(this));
vaultAddress = address(newVault);
userToVault[_userAddress] = vaultAddress;
allVaults.push(vaultAddress);
emit VaultCreated(_userAddress, vaultAddress);
return vaultAddress;
}
function whitelistProtocol(address protocol) external onlyAdmin {
require(protocol != address(0), "VaultCreator: Invalid protocol address");
whitelistedProtocols[protocol] = true;
emit ProtocolWhitelisted(protocol);
}
function unwhitelistProtocol(address protocol) external onlyAdmin {
require(protocol != address(0), "VaultCreator: Invalid protocol address");
whitelistedProtocols[protocol] = false;
emit ProtocolUnwhitelisted(protocol);
}
function changeAdmin(address newAdmin) external onlyAdmin {
require(newAdmin != address(0), "VaultCreator: Invalid new admin address");
emit AdminChanged(admin, newAdmin);
admin = newAdmin;
}
function setBotAddress(address newBotAddress) external onlyAdmin {
require(newBotAddress != address(0), "VaultCreator: Invalid new bot address");
emit BotAddressChanged(botAddress, newBotAddress);
botAddress = newBotAddress;
}
function isProtocolWhitelisted(address protocol) external view returns (bool) {
return whitelistedProtocols[protocol];
}
function getVaultByUser(address user) external view returns (address) {
return userToVault[user];
}
function getAllVaultsCount() external view returns (uint256) {
return allVaults.length;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./IVaultCreator.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
contract Vault is ReentrancyGuard {
address public immutable userAddress; // The primary user of this vault
address public immutable botAddress; // The bot allowed to operate on this vault
address public immutable adminAddress; // The VaultCreator's admin (for emergency/override)
IVaultCreator public immutable vaultCreator; // To check whitelisted protocols
event Deposited(
address indexed token,
address indexed user,
uint256 amount
);
event Withdrawn(
address indexed token,
address indexed recipient,
uint256 amount
);
event Approved(
address indexed token,
address indexed spender,
uint256 amount
);
event Yielded(
address indexed targetProtocol,
bytes params,
string reason,
address caller
);
event Unyielded(
address indexed targetProtocol,
bytes params,
address caller
);
modifier onlyUser() {
require(msg.sender == userAddress, "Vault: Not user");
_;
}
modifier onlyBot() {
require(msg.sender == botAddress, "Vault: Not bot");
_;
}
modifier onlyAdmin() {
require(msg.sender == adminAddress, "Vault: Not admin");
_;
}
modifier onlyUserOrAdmin() {
require(
msg.sender == userAddress || msg.sender == adminAddress,
"Vault: Not user or admin"
);
_;
}
modifier onlyBotUserOrAdmin() {
require(
msg.sender == botAddress ||
msg.sender == userAddress ||
msg.sender == adminAddress,
"Vault: Not authorized"
);
_;
}
constructor(
address _userAddress,
address _botAddress,
address _adminAddress,
address _vaultCreatorAddress
) {
require(_userAddress != address(0), "Vault: Invalid user address");
require(_botAddress != address(0), "Vault: Invalid bot address");
require(_adminAddress != address(0), "Vault: Invalid admin address");
require(
_vaultCreatorAddress != address(0),
"Vault: Invalid vault creator address"
);
userAddress = _userAddress;
botAddress = _botAddress;
adminAddress = _adminAddress;
vaultCreator = IVaultCreator(_vaultCreatorAddress);
}
function deposit(address token, uint256 amount) external onlyUser nonReentrant {
require(token != address(0), "Vault: Invalid token address");
require(amount > 0, "Vault: Amount must be greater than 0");
uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
require(allowance >= amount, "Vault: Check token allowance");
bool success = IERC20(token).transferFrom(
msg.sender,
address(this),
amount
);
require(success, "Vault: Deposit transfer failed");
emit Deposited(token, msg.sender, amount);
}
function withdraw(address token, uint256 amount) external onlyUserOrAdmin nonReentrant {
require(token != address(0), "Vault: Invalid token address");
require(amount > 0, "Vault: Amount must be greater than 0");
uint256 balance = IERC20(token).balanceOf(address(this));
require(balance >= amount, "Vault: Insufficient balance in vault");
bool success = IERC20(token).transfer(msg.sender, amount);
require(success, "Vault: Withdraw transfer failed");
emit Withdrawn(token, msg.sender, amount);
}
function approveTokenForProtocol(
address token,
address protocolSpender,
uint256 amount
) external onlyBot nonReentrant {
require(token != address(0), "Vault: Invalid token address");
require(
protocolSpender != address(0),
"Vault: Invalid spender address"
);
require(
vaultCreator.isProtocolWhitelisted(protocolSpender),
"Vault: Protocol not whitelisted"
);
IERC20(token).approve(protocolSpender, amount);
emit Approved(token, protocolSpender, amount);
}
function yield(
address targetProtocol,
bytes calldata callParams,
string calldata reason
) external payable onlyBot nonReentrant {
require(targetProtocol != address(0), "Vault: Invalid target protocol");
require(
vaultCreator.isProtocolWhitelisted(targetProtocol),
"Vault: Protocol not whitelisted for yield"
);
(bool success, bytes memory returnData) = targetProtocol.call{
value: msg.value
}(callParams);
require(success, _getRevertMsg(returnData, "Vault: Yield call failed"));
emit Yielded(targetProtocol, callParams, reason, msg.sender);
}
function unyield(
address targetProtocol,
bytes calldata callParams
) external payable onlyBotUserOrAdmin nonReentrant {
require(targetProtocol != address(0), "Vault: Invalid target protocol");
if (msg.sender == botAddress) {
require(
vaultCreator.isProtocolWhitelisted(targetProtocol),
"Vault: Protocol not whitelisted for bot unyield"
);
}
(bool success, bytes memory returnData) = targetProtocol.call{
value: msg.value
}(callParams);
require(
success,
_getRevertMsg(returnData, "Vault: Unyield call failed")
);
emit Unyielded(targetProtocol, callParams, msg.sender);
}
receive() external payable {}
function _getRevertMsg(
bytes memory _returnData,
string memory _defaultMsg
) internal pure returns (string memory) {
if (_returnData.length < 68) return _defaultMsg;
assembly {
_returnData := add(_returnData, 0x04)
}
return abi.decode(_returnData, (string));
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IVaultCreator {
function isProtocolWhitelisted(address protocol) external view returns (bool);
function botAddress() external view returns (address);
function admin() external view returns (address); // The admin of VaultCreator
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 832
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_initialAdmin","type":"address"},{"internalType":"address","name":"_initialBotAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldBotAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newBotAddress","type":"address"}],"name":"BotAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocol","type":"address"}],"name":"ProtocolUnwhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocol","type":"address"}],"name":"ProtocolWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"vaultAddress","type":"address"}],"name":"VaultCreated","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allVaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"createVault","outputs":[{"internalType":"address","name":"vaultAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllVaultsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getVaultByUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocol","type":"address"}],"name":"isProtocolWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newBotAddress","type":"address"}],"name":"setBotAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"protocol","type":"address"}],"name":"unwhitelistProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userToVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocol","type":"address"}],"name":"whitelistProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedProtocols","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561000f575f80fd5b506040516123f63803806123f683398101604081905261002e916101a4565b6001600160a01b0382166100955760405162461bcd60e51b815260206004820152602360248201527f5661756c7443726561746f723a20496e76616c69642061646d696e206164647260448201526265737360e81b60648201526084015b60405180910390fd5b6001600160a01b0381166100f55760405162461bcd60e51b815260206004820152602160248201527f5661756c7443726561746f723a20496e76616c696420626f74206164647265736044820152607360f81b606482015260840161008c565b5f80546001600160a01b03199081166001600160a01b03858116918217845560018054909316908516179091556040519091907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f908290a36040516001600160a01b038216905f907fc65940bcd2aacf650c716b03c1cf00164d455af263e6cc29861986b39910921c908290a350506101d5565b80516001600160a01b038116811461019f575f80fd5b919050565b5f80604083850312156101b5575f80fd5b6101be83610189565b91506101cc60208401610189565b90509250929050565b612214806101e25f395ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80639094a91e11610088578063bc721a9611610063578063bc721a96146101df578063e75622d414610207578063e8620af114610232578063f851a44014610243575f80fd5b80639094a91e1461018e5780639387bbd4146101a1578063b4bd6f46146101cc575f80fd5b8063691a2208116100b8578063691a22081461013657806384361c07146101495780638f2839701461017b575f80fd5b806313d1d3e4146100de5780632d4f40c6146100f35780634bf4f42314610106575b5f80fd5b6100f16100ec366004610973565b610255565b005b6100f1610101366004610973565b610363565b600154610119906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f1610144366004610973565b6104a0565b61016b610157366004610973565b60026020525f908152604090205460ff1681565b604051901515815260200161012d565b6100f1610189366004610973565b6105a6565b61011961019c3660046109a0565b6106e1565b61016b6101af366004610973565b6001600160a01b03165f9081526002602052604090205460ff1690565b6101196101da366004610973565b610709565b6101196101ed366004610973565b60036020525f90815260409020546001600160a01b031681565b610119610215366004610973565b6001600160a01b039081165f908152600360205260409020541690565b60045460405190815260200161012d565b5f54610119906001600160a01b031681565b5f546001600160a01b031633146102b35760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b815260206004820152602660248201527f5661756c7443726561746f723a20496e76616c69642070726f746f636f6c206160448201526564647265737360d01b60648201526084016102aa565b6001600160a01b0381165f81815260026020526040808220805460ff19166001179055517f5ec654392567a6e4d201b682c6ed6803d120c307fd0b8ba2cca51f73e36f43389190a250565b5f546001600160a01b031633146103bc5760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064016102aa565b6001600160a01b0381166104385760405162461bcd60e51b815260206004820152602560248201527f5661756c7443726561746f723a20496e76616c6964206e657720626f7420616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016102aa565b6001546040516001600160a01b038084169216907fc65940bcd2aacf650c716b03c1cf00164d455af263e6cc29861986b39910921c905f90a36001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f546001600160a01b031633146104f95760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064016102aa565b6001600160a01b03811661055e5760405162461bcd60e51b815260206004820152602660248201527f5661756c7443726561746f723a20496e76616c69642070726f746f636f6c206160448201526564647265737360d01b60648201526084016102aa565b6001600160a01b0381165f81815260026020526040808220805460ff19169055517f15296b0fffe1e46666ceeb89267ffe04e30fd2174376b444ed3625ff79630ac49190a250565b5f546001600160a01b031633146105ff5760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064016102aa565b6001600160a01b03811661067b5760405162461bcd60e51b815260206004820152602760248201527f5661756c7443726561746f723a20496e76616c6964206e65772061646d696e2060448201527f616464726573730000000000000000000000000000000000000000000000000060648201526084016102aa565b5f80546040516001600160a01b03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a35f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600481815481106106f0575f80fd5b5f918252602090912001546001600160a01b0316905081565b6001545f906001600160a01b031633146107655760405162461bcd60e51b815260206004820152601560248201527f5661756c7443726561746f723a204e6f7420626f74000000000000000000000060448201526064016102aa565b6001600160a01b0382166107c65760405162461bcd60e51b815260206004820152602260248201527f5661756c7443726561746f723a20496e76616c69642075736572206164647265604482015261737360f01b60648201526084016102aa565b6001600160a01b038281165f9081526003602052604090205416156108535760405162461bcd60e51b815260206004820152602b60248201527f5661756c7443726561746f723a205661756c7420616c7265616479206578697360448201527f747320666f72207573657200000000000000000000000000000000000000000060648201526084016102aa565b6001545f8054604051919285926001600160a01b039182169290911690309061087b90610966565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff0801580156108bc573d5f803e3d5ffd5b506001600160a01b038085165f81815260036020526040808220805494861673ffffffffffffffffffffffffffffffffffffffff199586168117909155600480546001810182559084527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054909516811790945551939550859450919290917f5d9c31ffa0fecffd7cf379989a3c7af252f0335e0d2a1320b55245912c781f5391a350919050565b611827806109b883390190565b5f60208284031215610983575f80fd5b81356001600160a01b0381168114610999575f80fd5b9392505050565b5f602082840312156109b0575f80fd5b503591905056fe61010060405234801562000011575f80fd5b5060405162001827380380620018278339810160408190526200003491620001e7565b60015f556001600160a01b038416620000945760405162461bcd60e51b815260206004820152601b60248201527f5661756c743a20496e76616c696420757365722061646472657373000000000060448201526064015b60405180910390fd5b6001600160a01b038316620000ec5760405162461bcd60e51b815260206004820152601a60248201527f5661756c743a20496e76616c696420626f74206164647265737300000000000060448201526064016200008b565b6001600160a01b038216620001445760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c69642061646d696e20616464726573730000000060448201526064016200008b565b6001600160a01b038116620001a85760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20496e76616c6964207661756c742063726561746f72206164646044820152637265737360e01b60648201526084016200008b565b6001600160a01b0393841660805291831660a052821660c0521660e05262000241565b80516001600160a01b0381168114620001e2575f80fd5b919050565b5f805f8060808587031215620001fb575f80fd5b6200020685620001cb565b93506200021660208601620001cb565b92506200022660408601620001cb565b91506200023660608601620001cb565b905092959194509250565b60805160a05160c05160e05161155f620002c85f395f81816101ec015281816105ff015281816109310152610c3d01525f81816101b901528181610b220152610e6501525f818160d3015281816105240152818161080001528181610abd0152610bf801525f81816101670152818161021901528181610aef0152610e33015261155f5ff3fe608060405260043610610096575f3560e01c80638da2a80111610066578063f3fef3a31161004c578063f3fef3a314610189578063fc6f9468146101a8578063fe3a6d88146101db575f80fd5b80638da2a80114610143578063e4128fb314610156575f80fd5b806347e7ef24146100a15780634bf4f423146100c257806352b19b0c146101115780637ea9ac2b14610124575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb3660046111c7565b61020e565b005b3480156100cd575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100c061011f366004611234565b610519565b34801561012f575f80fd5b506100c061013e3660046112af565b6107f5565b6100c06101513660046112e8565b610ab2565b348015610161575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b348015610194575f80fd5b506100c06101a33660046111c7565b610e28565b3480156101b3575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101e6575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461028b5760405162461bcd60e51b815260206004820152600f60248201527f5661756c743a204e6f742075736572000000000000000000000000000000000060448201526064015b60405180910390fd5b61029361114e565b6001600160a01b0382166102e95760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c696420746f6b656e2061646472657373000000006044820152606401610282565b5f81116103445760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20416d6f756e74206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610282565b604051636eb1769f60e11b81523360048201523060248201525f906001600160a01b0384169063dd62ed3e90604401602060405180830381865afa15801561038e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b29190611337565b9050818110156104045760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20436865636b20746f6b656e20616c6c6f77616e6365000000006044820152606401610282565b6040516323b872dd60e01b8152336004820152306024820152604481018390525f906001600160a01b038516906323b872dd906064016020604051808303815f875af1158015610456573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047a919061134e565b9050806104c95760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a204465706f736974207472616e73666572206661696c656400006044820152606401610282565b60405183815233906001600160a01b038616907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7906020015b60405180910390a3505061051560015f55565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105825760405162461bcd60e51b815260206004820152600e60248201526d15985d5b1d0e88139bdd08189bdd60921b6044820152606401610282565b61058a61114e565b6001600160a01b0385166105e05760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20496e76616c6964207461726765742070726f746f636f6c00006044820152606401610282565b6040516324e1eef560e21b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639387bbd490602401602060405180830381865afa158015610644573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610668919061134e565b6106da5760405162461bcd60e51b815260206004820152602960248201527f5661756c743a2050726f746f636f6c206e6f742077686974656c69737465642060448201527f666f72207969656c6400000000000000000000000000000000000000000000006064820152608401610282565b5f80866001600160a01b03163487876040516106f7929190611374565b5f6040518083038185875af1925050503d805f8114610731576040519150601f19603f3d011682016040523d82523d5f602084013e610736565b606091505b50915091508161077b826040518060400160405280601881526020017f5661756c743a205969656c642063616c6c206661696c65640000000000000000815250611176565b906107995760405162461bcd60e51b815260040161028291906113a5565b50866001600160a01b03167f8f19e6e133625f31c4ebd7c1c984dcdddac5793155aa96461bfe84eabab0086a87878787336040516107db9594939291906113ff565b60405180910390a250506107ee60015f55565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461085e5760405162461bcd60e51b815260206004820152600e60248201526d15985d5b1d0e88139bdd08189bdd60921b6044820152606401610282565b61086661114e565b6001600160a01b0383166108bc5760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c696420746f6b656e2061646472657373000000006044820152606401610282565b6001600160a01b0382166109125760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20496e76616c6964207370656e646572206164647265737300006044820152606401610282565b6040516324e1eef560e21b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639387bbd490602401602060405180830381865afa158015610976573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099a919061134e565b6109e65760405162461bcd60e51b815260206004820152601f60248201527f5661756c743a2050726f746f636f6c206e6f742077686974656c6973746564006044820152606401610282565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303815f875af1158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a56919061134e565b50816001600160a01b0316836001600160a01b03167f80da462ebfbe41cfc9bc015e7a9a3c7a2a73dbccede72d8ceb583606c27f8f9083604051610a9c91815260200190565b60405180910390a3610aad60015f55565b505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610b115750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b80610b445750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610b905760405162461bcd60e51b815260206004820152601560248201527f5661756c743a204e6f7420617574686f72697a656400000000000000000000006044820152606401610282565b610b9861114e565b6001600160a01b038316610bee5760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20496e76616c6964207461726765742070726f746f636f6c00006044820152606401610282565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610d18576040516324e1eef560e21b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639387bbd490602401602060405180830381865afa158015610c82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca6919061134e565b610d185760405162461bcd60e51b815260206004820152602f60248201527f5661756c743a2050726f746f636f6c206e6f742077686974656c69737465642060448201527f666f7220626f7420756e7969656c6400000000000000000000000000000000006064820152608401610282565b5f80846001600160a01b0316348585604051610d35929190611374565b5f6040518083038185875af1925050503d805f8114610d6f576040519150601f19603f3d011682016040523d82523d5f602084013e610d74565b606091505b509150915081610db9826040518060400160405280601a81526020017f5661756c743a20556e7969656c642063616c6c206661696c6564000000000000815250611176565b90610dd75760405162461bcd60e51b815260040161028291906113a5565b50846001600160a01b03167f57a958e4bb0f3c5ca1d328c43ef53e2c8fa1c35ae6325238ddf1ffd8169e1da7858533604051610e1593929190611441565b60405180910390a25050610aad60015f55565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e875750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610ed35760405162461bcd60e51b815260206004820152601860248201527f5661756c743a204e6f742075736572206f722061646d696e00000000000000006044820152606401610282565b610edb61114e565b6001600160a01b038216610f315760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c696420746f6b656e2061646472657373000000006044820152606401610282565b5f8111610f8c5760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20416d6f756e74206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610282565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610fd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff49190611337565b9050818110156110525760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20496e73756666696369656e742062616c616e636520696e2076604482015263185d5b1d60e21b6064820152608401610282565b60405163a9059cbb60e01b8152336004820152602481018390525f906001600160a01b0385169063a9059cbb906044016020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c2919061134e565b9050806111115760405162461bcd60e51b815260206004820152601f60248201527f5661756c743a205769746864726177207472616e73666572206661696c6564006044820152606401610282565b60405183815233906001600160a01b038616907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb90602001610502565b60025f540361117057604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b60606044835110156111895750806111a6565b600483019250828060200190518101906111a39190611481565b90505b92915050565b80356001600160a01b03811681146111c2575f80fd5b919050565b5f80604083850312156111d8575f80fd5b6111e1836111ac565b946020939093013593505050565b5f8083601f8401126111ff575f80fd5b50813567ffffffffffffffff811115611216575f80fd5b60208301915083602082850101111561122d575f80fd5b9250929050565b5f805f805f60608688031215611248575f80fd5b611251866111ac565b9450602086013567ffffffffffffffff8082111561126d575f80fd5b61127989838a016111ef565b90965094506040880135915080821115611291575f80fd5b5061129e888289016111ef565b969995985093965092949392505050565b5f805f606084860312156112c1575f80fd5b6112ca846111ac565b92506112d8602085016111ac565b9150604084013590509250925092565b5f805f604084860312156112fa575f80fd5b611303846111ac565b9250602084013567ffffffffffffffff81111561131e575f80fd5b61132a868287016111ef565b9497909650939450505050565b5f60208284031215611347575f80fd5b5051919050565b5f6020828403121561135e575f80fd5b8151801515811461136d575f80fd5b9392505050565b818382375f9101908152919050565b5f5b8381101561139d578181015183820152602001611385565b50505f910152565b602081525f82518060208401526113c3816040850160208701611383565b601f01601f19169190910160400192915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6114126060830187896113d7565b82810360208401526114258186886113d7565b9150506001600160a01b03831660408301529695505050505050565b604081525f6114546040830185876113d7565b90506001600160a01b0383166020830152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611491575f80fd5b815167ffffffffffffffff808211156114a8575f80fd5b818401915084601f8301126114bb575f80fd5b8151818111156114cd576114cd61146d565b604051601f8201601f19908116603f011681019083821181831017156114f5576114f561146d565b8160405282815287602084870101111561150d575f80fd5b61151e836020830160208801611383565b97965050505050505056fea26469706673582212203de22de73616012a1211805e851f758e47e224abce02403def5f81dbecde3bd564736f6c63430008140033a2646970667358221220ac84d72439b96302fcb9b1c0263f228ab76d1a093903e00e1b0fee86d86e90c364736f6c6343000814003300000000000000000000000098c41750f292ac7730f50ea8e9f24dd0cfed295700000000000000000000000098c41750f292ac7730f50ea8e9f24dd0cfed2957
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100da575f3560e01c80639094a91e11610088578063bc721a9611610063578063bc721a96146101df578063e75622d414610207578063e8620af114610232578063f851a44014610243575f80fd5b80639094a91e1461018e5780639387bbd4146101a1578063b4bd6f46146101cc575f80fd5b8063691a2208116100b8578063691a22081461013657806384361c07146101495780638f2839701461017b575f80fd5b806313d1d3e4146100de5780632d4f40c6146100f35780634bf4f42314610106575b5f80fd5b6100f16100ec366004610973565b610255565b005b6100f1610101366004610973565b610363565b600154610119906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f1610144366004610973565b6104a0565b61016b610157366004610973565b60026020525f908152604090205460ff1681565b604051901515815260200161012d565b6100f1610189366004610973565b6105a6565b61011961019c3660046109a0565b6106e1565b61016b6101af366004610973565b6001600160a01b03165f9081526002602052604090205460ff1690565b6101196101da366004610973565b610709565b6101196101ed366004610973565b60036020525f90815260409020546001600160a01b031681565b610119610215366004610973565b6001600160a01b039081165f908152600360205260409020541690565b60045460405190815260200161012d565b5f54610119906001600160a01b031681565b5f546001600160a01b031633146102b35760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b815260206004820152602660248201527f5661756c7443726561746f723a20496e76616c69642070726f746f636f6c206160448201526564647265737360d01b60648201526084016102aa565b6001600160a01b0381165f81815260026020526040808220805460ff19166001179055517f5ec654392567a6e4d201b682c6ed6803d120c307fd0b8ba2cca51f73e36f43389190a250565b5f546001600160a01b031633146103bc5760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064016102aa565b6001600160a01b0381166104385760405162461bcd60e51b815260206004820152602560248201527f5661756c7443726561746f723a20496e76616c6964206e657720626f7420616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016102aa565b6001546040516001600160a01b038084169216907fc65940bcd2aacf650c716b03c1cf00164d455af263e6cc29861986b39910921c905f90a36001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f546001600160a01b031633146104f95760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064016102aa565b6001600160a01b03811661055e5760405162461bcd60e51b815260206004820152602660248201527f5661756c7443726561746f723a20496e76616c69642070726f746f636f6c206160448201526564647265737360d01b60648201526084016102aa565b6001600160a01b0381165f81815260026020526040808220805460ff19169055517f15296b0fffe1e46666ceeb89267ffe04e30fd2174376b444ed3625ff79630ac49190a250565b5f546001600160a01b031633146105ff5760405162461bcd60e51b815260206004820152601760248201527f5661756c7443726561746f723a204e6f742061646d696e00000000000000000060448201526064016102aa565b6001600160a01b03811661067b5760405162461bcd60e51b815260206004820152602760248201527f5661756c7443726561746f723a20496e76616c6964206e65772061646d696e2060448201527f616464726573730000000000000000000000000000000000000000000000000060648201526084016102aa565b5f80546040516001600160a01b03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a35f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600481815481106106f0575f80fd5b5f918252602090912001546001600160a01b0316905081565b6001545f906001600160a01b031633146107655760405162461bcd60e51b815260206004820152601560248201527f5661756c7443726561746f723a204e6f7420626f74000000000000000000000060448201526064016102aa565b6001600160a01b0382166107c65760405162461bcd60e51b815260206004820152602260248201527f5661756c7443726561746f723a20496e76616c69642075736572206164647265604482015261737360f01b60648201526084016102aa565b6001600160a01b038281165f9081526003602052604090205416156108535760405162461bcd60e51b815260206004820152602b60248201527f5661756c7443726561746f723a205661756c7420616c7265616479206578697360448201527f747320666f72207573657200000000000000000000000000000000000000000060648201526084016102aa565b6001545f8054604051919285926001600160a01b039182169290911690309061087b90610966565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff0801580156108bc573d5f803e3d5ffd5b506001600160a01b038085165f81815260036020526040808220805494861673ffffffffffffffffffffffffffffffffffffffff199586168117909155600480546001810182559084527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054909516811790945551939550859450919290917f5d9c31ffa0fecffd7cf379989a3c7af252f0335e0d2a1320b55245912c781f5391a350919050565b611827806109b883390190565b5f60208284031215610983575f80fd5b81356001600160a01b0381168114610999575f80fd5b9392505050565b5f602082840312156109b0575f80fd5b503591905056fe61010060405234801562000011575f80fd5b5060405162001827380380620018278339810160408190526200003491620001e7565b60015f556001600160a01b038416620000945760405162461bcd60e51b815260206004820152601b60248201527f5661756c743a20496e76616c696420757365722061646472657373000000000060448201526064015b60405180910390fd5b6001600160a01b038316620000ec5760405162461bcd60e51b815260206004820152601a60248201527f5661756c743a20496e76616c696420626f74206164647265737300000000000060448201526064016200008b565b6001600160a01b038216620001445760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c69642061646d696e20616464726573730000000060448201526064016200008b565b6001600160a01b038116620001a85760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20496e76616c6964207661756c742063726561746f72206164646044820152637265737360e01b60648201526084016200008b565b6001600160a01b0393841660805291831660a052821660c0521660e05262000241565b80516001600160a01b0381168114620001e2575f80fd5b919050565b5f805f8060808587031215620001fb575f80fd5b6200020685620001cb565b93506200021660208601620001cb565b92506200022660408601620001cb565b91506200023660608601620001cb565b905092959194509250565b60805160a05160c05160e05161155f620002c85f395f81816101ec015281816105ff015281816109310152610c3d01525f81816101b901528181610b220152610e6501525f818160d3015281816105240152818161080001528181610abd0152610bf801525f81816101670152818161021901528181610aef0152610e33015261155f5ff3fe608060405260043610610096575f3560e01c80638da2a80111610066578063f3fef3a31161004c578063f3fef3a314610189578063fc6f9468146101a8578063fe3a6d88146101db575f80fd5b80638da2a80114610143578063e4128fb314610156575f80fd5b806347e7ef24146100a15780634bf4f423146100c257806352b19b0c146101115780637ea9ac2b14610124575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb3660046111c7565b61020e565b005b3480156100cd575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100c061011f366004611234565b610519565b34801561012f575f80fd5b506100c061013e3660046112af565b6107f5565b6100c06101513660046112e8565b610ab2565b348015610161575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b348015610194575f80fd5b506100c06101a33660046111c7565b610e28565b3480156101b3575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101e6575f80fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461028b5760405162461bcd60e51b815260206004820152600f60248201527f5661756c743a204e6f742075736572000000000000000000000000000000000060448201526064015b60405180910390fd5b61029361114e565b6001600160a01b0382166102e95760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c696420746f6b656e2061646472657373000000006044820152606401610282565b5f81116103445760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20416d6f756e74206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610282565b604051636eb1769f60e11b81523360048201523060248201525f906001600160a01b0384169063dd62ed3e90604401602060405180830381865afa15801561038e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b29190611337565b9050818110156104045760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20436865636b20746f6b656e20616c6c6f77616e6365000000006044820152606401610282565b6040516323b872dd60e01b8152336004820152306024820152604481018390525f906001600160a01b038516906323b872dd906064016020604051808303815f875af1158015610456573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047a919061134e565b9050806104c95760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a204465706f736974207472616e73666572206661696c656400006044820152606401610282565b60405183815233906001600160a01b038616907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7906020015b60405180910390a3505061051560015f55565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105825760405162461bcd60e51b815260206004820152600e60248201526d15985d5b1d0e88139bdd08189bdd60921b6044820152606401610282565b61058a61114e565b6001600160a01b0385166105e05760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20496e76616c6964207461726765742070726f746f636f6c00006044820152606401610282565b6040516324e1eef560e21b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639387bbd490602401602060405180830381865afa158015610644573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610668919061134e565b6106da5760405162461bcd60e51b815260206004820152602960248201527f5661756c743a2050726f746f636f6c206e6f742077686974656c69737465642060448201527f666f72207969656c6400000000000000000000000000000000000000000000006064820152608401610282565b5f80866001600160a01b03163487876040516106f7929190611374565b5f6040518083038185875af1925050503d805f8114610731576040519150601f19603f3d011682016040523d82523d5f602084013e610736565b606091505b50915091508161077b826040518060400160405280601881526020017f5661756c743a205969656c642063616c6c206661696c65640000000000000000815250611176565b906107995760405162461bcd60e51b815260040161028291906113a5565b50866001600160a01b03167f8f19e6e133625f31c4ebd7c1c984dcdddac5793155aa96461bfe84eabab0086a87878787336040516107db9594939291906113ff565b60405180910390a250506107ee60015f55565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461085e5760405162461bcd60e51b815260206004820152600e60248201526d15985d5b1d0e88139bdd08189bdd60921b6044820152606401610282565b61086661114e565b6001600160a01b0383166108bc5760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c696420746f6b656e2061646472657373000000006044820152606401610282565b6001600160a01b0382166109125760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20496e76616c6964207370656e646572206164647265737300006044820152606401610282565b6040516324e1eef560e21b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639387bbd490602401602060405180830381865afa158015610976573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099a919061134e565b6109e65760405162461bcd60e51b815260206004820152601f60248201527f5661756c743a2050726f746f636f6c206e6f742077686974656c6973746564006044820152606401610282565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303815f875af1158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a56919061134e565b50816001600160a01b0316836001600160a01b03167f80da462ebfbe41cfc9bc015e7a9a3c7a2a73dbccede72d8ceb583606c27f8f9083604051610a9c91815260200190565b60405180910390a3610aad60015f55565b505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610b115750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b80610b445750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610b905760405162461bcd60e51b815260206004820152601560248201527f5661756c743a204e6f7420617574686f72697a656400000000000000000000006044820152606401610282565b610b9861114e565b6001600160a01b038316610bee5760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a20496e76616c6964207461726765742070726f746f636f6c00006044820152606401610282565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610d18576040516324e1eef560e21b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639387bbd490602401602060405180830381865afa158015610c82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca6919061134e565b610d185760405162461bcd60e51b815260206004820152602f60248201527f5661756c743a2050726f746f636f6c206e6f742077686974656c69737465642060448201527f666f7220626f7420756e7969656c6400000000000000000000000000000000006064820152608401610282565b5f80846001600160a01b0316348585604051610d35929190611374565b5f6040518083038185875af1925050503d805f8114610d6f576040519150601f19603f3d011682016040523d82523d5f602084013e610d74565b606091505b509150915081610db9826040518060400160405280601a81526020017f5661756c743a20556e7969656c642063616c6c206661696c6564000000000000815250611176565b90610dd75760405162461bcd60e51b815260040161028291906113a5565b50846001600160a01b03167f57a958e4bb0f3c5ca1d328c43ef53e2c8fa1c35ae6325238ddf1ffd8169e1da7858533604051610e1593929190611441565b60405180910390a25050610aad60015f55565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e875750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610ed35760405162461bcd60e51b815260206004820152601860248201527f5661756c743a204e6f742075736572206f722061646d696e00000000000000006044820152606401610282565b610edb61114e565b6001600160a01b038216610f315760405162461bcd60e51b815260206004820152601c60248201527f5661756c743a20496e76616c696420746f6b656e2061646472657373000000006044820152606401610282565b5f8111610f8c5760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20416d6f756e74206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610282565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610fd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff49190611337565b9050818110156110525760405162461bcd60e51b8152602060048201526024808201527f5661756c743a20496e73756666696369656e742062616c616e636520696e2076604482015263185d5b1d60e21b6064820152608401610282565b60405163a9059cbb60e01b8152336004820152602481018390525f906001600160a01b0385169063a9059cbb906044016020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c2919061134e565b9050806111115760405162461bcd60e51b815260206004820152601f60248201527f5661756c743a205769746864726177207472616e73666572206661696c6564006044820152606401610282565b60405183815233906001600160a01b038616907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb90602001610502565b60025f540361117057604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b60606044835110156111895750806111a6565b600483019250828060200190518101906111a39190611481565b90505b92915050565b80356001600160a01b03811681146111c2575f80fd5b919050565b5f80604083850312156111d8575f80fd5b6111e1836111ac565b946020939093013593505050565b5f8083601f8401126111ff575f80fd5b50813567ffffffffffffffff811115611216575f80fd5b60208301915083602082850101111561122d575f80fd5b9250929050565b5f805f805f60608688031215611248575f80fd5b611251866111ac565b9450602086013567ffffffffffffffff8082111561126d575f80fd5b61127989838a016111ef565b90965094506040880135915080821115611291575f80fd5b5061129e888289016111ef565b969995985093965092949392505050565b5f805f606084860312156112c1575f80fd5b6112ca846111ac565b92506112d8602085016111ac565b9150604084013590509250925092565b5f805f604084860312156112fa575f80fd5b611303846111ac565b9250602084013567ffffffffffffffff81111561131e575f80fd5b61132a868287016111ef565b9497909650939450505050565b5f60208284031215611347575f80fd5b5051919050565b5f6020828403121561135e575f80fd5b8151801515811461136d575f80fd5b9392505050565b818382375f9101908152919050565b5f5b8381101561139d578181015183820152602001611385565b50505f910152565b602081525f82518060208401526113c3816040850160208701611383565b601f01601f19169190910160400192915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6114126060830187896113d7565b82810360208401526114258186886113d7565b9150506001600160a01b03831660408301529695505050505050565b604081525f6114546040830185876113d7565b90506001600160a01b0383166020830152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611491575f80fd5b815167ffffffffffffffff808211156114a8575f80fd5b818401915084601f8301126114bb575f80fd5b8151818111156114cd576114cd61146d565b604051601f8201601f19908116603f011681019083821181831017156114f5576114f561146d565b8160405282815287602084870101111561150d575f80fd5b61151e836020830160208801611383565b97965050505050505056fea26469706673582212203de22de73616012a1211805e851f758e47e224abce02403def5f81dbecde3bd564736f6c63430008140033a2646970667358221220ac84d72439b96302fcb9b1c0263f228ab76d1a093903e00e1b0fee86d86e90c364736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000098c41750f292ac7730f50ea8e9f24dd0cfed295700000000000000000000000098c41750f292ac7730f50ea8e9f24dd0cfed2957
-----Decoded View---------------
Arg [0] : _initialAdmin (address): 0x98c41750F292AC7730F50eA8e9f24dd0CfEd2957
Arg [1] : _initialBotAddress (address): 0x98c41750F292AC7730F50eA8e9f24dd0CfEd2957
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000098c41750f292ac7730f50ea8e9f24dd0cfed2957
Arg [1] : 00000000000000000000000098c41750f292ac7730f50ea8e9f24dd0cfed2957
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.