Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Refill Many | 21643963 | 4 days ago | IN | 0 ETH | 0.00057722 | ||||
Refill Many | 21581395 | 13 days ago | IN | 0 ETH | 0.00218378 | ||||
Refill Many | 21578034 | 13 days ago | IN | 0 ETH | 0.00059703 | ||||
Refill Many | 21467122 | 29 days ago | IN | 0 ETH | 0.00123128 | ||||
Refill Many | 21443607 | 32 days ago | IN | 0 ETH | 0.00448507 | ||||
Refill Many | 21442611 | 32 days ago | IN | 0 ETH | 0.00208032 | ||||
Refill Many | 21437869 | 33 days ago | IN | 0 ETH | 0.0019134 | ||||
Refill Many | 21425284 | 35 days ago | IN | 0 ETH | 0.00155237 | ||||
Refill Many | 21179463 | 69 days ago | IN | 0 ETH | 0.0063799 | ||||
Refill Many | 21171204 | 70 days ago | IN | 0 ETH | 0.00345678 | ||||
Refill Many | 21165376 | 71 days ago | IN | 0 ETH | 0.00329448 | ||||
Refill Many | 21165326 | 71 days ago | IN | 0 ETH | 0.00260308 | ||||
Refill Many | 21153274 | 73 days ago | IN | 0 ETH | 0.00127346 | ||||
Refill Many | 21042237 | 88 days ago | IN | 0 ETH | 0.00086727 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21643963 | 4 days ago | 2.01331486 ETH | ||||
21643963 | 4 days ago | 2.01331486 ETH | ||||
21581395 | 13 days ago | 5.02000739 ETH | ||||
21581395 | 13 days ago | 5.02000739 ETH | ||||
21578034 | 13 days ago | 5.00517616 ETH | ||||
21578034 | 13 days ago | 5.00517616 ETH | ||||
21467122 | 29 days ago | 5.01554635 ETH | ||||
21467122 | 29 days ago | 5.01554635 ETH | ||||
21443607 | 32 days ago | 5.05527452 ETH | ||||
21443607 | 32 days ago | 5.05527452 ETH | ||||
21442611 | 32 days ago | 5.02300792 ETH | ||||
21442611 | 32 days ago | 5.02300792 ETH | ||||
21437869 | 33 days ago | 3.27940259 ETH | ||||
21437869 | 33 days ago | 3.27940259 ETH | ||||
21425284 | 35 days ago | 5.01853505 ETH | ||||
21425284 | 35 days ago | 5.01853505 ETH | ||||
21179463 | 69 days ago | 5.00205805 ETH | ||||
21179463 | 69 days ago | 5.00205805 ETH | ||||
21171204 | 70 days ago | 5.03973953 ETH | ||||
21171204 | 70 days ago | 5.03973953 ETH | ||||
21165376 | 71 days ago | 5.05781266 ETH | ||||
21165376 | 71 days ago | 5.05781266 ETH | ||||
21165326 | 71 days ago | 5.01590987 ETH | ||||
21165326 | 71 days ago | 5.01590987 ETH | ||||
21153274 | 73 days ago | 5.00392926 ETH |
Loading...
Loading
Contract Name:
BotRefills
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-05 */ // SPDX-License-Identifier: MIT pragma solidity =0.8.10; contract MainnetAuthAddresses { address internal constant ADMIN_VAULT_ADDR = 0xCCf3d848e08b94478Ed8f46fFead3008faF581fD; address internal constant DSGUARD_FACTORY_ADDRESS = 0x5a15566417e6C1c9546523066500bDDBc53F88C7; address internal constant ADMIN_ADDR = 0x25eFA336886C74eA8E282ac466BdCd0199f85BB9; // USED IN ADMIN VAULT CONSTRUCTOR address internal constant PROXY_AUTH_ADDRESS = 0x149667b6FAe2c63D1B4317C716b0D0e4d3E2bD70; address internal constant MODULE_AUTH_ADDRESS = 0x7407974DDBF539e552F1d051e44573090912CC3D; } contract AuthHelper is MainnetAuthAddresses { } contract AdminVault is AuthHelper { address public owner; address public admin; error SenderNotAdmin(); constructor() { owner = msg.sender; admin = ADMIN_ADDR; } /// @notice Admin is able to change owner /// @param _owner Address of new owner function changeOwner(address _owner) public { if (admin != msg.sender){ revert SenderNotAdmin(); } owner = _owner; } /// @notice Admin is able to set new admin /// @param _admin Address of multisig that becomes new admin function changeAdmin(address _admin) public { if (admin != msg.sender){ revert SenderNotAdmin(); } admin = _admin; } } interface IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint256 digits); function totalSupply() external view returns (uint256 supply); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } library Address { //insufficient balance error InsufficientBalance(uint256 available, uint256 required); //unable to send value, recipient may have reverted error SendingValueFail(); //insufficient balance for call error InsufficientBalanceForCall(uint256 available, uint256 required); //call to non-contract error NonContractCall(); function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { uint256 balance = address(this).balance; if (balance < amount){ revert InsufficientBalance(balance, amount); } // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); if (!(success)){ revert SendingValueFail(); } } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { uint256 balance = address(this).balance; if (balance < value){ revert InsufficientBalanceForCall(balance, value); } return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { if (!(isContract(target))){ revert NonContractCall(); } // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeERC20 { using Address for address; /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Compatible with tokens that require the approval to be set to * 0 before setting it to a non-zero value. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } contract AdminAuth is AuthHelper { using SafeERC20 for IERC20; AdminVault public constant adminVault = AdminVault(ADMIN_VAULT_ADDR); error SenderNotOwner(); error SenderNotAdmin(); modifier onlyOwner() { if (adminVault.owner() != msg.sender){ revert SenderNotOwner(); } _; } modifier onlyAdmin() { if (adminVault.admin() != msg.sender){ revert SenderNotAdmin(); } _; } /// @notice withdraw stuck funds function withdrawStuckFunds(address _token, address _receiver, uint256 _amount) public onlyOwner { if (_token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { payable(_receiver).transfer(_amount); } else { IERC20(_token).safeTransfer(_receiver, _amount); } } /// @notice Destroy the contract /// @dev Deprecated method, selfdestruct will soon just send eth function kill() public onlyAdmin { selfdestruct(payable(msg.sender)); } } abstract contract IWETH { function allowance(address, address) public virtual view returns (uint256); function balanceOf(address) public virtual view returns (uint256); function approve(address, uint256) public virtual; function transfer(address, uint256) public virtual returns (bool); function transferFrom( address, address, uint256 ) public virtual returns (bool); function deposit() public payable virtual; function withdraw(uint256) public virtual; } abstract contract IBotRegistry { function botList(address) public virtual view returns (bool); } contract MainnetUtilAddresses { address internal refillCaller = 0x33fDb79aFB4456B604f376A45A546e7ae700e880; address internal feeAddr = 0x76720aC2574631530eC8163e4085d6F98513fb27; address internal constant BOT_REGISTRY_ADDRESS = 0x637726f8b08a7ABE3aE3aCaB01A80E2d8ddeF77B; address internal constant UNI_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address internal constant MKR_PROXY_REGISTRY = 0x4678f0a6958e4D2Bc4F1BAF7Bc52E8F3564f3fE4; address internal constant AAVE_MARKET = 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5; address internal constant AAVE_V3_MARKET = 0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e; address internal constant SPARK_MARKET = 0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE; address internal constant DFS_PROXY_REGISTRY_ADDR = 0x29474FdaC7142f9aB7773B8e38264FA15E3805ed; address internal constant WETH_ADDR = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address internal constant ETH_ADDR = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address internal constant WSTETH_ADDR = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0; address internal constant STETH_ADDR = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84; address internal constant WBTC_ADDR = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; address internal constant CHAINLINK_WBTC_ADDR = 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB; address internal constant DAI_ADDR = 0x6B175474E89094C44Da98b954EedeAC495271d0F; address internal constant FEE_RECEIVER_ADMIN_ADDR = 0xA74e9791D7D66c6a14B2C571BdA0F2A1f6D64E06; address internal constant UNI_V3_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; address internal constant UNI_V3_QUOTER = 0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6; address internal constant FEE_RECIPIENT = 0x39C4a92Dc506300c3Ea4c67ca4CA611102ee6F2A; // not needed on mainnet address internal constant DEFAULT_BOT = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant CHAINLINK_FEED_REGISTRY = 0x47Fb2585D2C56Fe188D0E6ec628a38b74fCeeeDf; } contract UtilHelper is MainnetUtilAddresses{ } library TokenUtils { using SafeERC20 for IERC20; address public constant WETH_ADDR = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address public constant ETH_ADDR = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; /// @dev Only approves the amount if allowance is lower than amount, does not decrease allowance function approveToken( address _tokenAddr, address _to, uint256 _amount ) internal { if (_tokenAddr == ETH_ADDR) return; if (IERC20(_tokenAddr).allowance(address(this), _to) < _amount) { IERC20(_tokenAddr).safeApprove(_to, _amount); } } function pullTokensIfNeeded( address _token, address _from, uint256 _amount ) internal returns (uint256) { // handle max uint amount if (_amount == type(uint256).max) { _amount = getBalance(_token, _from); } if (_from != address(0) && _from != address(this) && _token != ETH_ADDR && _amount != 0) { IERC20(_token).safeTransferFrom(_from, address(this), _amount); } return _amount; } function withdrawTokens( address _token, address _to, uint256 _amount ) internal returns (uint256) { if (_amount == type(uint256).max) { _amount = getBalance(_token, address(this)); } if (_to != address(0) && _to != address(this) && _amount != 0) { if (_token != ETH_ADDR) { IERC20(_token).safeTransfer(_to, _amount); } else { (bool success, ) = _to.call{value: _amount}(""); require(success, "Eth send fail"); } } return _amount; } function depositWeth(uint256 _amount) internal { IWETH(WETH_ADDR).deposit{value: _amount}(); } function withdrawWeth(uint256 _amount) internal { IWETH(WETH_ADDR).withdraw(_amount); } function getBalance(address _tokenAddr, address _acc) internal view returns (uint256) { if (_tokenAddr == ETH_ADDR) { return _acc.balance; } else { return IERC20(_tokenAddr).balanceOf(_acc); } } function getTokenDecimals(address _token) internal view returns (uint256) { if (_token == ETH_ADDR) return 18; return IERC20(_token).decimals(); } } contract BotRefills is AdminAuth, UtilHelper { using TokenUtils for address; error WrongRefillCallerError(address caller); error NotAuthBotError(address bot); mapping(address => bool) public additionalBots; modifier isApprovedBot(address _botAddr) { if (!(IBotRegistry(BOT_REGISTRY_ADDRESS).botList(_botAddr) || additionalBots[_botAddr])){ revert NotAuthBotError(_botAddr); } _; } modifier isRefillCaller { if (msg.sender != refillCaller){ revert WrongRefillCallerError(msg.sender); } _; } function refill(uint256 _ethAmount, address _botAddress) public isRefillCaller isApprovedBot(_botAddress) { IERC20(TokenUtils.WETH_ADDR).transferFrom(feeAddr, address(this), _ethAmount); TokenUtils.withdrawWeth(_ethAmount); payable(_botAddress).transfer(_ethAmount); } function refillMany(uint256[] memory _ethAmounts, address[] memory _botAddresses) public { for(uint i = 0; i < _botAddresses.length; ++i) { refill(_ethAmounts[i], _botAddresses[i]); } } ///////////////////////// ONLY OWNER METHODS ///////////////////////// function setRefillCaller(address _newBot) public onlyOwner { refillCaller = _newBot; } function setFeeAddr(address _newFeeAddr) public onlyOwner { feeAddr = _newFeeAddr; } function setAdditionalBot(address _botAddr, bool _approved) public onlyOwner { additionalBots[_botAddr] = _approved; } // solhint-disable-next-line no-empty-blocks receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"NonContractCall","type":"error"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"NotAuthBotError","type":"error"},{"inputs":[],"name":"SenderNotAdmin","type":"error"},{"inputs":[],"name":"SenderNotOwner","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"WrongRefillCallerError","type":"error"},{"inputs":[],"name":"CHAINLINK_FEED_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"additionalBots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminVault","outputs":[{"internalType":"contract AdminVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"address","name":"_botAddress","type":"address"}],"name":"refill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ethAmounts","type":"uint256[]"},{"internalType":"address[]","name":"_botAddresses","type":"address[]"}],"name":"refillMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_botAddr","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setAdditionalBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeAddr","type":"address"}],"name":"setFeeAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBot","type":"address"}],"name":"setRefillCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600080546001600160a01b03199081167333fdb79afb4456b604f376a45a546e7ae700e88017909155600180549091167376720ac2574631530ec8163e4085d6f98513fb2717905534801561005857600080fd5b50610fee806100686000396000f3fe6080604052600436106100b55760003560e01c8063b2855b4f11610069578063d09b62ed1161004e578063d09b62ed146101c5578063f644aa8714610205578063fa35525b1461022557600080fd5b8063b2855b4f14610185578063c579d490146101a557600080fd5b806360a4b0361161009a57806360a4b036146100f85780637d9f7712146101185780638cedca711461015d57600080fd5b80633be7c0a8146100c157806341c0e1b5146100e357600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004610c69565b610245565b005b3480156100ef57600080fd5b506100e1610317565b34801561010457600080fd5b506100e1610113366004610d81565b6103da565b34801561012457600080fd5b506101407347fb2585d2c56fe188d0e6ec628a38b74fceeedf81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016957600080fd5b5061014073ccf3d848e08b94478ed8f46ffead3008faf581fd81565b34801561019157600080fd5b506100e16101a0366004610e3a565b610437565b3480156101b157600080fd5b506100e16101c0366004610e5e565b61050d565b3480156101d157600080fd5b506101f56101e0366004610e3a565b60026020526000908152604090205460ff1681565b6040519015158152602001610154565b34801561021157600080fd5b506100e1610220366004610e3a565b610629565b34801561023157600080fd5b506100e1610240366004610e9f565b6106ff565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c59190610ec4565b6001600160a01b0316146102ec57604051630ca4a64560e11b815260040160405180910390fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103979190610ec4565b6001600160a01b0316146103d7576040517fa6c827a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60005b8151811015610432576104228382815181106103fb576103fb610ee1565b602002602001015183838151811061041557610415610ee1565b60200260200101516106ff565b61042b81610ef7565b90506103dd565b505050565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b79190610ec4565b6001600160a01b0316146104de57604051630ca4a64560e11b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d9190610ec4565b6001600160a01b0316146105b457604051630ca4a64560e11b815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415610615576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561060f573d6000803e3d6000fd5b50505050565b6104326001600160a01b038416838361092d565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a99190610ec4565b6001600160a01b0316146106d057604051630ca4a64560e11b815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461074a576040517fa498cbd10000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f41d6e7da0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152819073637726f8b08a7abe3ae3acab01a80e2d8ddef77b906341d6e7da90602401602060405180830381865afa1580156107bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190610f20565b8061080457506001600160a01b03811660009081526002602052604090205460ff165b610845576040517f036561d50000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610741565b6001546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201523060248201526044810184905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906323b872dd906064016020604051808303816000875af11580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190610f20565b506108f7836109ad565b6040516001600160a01b0383169084156108fc029085906000818181858888f1935050505015801561060f573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610432908490610a2e565b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b5050505050565b6000610a83826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b169092919063ffffffff16565b9050805160001480610aa4575080806020019051810190610aa49190610f20565b6104325760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610741565b6060610b258484600085610b2d565b949350505050565b6060610b3885610c0a565b610b6e576040517f304619b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080866001600160a01b03168587604051610b8a9190610f69565b60006040518083038185875af1925050503d8060008114610bc7576040519150601f19603f3d011682016040523d82523d6000602084013e610bcc565b606091505b50915091508115610be0579150610b259050565b805115610bf05780518082602001fd5b8360405162461bcd60e51b81526004016107419190610f85565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610b25575050151592915050565b6001600160a01b0381168114610c5857600080fd5b50565b8015158114610c5857600080fd5b60008060408385031215610c7c57600080fd5b8235610c8781610c43565b91506020830135610c9781610c5b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ce157610ce1610ca2565b604052919050565b600067ffffffffffffffff821115610d0357610d03610ca2565b5060051b60200190565b600082601f830112610d1e57600080fd5b81356020610d33610d2e83610ce9565b610cb8565b82815260059290921b84018101918181019086841115610d5257600080fd5b8286015b84811015610d76578035610d6981610c43565b8352918301918301610d56565b509695505050505050565b60008060408385031215610d9457600080fd5b823567ffffffffffffffff80821115610dac57600080fd5b818501915085601f830112610dc057600080fd5b81356020610dd0610d2e83610ce9565b82815260059290921b84018101918181019089841115610def57600080fd5b948201945b83861015610e0d57853582529482019490820190610df4565b96505086013592505080821115610e2357600080fd5b50610e3085828601610d0d565b9150509250929050565b600060208284031215610e4c57600080fd5b8135610e5781610c43565b9392505050565b600080600060608486031215610e7357600080fd5b8335610e7e81610c43565b92506020840135610e8e81610c43565b929592945050506040919091013590565b60008060408385031215610eb257600080fd5b823591506020830135610c9781610c43565b600060208284031215610ed657600080fd5b8151610e5781610c43565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610f1957634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610f3257600080fd5b8151610e5781610c5b565b60005b83811015610f58578181015183820152602001610f40565b8381111561060f5750506000910152565b60008251610f7b818460208701610f3d565b9190910192915050565b6020815260008251806020840152610fa4816040850160208701610f3d565b601f01601f1916919091016040019291505056fea2646970667358221220f5b6afbdcddf0148d0b379e7a462aa43186f1ee09297ea4391b4fc0e90778ee364736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106100b55760003560e01c8063b2855b4f11610069578063d09b62ed1161004e578063d09b62ed146101c5578063f644aa8714610205578063fa35525b1461022557600080fd5b8063b2855b4f14610185578063c579d490146101a557600080fd5b806360a4b0361161009a57806360a4b036146100f85780637d9f7712146101185780638cedca711461015d57600080fd5b80633be7c0a8146100c157806341c0e1b5146100e357600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004610c69565b610245565b005b3480156100ef57600080fd5b506100e1610317565b34801561010457600080fd5b506100e1610113366004610d81565b6103da565b34801561012457600080fd5b506101407347fb2585d2c56fe188d0e6ec628a38b74fceeedf81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016957600080fd5b5061014073ccf3d848e08b94478ed8f46ffead3008faf581fd81565b34801561019157600080fd5b506100e16101a0366004610e3a565b610437565b3480156101b157600080fd5b506100e16101c0366004610e5e565b61050d565b3480156101d157600080fd5b506101f56101e0366004610e3a565b60026020526000908152604090205460ff1681565b6040519015158152602001610154565b34801561021157600080fd5b506100e1610220366004610e3a565b610629565b34801561023157600080fd5b506100e1610240366004610e9f565b6106ff565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c59190610ec4565b6001600160a01b0316146102ec57604051630ca4a64560e11b815260040160405180910390fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103979190610ec4565b6001600160a01b0316146103d7576040517fa6c827a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60005b8151811015610432576104228382815181106103fb576103fb610ee1565b602002602001015183838151811061041557610415610ee1565b60200260200101516106ff565b61042b81610ef7565b90506103dd565b505050565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b79190610ec4565b6001600160a01b0316146104de57604051630ca4a64560e11b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d9190610ec4565b6001600160a01b0316146105b457604051630ca4a64560e11b815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415610615576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561060f573d6000803e3d6000fd5b50505050565b6104326001600160a01b038416838361092d565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a99190610ec4565b6001600160a01b0316146106d057604051630ca4a64560e11b815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461074a576040517fa498cbd10000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f41d6e7da0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152819073637726f8b08a7abe3ae3acab01a80e2d8ddef77b906341d6e7da90602401602060405180830381865afa1580156107bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190610f20565b8061080457506001600160a01b03811660009081526002602052604090205460ff165b610845576040517f036561d50000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610741565b6001546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201523060248201526044810184905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906323b872dd906064016020604051808303816000875af11580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190610f20565b506108f7836109ad565b6040516001600160a01b0383169084156108fc029085906000818181858888f1935050505015801561060f573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610432908490610a2e565b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b5050505050565b6000610a83826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b169092919063ffffffff16565b9050805160001480610aa4575080806020019051810190610aa49190610f20565b6104325760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610741565b6060610b258484600085610b2d565b949350505050565b6060610b3885610c0a565b610b6e576040517f304619b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080866001600160a01b03168587604051610b8a9190610f69565b60006040518083038185875af1925050503d8060008114610bc7576040519150601f19603f3d011682016040523d82523d6000602084013e610bcc565b606091505b50915091508115610be0579150610b259050565b805115610bf05780518082602001fd5b8360405162461bcd60e51b81526004016107419190610f85565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610b25575050151592915050565b6001600160a01b0381168114610c5857600080fd5b50565b8015158114610c5857600080fd5b60008060408385031215610c7c57600080fd5b8235610c8781610c43565b91506020830135610c9781610c5b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ce157610ce1610ca2565b604052919050565b600067ffffffffffffffff821115610d0357610d03610ca2565b5060051b60200190565b600082601f830112610d1e57600080fd5b81356020610d33610d2e83610ce9565b610cb8565b82815260059290921b84018101918181019086841115610d5257600080fd5b8286015b84811015610d76578035610d6981610c43565b8352918301918301610d56565b509695505050505050565b60008060408385031215610d9457600080fd5b823567ffffffffffffffff80821115610dac57600080fd5b818501915085601f830112610dc057600080fd5b81356020610dd0610d2e83610ce9565b82815260059290921b84018101918181019089841115610def57600080fd5b948201945b83861015610e0d57853582529482019490820190610df4565b96505086013592505080821115610e2357600080fd5b50610e3085828601610d0d565b9150509250929050565b600060208284031215610e4c57600080fd5b8135610e5781610c43565b9392505050565b600080600060608486031215610e7357600080fd5b8335610e7e81610c43565b92506020840135610e8e81610c43565b929592945050506040919091013590565b60008060408385031215610eb257600080fd5b823591506020830135610c9781610c43565b600060208284031215610ed657600080fd5b8151610e5781610c43565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610f1957634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610f3257600080fd5b8151610e5781610c5b565b60005b83811015610f58578181015183820152602001610f40565b8381111561060f5750506000910152565b60008251610f7b818460208701610f3d565b9190910192915050565b6020815260008251806020840152610fa4816040850160208701610f3d565b601f01601f1916919091016040019291505056fea2646970667358221220f5b6afbdcddf0148d0b379e7a462aa43186f1ee09297ea4391b4fc0e90778ee364736f6c634300080a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.