Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Don’t invest unless you’re prepared to lose all the money you invest.
3000+ Slots, 20+ Cryptos, 75K Raffle, Sports Promos - World's largest Crypto Casino & Sportsbook - Provably Fair!
Play in crypto to make deposits and withdrawals easy! Register and get a free daily shot at a 100 000 $ jackpot.
Monthly Wagering Contest - $500,000+ rewards. Provably Fair, Low House Edge and best VIP Program!
Daily free Spin 50000 Matic ,760% Deposit Bonus, 20%Rakeback, And Get 1000000 Matic free bonus on BC.Game
Deposit BONUS 300% and Cashbacks. without verification!
Holidays are coming soon! Start betting on 1xBit and get a secret gift from Santa!
Overview
POL Balance
POL Value
$0.12 (@ $0.59/POL)Token Holdings
Could not find any matches!
- ERC-20 Tokens (99)15,000 WPOL [ POL-MAT.COM ]ERC-20: ! (WPOL [...)15,000 WPOL [ POL-MAT.COM ]ERC-20: ! (WPOL [...)43,767 AAVE [ACCESS AAVE.ASIA]ERC-20: ! AAVE.as... (AAVE [...)9,650 Access Airdrop Link [zksyno.cc]ERC-20: ! Airdrop... (Access...)900,000,000 3 eth at www.ethfi.pwERC-20: ! ETHFI (3 eth ...)9,860 ACCESS [ ETHNA.VERCEL.APP ] AIRDROPERC-20: ! ETHNA (ACCESS...)9,000,000,000 pol-mat.com -Visit to claim Reward BonusERC-20: ! POL-MAT... (pol-ma...)1 Debridge Acces https://t.ly/ethersERC-20: Debridge ... (Debrid...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 Debridge Voucher https://t.ly/ethersERC-20: Debridge ... (Debrid...)0.00000001 deUnibox Airdrop https://t.ly/UNIBOXERC-20: deUnibox ... (deUnib...)80,000 nft.bitconnect666.comERC-20: Free NFT ... (nft.bi...)80,000 https://pepe-erc.vipERC-20: Free Pepe... (https:...)0.00000001 Join our X https://t.ly/CATSPACEERC-20: Join our ... (Join o...)1 Swap $pufETH at https://puffereth.xyzERC-20: PufETH (Swap $...)150 SCTERC-20: sanitize-... (SCT)1,000 USD Airdrop kshield.io/?YgxdhsERC-20: USD Airdr... (USD Ai...)1,765 xBlast AirDrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)3,000 xBlast AirDrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)80,000 Pepe-erc.vipERC-20: You Earne... (Pepe-e...)900,000,000 TokenERC-20 TOKEN*[Suspicious]7,864 TokenERC-20 TOKEN*[Suspicious]745,900 TokenERC-20 TOKEN*[Suspicious]745,000 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]9,543 TokenERC-20 TOKEN*[Suspicious]7,680 TokenERC-20 TOKEN*[Suspicious]9,543 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]3,680 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]989 TokenERC-20 TOKEN*[Suspicious]32 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1,371 TokenERC-20 TOKEN*[Suspicious]60,000 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]13,000 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Unsafe]15,000 TokenERC-20 TOKEN*[Spam]3 TokenERC-20 TOKEN*[Spam]90,000,000 TokenERC-20 TOKEN*[Spam]90,000,000 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]8 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]8,726 TokenERC-20 TOKEN*[Spam]22,400 TokenERC-20 TOKEN*[Spam]775 TokenERC-20 TOKEN*[Spam]8,273 TokenERC-20 TOKEN*[Spam]4,376 TokenERC-20 TOKEN*[Spam]85,600 TokenERC-20 TOKEN*[Spam]900,000,000 TokenERC-20 TOKEN*[Spam]929 TokenERC-20 TOKEN*[Spam]78,530 TokenERC-20 TOKEN*[Spam]8,750 TokenERC-20 TOKEN*[Spam]8,750 TokenERC-20 TOKEN*[Spam]9,000,000,000 TokenERC-20 TOKEN*[Spam]35,800 TokenERC-20 TOKEN*[Spam]9,000,000,000 TokenERC-20 TOKEN*[Spam]900,000,000,000,000 TokenERC-20 TOKEN*[Spam]8,400 TokenERC-20 TOKEN*[Spam]10,000 TokenERC-20 TOKEN*[Spam]9,000,000,000 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]32 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]2,254 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]888,888 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1,925 TokenERC-20 TOKEN*[Spam]NFT Tokens (32)GIVEAWAY$100,000,000ERC-1155https://t.ly/wreth$ETH POOLERC-721Vouchers5 stETH EventERC-1155NFTVoucher5000$ CYBERERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdropx2ERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdropx2ERC-721https://t.ly/ethersdeBridge Airdropx4ERC-721https://t.ly/ethersdeBridge AirdropERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdrop https://t.ly/ethersx2ERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdrop https://t.ly/ethersERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdrop https://t.ly/ethersx2ERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdrop https://t.ly/ethersERC-721UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Multichain Portfolio
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 18,429 transactions
Transaction Hash MethodBlockFromToInvoke 65575711 2024-12-17 2:34:00 1 hr ago 1734402840 IN 0 POL$0.00 0.00676499 40.41503721 Invoke 65571076 2024-12-16 23:46:47 4 hrs ago 1734392807 IN 50,600 POL$29,958.37 0.00364713 34.9168178 Invoke 65570898 2024-12-16 23:40:29 4 hrs ago 1734392429 IN 0 POL$0.00 0.00614517 30.00000004 Invoke 65570200 2024-12-16 23:15:19 4 hrs ago 1734390919 IN 33,400 POL$19,774.89 0.00823761 34.91681781 Invoke 65569567 2024-12-16 22:52:51 4 hrs ago 1734389571 IN 1 POL$0.59 0.00303735 30.00000002 Invoke 65569467 2024-12-16 22:49:19 4 hrs ago 1734389359 IN 2 POL$1.18 0.00327878 32.38466023 Invoke 65569438 2024-12-16 22:48:17 4 hrs ago 1734389297 IN 1 POL$0.59 0.003987 30.00000003 Invoke 65568967 2024-12-16 22:31:35 5 hrs ago 1734388295 IN 0 POL$0.00 0.00522942 31.2413395 Invoke 65567581 2024-12-16 21:41:46 6 hrs ago 1734385306 IN 0 POL$0.00 0.00407508 30.00977254 Invoke 65567315 2024-12-16 21:31:51 6 hrs ago 1734384711 IN 0 POL$0.00 0.00479815 30.50998282 Invoke 65565486 2024-12-16 20:24:38 7 hrs ago 1734380678 IN 0 POL$0.00 0.00484614 29.48672344 Invoke 65562785 2024-12-16 18:46:29 9 hrs ago 1734374789 IN 82 POL$48.55 0.00348917 34.4593067 Invoke 65562395 2024-12-16 18:32:29 9 hrs ago 1734373949 IN 0 POL$0.00 0.00643837 30.14489418 Invoke 65561915 2024-12-16 18:15:28 9 hrs ago 1734372928 IN 0 POL$0.00 0.00323223 33.93887705 Invoke 65558804 2024-12-16 16:25:16 11 hrs ago 1734366316 IN 10,000 POL$5,920.63 0.0091481 45.32645439 Invoke 65558709 2024-12-16 16:21:54 11 hrs ago 1734366114 IN 3,325 POL$1,968.61 0.00403794 39.87900888 Invoke 65558641 2024-12-16 16:19:30 11 hrs ago 1734365970 IN 6,000 POL$3,552.38 0.00815245 40.39327306 Invoke 65558200 2024-12-16 16:03:50 11 hrs ago 1734365030 IN 3,342 POL$1,978.67 0.00472208 46.63559842 Invoke 65558056 2024-12-16 15:58:28 11 hrs ago 1734364708 IN 3,360 POL$1,989.33 0.00726828 36.01672569 Invoke 65557942 2024-12-16 15:54:26 11 hrs ago 1734364466 IN 5,000 POL$2,960.31 0.009543 47.28310441 Invoke 65557851 2024-12-16 15:51:12 11 hrs ago 1734364272 IN 10,000 POL$5,920.63 0.00442921 43.73929572 Invoke 65557677 2024-12-16 15:44:39 12 hrs ago 1734363879 IN 5,000 POL$2,960.31 0.00528064 39.72830576 Invoke 65557665 2024-12-16 15:44:15 12 hrs ago 1734363855 IN 450 POL$266.43 0.00540656 40.68451948 Invoke 65555768 2024-12-16 14:36:36 13 hrs ago 1734359796 IN 0 POL$0.00 0.03494503 173.3487685 Invoke 65554182 2024-12-16 13:39:48 14 hrs ago 1734356388 IN 0 POL$0.00 0.01278917 134.28786336 Latest 25 internal transactions (View All)
Parent Transaction Hash Block From To 65571076 2024-12-16 23:46:47 4 hrs ago 1734392807 50,600 POL$29,958.37 65570200 2024-12-16 23:15:19 4 hrs ago 1734390919 33,400 POL$19,774.89 65569567 2024-12-16 22:52:51 4 hrs ago 1734389571 1 POL$0.59 65569467 2024-12-16 22:49:19 4 hrs ago 1734389359 2 POL$1.18 65569438 2024-12-16 22:48:17 4 hrs ago 1734389297 1 POL$0.59 65567581 2024-12-16 21:41:46 6 hrs ago 1734385306 5,000 POL$2,960.31 65567581 2024-12-16 21:41:46 6 hrs ago 1734385306 5,000 POL$2,960.31 65562785 2024-12-16 18:46:29 9 hrs ago 1734374789 82 POL$48.55 65561915 2024-12-16 18:15:28 9 hrs ago 1734372928 2.29999689 POL$1.36 65561915 2024-12-16 18:15:28 9 hrs ago 1734372928 2.29999689 POL$1.36 65558804 2024-12-16 16:25:16 11 hrs ago 1734366316 10,000 POL$5,920.63 65558709 2024-12-16 16:21:54 11 hrs ago 1734366114 3,325 POL$1,968.61 65558641 2024-12-16 16:19:30 11 hrs ago 1734365970 6,000 POL$3,552.38 65558200 2024-12-16 16:03:50 11 hrs ago 1734365030 3,342 POL$1,978.67 65558056 2024-12-16 15:58:28 11 hrs ago 1734364708 3,360 POL$1,989.33 65557942 2024-12-16 15:54:26 11 hrs ago 1734364466 5,000 POL$2,960.31 65557851 2024-12-16 15:51:12 11 hrs ago 1734364272 10,000 POL$5,920.63 65557677 2024-12-16 15:44:39 12 hrs ago 1734363879 5,000 POL$2,960.31 65557665 2024-12-16 15:44:15 12 hrs ago 1734363855 450 POL$266.43 65554182 2024-12-16 13:39:48 14 hrs ago 1734356388 0.99999846 POL$0.59 65554182 2024-12-16 13:39:48 14 hrs ago 1734356388 0.99999846 POL$0.59 65545587 2024-12-16 8:34:01 19 hrs ago 1734338041 56,765.16611175 POL$33,608.54 65521556 2024-12-15 18:07:59 33 hrs ago 1734286079 357.99999836 POL$211.96 65521556 2024-12-15 18:07:59 33 hrs ago 1734286079 357.99999836 POL$211.96 65515709 2024-12-15 14:35:23 37 hrs ago 1734273323 2.19999644 POL$1.30 Loading...LoadingContract Name:BaseBulker
Compiler Versionv0.8.15+commit.e14f2714
Optimization Enabled:Yes with 1 runs
Other Settings:default evmVersionContract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; import "../CometInterface.sol"; import "../IERC20NonStandard.sol"; import "../IWETH9.sol"; /** * @dev Interface for claiming rewards from the CometRewards contract */ interface IClaimable { function claim(address comet, address src, bool shouldAccrue) external; function claimTo(address comet, address src, address to, bool shouldAccrue) external; } /** * @title Compound's Bulker contract * @notice Executes multiple Comet-related actions in a single transaction * @author Compound * @dev Note: Only intended to be used on EVM chains that have a native token and wrapped native token that implements the IWETH interface */ contract BaseBulker { /** Custom events **/ event AdminTransferred(address indexed oldAdmin, address indexed newAdmin); /** General configuration constants **/ /// @notice The admin of the Bulker contract address public admin; /// @notice The address of the wrapped representation of the chain's native asset address payable public immutable wrappedNativeToken; /** Actions **/ /// @notice The action for supplying an asset to Comet bytes32 public constant ACTION_SUPPLY_ASSET = "ACTION_SUPPLY_ASSET"; /// @notice The action for supplying a native asset (e.g. ETH on Ethereum mainnet) to Comet bytes32 public constant ACTION_SUPPLY_NATIVE_TOKEN = "ACTION_SUPPLY_NATIVE_TOKEN"; /// @notice The action for transferring an asset within Comet bytes32 public constant ACTION_TRANSFER_ASSET = "ACTION_TRANSFER_ASSET"; /// @notice The action for withdrawing an asset from Comet bytes32 public constant ACTION_WITHDRAW_ASSET = "ACTION_WITHDRAW_ASSET"; /// @notice The action for withdrawing a native asset from Comet bytes32 public constant ACTION_WITHDRAW_NATIVE_TOKEN = "ACTION_WITHDRAW_NATIVE_TOKEN"; /// @notice The action for claiming rewards from the Comet rewards contract bytes32 public constant ACTION_CLAIM_REWARD = "ACTION_CLAIM_REWARD"; /** Custom errors **/ error InvalidAddress(); error InvalidArgument(); error FailedToSendNativeToken(); error TransferInFailed(); error TransferOutFailed(); error Unauthorized(); error UnhandledAction(); /** * @notice Construct a new BaseBulker instance * @param admin_ The admin of the Bulker contract * @param wrappedNativeToken_ The address of the wrapped representation of the chain's native asset **/ constructor(address admin_, address payable wrappedNativeToken_) { admin = admin_; wrappedNativeToken = wrappedNativeToken_; } /** * @notice Fallback for receiving native token. Needed for ACTION_WITHDRAW_NATIVE_TOKEN */ receive() external payable {} /** * @notice A public function to sweep accidental ERC-20 transfers to this contract * @dev Note: Make sure to check that the asset being swept out is not malicious * @param recipient The address that will receive the swept funds * @param asset The address of the ERC-20 token to sweep */ function sweepToken(address recipient, address asset) external { if (msg.sender != admin) revert Unauthorized(); uint256 balance = IERC20NonStandard(asset).balanceOf(address(this)); doTransferOut(asset, recipient, balance); } /** * @notice A public function to sweep accidental native token transfers to this contract * @param recipient The address that will receive the swept funds */ function sweepNativeToken(address recipient) external { if (msg.sender != admin) revert Unauthorized(); uint256 balance = address(this).balance; (bool success, ) = recipient.call{ value: balance }(""); if (!success) revert FailedToSendNativeToken(); } /** * @notice Transfers the admin rights to a new address * @param newAdmin The address that will become the new admin */ function transferAdmin(address newAdmin) external { if (msg.sender != admin) revert Unauthorized(); if (newAdmin == address(0)) revert InvalidAddress(); address oldAdmin = admin; admin = newAdmin; emit AdminTransferred(oldAdmin, newAdmin); } /** * @notice Executes a list of actions in order * @param actions The list of actions to execute in order * @param data The list of calldata to use for each action */ function invoke(bytes32[] calldata actions, bytes[] calldata data) external payable { if (actions.length != data.length) revert InvalidArgument(); uint unusedNativeToken = msg.value; for (uint i = 0; i < actions.length; ) { bytes32 action = actions[i]; if (action == ACTION_SUPPLY_ASSET) { (address comet, address to, address asset, uint amount) = abi.decode(data[i], (address, address, address, uint)); supplyTo(comet, to, asset, amount); } else if (action == ACTION_SUPPLY_NATIVE_TOKEN) { (address comet, address to, uint amount) = abi.decode(data[i], (address, address, uint)); uint256 nativeTokenUsed = supplyNativeTokenTo(comet, to, amount); unusedNativeToken -= nativeTokenUsed; } else if (action == ACTION_TRANSFER_ASSET) { (address comet, address to, address asset, uint amount) = abi.decode(data[i], (address, address, address, uint)); transferTo(comet, to, asset, amount); } else if (action == ACTION_WITHDRAW_ASSET) { (address comet, address to, address asset, uint amount) = abi.decode(data[i], (address, address, address, uint)); withdrawTo(comet, to, asset, amount); } else if (action == ACTION_WITHDRAW_NATIVE_TOKEN) { (address comet, address to, uint amount) = abi.decode(data[i], (address, address, uint)); withdrawNativeTokenTo(comet, to, amount); } else if (action == ACTION_CLAIM_REWARD) { (address comet, address rewards, address src, bool shouldAccrue) = abi.decode(data[i], (address, address, address, bool)); claimReward(comet, rewards, src, shouldAccrue); } else { handleAction(action, data[i]); } unchecked { i++; } } // Refund unused native token back to msg.sender if (unusedNativeToken > 0) { (bool success, ) = msg.sender.call{ value: unusedNativeToken }(""); if (!success) revert FailedToSendNativeToken(); } } /** * @notice Handles any actions not handled by the BaseBulker implementation * @dev Note: Meant to be overridden by contracts that extend BaseBulker and want to support more actions */ function handleAction(bytes32 action, bytes calldata data) virtual internal { revert UnhandledAction(); } /** * @notice Supplies an asset to a user in Comet * @dev Note: This contract must have permission to manage msg.sender's Comet account */ function supplyTo(address comet, address to, address asset, uint amount) internal { CometInterface(comet).supplyFrom(msg.sender, to, asset, amount); } /** * @notice Wraps the native token and supplies wrapped native token to a user in Comet * @return The amount of the native token wrapped and supplied to Comet * @dev Note: Supports `amount` of `uint256.max` implies max only for base asset */ function supplyNativeTokenTo(address comet, address to, uint amount) internal returns (uint256) { uint256 supplyAmount = amount; if (wrappedNativeToken == CometInterface(comet).baseToken()) { if (amount == type(uint256).max) supplyAmount = CometInterface(comet).borrowBalanceOf(msg.sender); } IWETH9(wrappedNativeToken).deposit{ value: supplyAmount }(); IWETH9(wrappedNativeToken).approve(comet, supplyAmount); CometInterface(comet).supplyFrom(address(this), to, wrappedNativeToken, supplyAmount); return supplyAmount; } /** * @notice Transfers an asset to a user in Comet * @dev Note: This contract must have permission to manage msg.sender's Comet account */ function transferTo(address comet, address to, address asset, uint amount) internal { CometInterface(comet).transferAssetFrom(msg.sender, to, asset, amount); } /** * @notice Withdraws an asset to a user in Comet * @dev Note: This contract must have permission to manage msg.sender's Comet account */ function withdrawTo(address comet, address to, address asset, uint amount) internal { CometInterface(comet).withdrawFrom(msg.sender, to, asset, amount); } /** * @notice Withdraws wrapped native token from Comet, unwraps it to the native token, and transfers it to a user * @dev Note: This contract must have permission to manage msg.sender's Comet account * @dev Note: Supports `amount` of `uint256.max` only for the base asset. Should revert for a collateral asset */ function withdrawNativeTokenTo(address comet, address to, uint amount) internal { uint256 withdrawAmount = amount; if (wrappedNativeToken == CometInterface(comet).baseToken()) { if (amount == type(uint256).max) withdrawAmount = CometInterface(comet).balanceOf(msg.sender); } CometInterface(comet).withdrawFrom(msg.sender, address(this), wrappedNativeToken, withdrawAmount); IWETH9(wrappedNativeToken).withdraw(withdrawAmount); (bool success, ) = to.call{ value: withdrawAmount }(""); if (!success) revert FailedToSendNativeToken(); } /** * @notice Claims rewards for a user */ function claimReward(address comet, address rewards, address src, bool shouldAccrue) internal { IClaimable(rewards).claim(comet, src, shouldAccrue); } /** * @notice Similar to ERC-20 transfer, except it properly handles `transferFrom` from non-standard ERC-20 tokens * @param asset The ERC-20 token to transfer in * @param from The address to transfer from * @param amount The amount of the token to transfer * @dev Note: This does not check that the amount transferred in is actually equals to the amount specified (e.g. fee tokens will not revert) * @dev Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value. See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca */ function doTransferIn(address asset, address from, uint amount) internal { IERC20NonStandard(asset).transferFrom(from, address(this), amount); bool success; assembly { switch returndatasize() case 0 { // This is a non-standard ERC-20 success := not(0) // set success to true } case 32 { // This is a compliant ERC-20 returndatacopy(0, 0, 32) success := mload(0) // Set `success = returndata` of override external call } default { // This is an excessively non-compliant ERC-20, revert. revert(0, 0) } } if (!success) revert TransferInFailed(); } /** * @notice Similar to ERC-20 transfer, except it properly handles `transfer` from non-standard ERC-20 tokens * @param asset The ERC-20 token to transfer out * @param to The recipient of the token transfer * @param amount The amount of the token to transfer * @dev Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value. See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca */ function doTransferOut(address asset, address to, uint amount) internal { IERC20NonStandard(asset).transfer(to, amount); bool success; assembly { switch returndatasize() case 0 { // This is a non-standard ERC-20 success := not(0) // set success to true } case 32 { // This is a compliant ERC-20 returndatacopy(0, 0, 32) success := mload(0) // Set `success = returndata` of override external call } default { // This is an excessively non-compliant ERC-20, revert. revert(0, 0) } } if (!success) revert TransferOutFailed(); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; interface IWETH9 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); receive() external payable; function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; /** * @title IERC20NonStandard * @dev Version of ERC20 with no return values for `approve`, `transfer`, and `transferFrom` * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca */ interface IERC20NonStandard { function approve(address spender, uint256 amount) external; function transfer(address to, uint256 value) external; function transferFrom(address from, address to, uint256 value) external; function balanceOf(address account) external view returns (uint256); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; import "./CometMainInterface.sol"; import "./CometExtInterface.sol"; /** * @title Compound's Comet Interface * @notice An efficient monolithic money market protocol * @author Compound */ abstract contract CometInterface is CometMainInterface, CometExtInterface {}
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; import "./CometCore.sol"; /** * @title Compound's Comet Ext Interface * @notice An efficient monolithic money market protocol * @author Compound */ abstract contract CometExtInterface is CometCore { error BadAmount(); error BadNonce(); error BadSignatory(); error InvalidValueS(); error InvalidValueV(); error SignatureExpired(); function allow(address manager, bool isAllowed) virtual external; function allowBySig(address owner, address manager, bool isAllowed, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) virtual external; function collateralBalanceOf(address account, address asset) virtual external view returns (uint128); function baseTrackingAccrued(address account) virtual external view returns (uint64); function baseAccrualScale() virtual external view returns (uint64); function baseIndexScale() virtual external view returns (uint64); function factorScale() virtual external view returns (uint64); function priceScale() virtual external view returns (uint64); function maxAssets() virtual external view returns (uint8); function totalsBasic() virtual external view returns (TotalsBasic memory); function version() virtual external view returns (string memory); /** * ===== ERC20 interfaces ===== * Does not include the following functions/events, which are defined in `CometMainInterface` instead: * - function decimals() virtual external view returns (uint8) * - function totalSupply() virtual external view returns (uint256) * - function transfer(address dst, uint amount) virtual external returns (bool) * - function transferFrom(address src, address dst, uint amount) virtual external returns (bool) * - function balanceOf(address owner) virtual external view returns (uint256) * - event Transfer(address indexed from, address indexed to, uint256 amount) */ function name() virtual external view returns (string memory); function symbol() virtual external view returns (string memory); /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved (-1 means infinite) * @return Whether or not the approval succeeded */ function approve(address spender, uint256 amount) virtual external returns (bool); /** * @notice Get the current allowance from `owner` for `spender` * @param owner The address of the account which owns the tokens to be spent * @param spender The address of the account which may transfer tokens * @return The number of tokens allowed to be spent (-1 means infinite) */ function allowance(address owner, address spender) virtual external view returns (uint256); event Approval(address indexed owner, address indexed spender, uint256 amount); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; import "./CometCore.sol"; /** * @title Compound's Comet Main Interface (without Ext) * @notice An efficient monolithic money market protocol * @author Compound */ abstract contract CometMainInterface is CometCore { error Absurd(); error AlreadyInitialized(); error BadAsset(); error BadDecimals(); error BadDiscount(); error BadMinimum(); error BadPrice(); error BorrowTooSmall(); error BorrowCFTooLarge(); error InsufficientReserves(); error LiquidateCFTooLarge(); error NoSelfTransfer(); error NotCollateralized(); error NotForSale(); error NotLiquidatable(); error Paused(); error SupplyCapExceeded(); error TimestampTooLarge(); error TooManyAssets(); error TooMuchSlippage(); error TransferInFailed(); error TransferOutFailed(); error Unauthorized(); event Supply(address indexed from, address indexed dst, uint amount); event Transfer(address indexed from, address indexed to, uint amount); event Withdraw(address indexed src, address indexed to, uint amount); event SupplyCollateral(address indexed from, address indexed dst, address indexed asset, uint amount); event TransferCollateral(address indexed from, address indexed to, address indexed asset, uint amount); event WithdrawCollateral(address indexed src, address indexed to, address indexed asset, uint amount); /// @notice Event emitted when a borrow position is absorbed by the protocol event AbsorbDebt(address indexed absorber, address indexed borrower, uint basePaidOut, uint usdValue); /// @notice Event emitted when a user's collateral is absorbed by the protocol event AbsorbCollateral(address indexed absorber, address indexed borrower, address indexed asset, uint collateralAbsorbed, uint usdValue); /// @notice Event emitted when a collateral asset is purchased from the protocol event BuyCollateral(address indexed buyer, address indexed asset, uint baseAmount, uint collateralAmount); /// @notice Event emitted when an action is paused/unpaused event PauseAction(bool supplyPaused, bool transferPaused, bool withdrawPaused, bool absorbPaused, bool buyPaused); /// @notice Event emitted when reserves are withdrawn by the governor event WithdrawReserves(address indexed to, uint amount); function supply(address asset, uint amount) virtual external; function supplyTo(address dst, address asset, uint amount) virtual external; function supplyFrom(address from, address dst, address asset, uint amount) virtual external; function transfer(address dst, uint amount) virtual external returns (bool); function transferFrom(address src, address dst, uint amount) virtual external returns (bool); function transferAsset(address dst, address asset, uint amount) virtual external; function transferAssetFrom(address src, address dst, address asset, uint amount) virtual external; function withdraw(address asset, uint amount) virtual external; function withdrawTo(address to, address asset, uint amount) virtual external; function withdrawFrom(address src, address to, address asset, uint amount) virtual external; function approveThis(address manager, address asset, uint amount) virtual external; function withdrawReserves(address to, uint amount) virtual external; function absorb(address absorber, address[] calldata accounts) virtual external; function buyCollateral(address asset, uint minAmount, uint baseAmount, address recipient) virtual external; function quoteCollateral(address asset, uint baseAmount) virtual public view returns (uint); function getAssetInfo(uint8 i) virtual public view returns (AssetInfo memory); function getAssetInfoByAddress(address asset) virtual public view returns (AssetInfo memory); function getCollateralReserves(address asset) virtual public view returns (uint); function getReserves() virtual public view returns (int); function getPrice(address priceFeed) virtual public view returns (uint); function isBorrowCollateralized(address account) virtual public view returns (bool); function isLiquidatable(address account) virtual public view returns (bool); function totalSupply() virtual external view returns (uint256); function totalBorrow() virtual external view returns (uint256); function balanceOf(address owner) virtual public view returns (uint256); function borrowBalanceOf(address account) virtual public view returns (uint256); function pause(bool supplyPaused, bool transferPaused, bool withdrawPaused, bool absorbPaused, bool buyPaused) virtual external; function isSupplyPaused() virtual public view returns (bool); function isTransferPaused() virtual public view returns (bool); function isWithdrawPaused() virtual public view returns (bool); function isAbsorbPaused() virtual public view returns (bool); function isBuyPaused() virtual public view returns (bool); function accrueAccount(address account) virtual external; function getSupplyRate(uint utilization) virtual public view returns (uint64); function getBorrowRate(uint utilization) virtual public view returns (uint64); function getUtilization() virtual public view returns (uint); function governor() virtual external view returns (address); function pauseGuardian() virtual external view returns (address); function baseToken() virtual external view returns (address); function baseTokenPriceFeed() virtual external view returns (address); function extensionDelegate() virtual external view returns (address); /// @dev uint64 function supplyKink() virtual external view returns (uint); /// @dev uint64 function supplyPerSecondInterestRateSlopeLow() virtual external view returns (uint); /// @dev uint64 function supplyPerSecondInterestRateSlopeHigh() virtual external view returns (uint); /// @dev uint64 function supplyPerSecondInterestRateBase() virtual external view returns (uint); /// @dev uint64 function borrowKink() virtual external view returns (uint); /// @dev uint64 function borrowPerSecondInterestRateSlopeLow() virtual external view returns (uint); /// @dev uint64 function borrowPerSecondInterestRateSlopeHigh() virtual external view returns (uint); /// @dev uint64 function borrowPerSecondInterestRateBase() virtual external view returns (uint); /// @dev uint64 function storeFrontPriceFactor() virtual external view returns (uint); /// @dev uint64 function baseScale() virtual external view returns (uint); /// @dev uint64 function trackingIndexScale() virtual external view returns (uint); /// @dev uint64 function baseTrackingSupplySpeed() virtual external view returns (uint); /// @dev uint64 function baseTrackingBorrowSpeed() virtual external view returns (uint); /// @dev uint104 function baseMinForRewards() virtual external view returns (uint); /// @dev uint104 function baseBorrowMin() virtual external view returns (uint); /// @dev uint104 function targetReserves() virtual external view returns (uint); function numAssets() virtual external view returns (uint8); function decimals() virtual external view returns (uint8); function initializeStorage() virtual external; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; import "./CometConfiguration.sol"; import "./CometStorage.sol"; import "./CometMath.sol"; abstract contract CometCore is CometConfiguration, CometStorage, CometMath { struct AssetInfo { uint8 offset; address asset; address priceFeed; uint64 scale; uint64 borrowCollateralFactor; uint64 liquidateCollateralFactor; uint64 liquidationFactor; uint128 supplyCap; } /** Internal constants **/ /// @dev The max number of assets this contract is hardcoded to support /// Do not change this variable without updating all the fields throughout the contract, // including the size of UserBasic.assetsIn and corresponding integer conversions. uint8 internal constant MAX_ASSETS = 15; /// @dev The max number of decimals base token can have /// Note this cannot just be increased arbitrarily. uint8 internal constant MAX_BASE_DECIMALS = 18; /// @dev The max value for a collateral factor (1) uint64 internal constant MAX_COLLATERAL_FACTOR = FACTOR_SCALE; /// @dev Offsets for specific actions in the pause flag bit array uint8 internal constant PAUSE_SUPPLY_OFFSET = 0; uint8 internal constant PAUSE_TRANSFER_OFFSET = 1; uint8 internal constant PAUSE_WITHDRAW_OFFSET = 2; uint8 internal constant PAUSE_ABSORB_OFFSET = 3; uint8 internal constant PAUSE_BUY_OFFSET = 4; /// @dev The decimals required for a price feed uint8 internal constant PRICE_FEED_DECIMALS = 8; /// @dev 365 days * 24 hours * 60 minutes * 60 seconds uint64 internal constant SECONDS_PER_YEAR = 31_536_000; /// @dev The scale for base tracking accrual uint64 internal constant BASE_ACCRUAL_SCALE = 1e6; /// @dev The scale for base index (depends on time/rate scales, not base token) uint64 internal constant BASE_INDEX_SCALE = 1e15; /// @dev The scale for prices (in USD) uint64 internal constant PRICE_SCALE = uint64(10 ** PRICE_FEED_DECIMALS); /// @dev The scale for factors uint64 internal constant FACTOR_SCALE = 1e18; /** * @notice Determine if the manager has permission to act on behalf of the owner * @param owner The owner account * @param manager The manager account * @return Whether or not the manager has permission */ function hasPermission(address owner, address manager) public view returns (bool) { return owner == manager || isAllowed[owner][manager]; } /** * @dev The positive present supply balance if positive or the negative borrow balance if negative */ function presentValue(int104 principalValue_) internal view returns (int256) { if (principalValue_ >= 0) { return signed256(presentValueSupply(baseSupplyIndex, uint104(principalValue_))); } else { return -signed256(presentValueBorrow(baseBorrowIndex, uint104(-principalValue_))); } } /** * @dev The principal amount projected forward by the supply index */ function presentValueSupply(uint64 baseSupplyIndex_, uint104 principalValue_) internal pure returns (uint256) { return uint256(principalValue_) * baseSupplyIndex_ / BASE_INDEX_SCALE; } /** * @dev The principal amount projected forward by the borrow index */ function presentValueBorrow(uint64 baseBorrowIndex_, uint104 principalValue_) internal pure returns (uint256) { return uint256(principalValue_) * baseBorrowIndex_ / BASE_INDEX_SCALE; } /** * @dev The positive principal if positive or the negative principal if negative */ function principalValue(int256 presentValue_) internal view returns (int104) { if (presentValue_ >= 0) { return signed104(principalValueSupply(baseSupplyIndex, uint256(presentValue_))); } else { return -signed104(principalValueBorrow(baseBorrowIndex, uint256(-presentValue_))); } } /** * @dev The present value projected backward by the supply index (rounded down) * Note: This will overflow (revert) at 2^104/1e18=~20 trillion principal for assets with 18 decimals. */ function principalValueSupply(uint64 baseSupplyIndex_, uint256 presentValue_) internal pure returns (uint104) { return safe104((presentValue_ * BASE_INDEX_SCALE) / baseSupplyIndex_); } /** * @dev The present value projected backward by the borrow index (rounded up) * Note: This will overflow (revert) at 2^104/1e18=~20 trillion principal for assets with 18 decimals. */ function principalValueBorrow(uint64 baseBorrowIndex_, uint256 presentValue_) internal pure returns (uint104) { return safe104((presentValue_ * BASE_INDEX_SCALE + baseBorrowIndex_ - 1) / baseBorrowIndex_); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; /** * @title Compound's Comet Configuration Interface * @author Compound */ contract CometConfiguration { struct ExtConfiguration { bytes32 name32; bytes32 symbol32; } struct Configuration { address governor; address pauseGuardian; address baseToken; address baseTokenPriceFeed; address extensionDelegate; uint64 supplyKink; uint64 supplyPerYearInterestRateSlopeLow; uint64 supplyPerYearInterestRateSlopeHigh; uint64 supplyPerYearInterestRateBase; uint64 borrowKink; uint64 borrowPerYearInterestRateSlopeLow; uint64 borrowPerYearInterestRateSlopeHigh; uint64 borrowPerYearInterestRateBase; uint64 storeFrontPriceFactor; uint64 trackingIndexScale; uint64 baseTrackingSupplySpeed; uint64 baseTrackingBorrowSpeed; uint104 baseMinForRewards; uint104 baseBorrowMin; uint104 targetReserves; AssetConfig[] assetConfigs; } struct AssetConfig { address asset; address priceFeed; uint8 decimals; uint64 borrowCollateralFactor; uint64 liquidateCollateralFactor; uint64 liquidationFactor; uint128 supplyCap; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; /** * @title Compound's Comet Storage Interface * @dev Versions can enforce append-only storage slots via inheritance. * @author Compound */ contract CometStorage { // 512 bits total = 2 slots struct TotalsBasic { // 1st slot uint64 baseSupplyIndex; uint64 baseBorrowIndex; uint64 trackingSupplyIndex; uint64 trackingBorrowIndex; // 2nd slot uint104 totalSupplyBase; uint104 totalBorrowBase; uint40 lastAccrualTime; uint8 pauseFlags; } struct TotalsCollateral { uint128 totalSupplyAsset; uint128 _reserved; } struct UserBasic { int104 principal; uint64 baseTrackingIndex; uint64 baseTrackingAccrued; uint16 assetsIn; uint8 _reserved; } struct UserCollateral { uint128 balance; uint128 _reserved; } struct LiquidatorPoints { uint32 numAbsorbs; uint64 numAbsorbed; uint128 approxSpend; uint32 _reserved; } /// @dev Aggregate variables tracked for the entire market uint64 internal baseSupplyIndex; uint64 internal baseBorrowIndex; uint64 internal trackingSupplyIndex; uint64 internal trackingBorrowIndex; uint104 internal totalSupplyBase; uint104 internal totalBorrowBase; uint40 internal lastAccrualTime; uint8 internal pauseFlags; /// @notice Aggregate variables tracked for each collateral asset mapping(address => TotalsCollateral) public totalsCollateral; /// @notice Mapping of users to accounts which may be permitted to manage the user account mapping(address => mapping(address => bool)) public isAllowed; /// @notice The next expected nonce for an address, for validating authorizations via signature mapping(address => uint) public userNonce; /// @notice Mapping of users to base principal and other basic data mapping(address => UserBasic) public userBasic; /// @notice Mapping of users to collateral data per collateral asset mapping(address => mapping(address => UserCollateral)) public userCollateral; /// @notice Mapping of magic liquidator points mapping(address => LiquidatorPoints) public liquidatorPoints; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.15; /** * @title Compound's Comet Math Contract * @dev Pure math functions * @author Compound */ contract CometMath { /** Custom errors **/ error InvalidUInt64(); error InvalidUInt104(); error InvalidUInt128(); error InvalidInt104(); error InvalidInt256(); error NegativeNumber(); function safe64(uint n) internal pure returns (uint64) { if (n > type(uint64).max) revert InvalidUInt64(); return uint64(n); } function safe104(uint n) internal pure returns (uint104) { if (n > type(uint104).max) revert InvalidUInt104(); return uint104(n); } function safe128(uint n) internal pure returns (uint128) { if (n > type(uint128).max) revert InvalidUInt128(); return uint128(n); } function signed104(uint104 n) internal pure returns (int104) { if (n > uint104(type(int104).max)) revert InvalidInt104(); return int104(n); } function signed256(uint256 n) internal pure returns (int256) { if (n > uint256(type(int256).max)) revert InvalidInt256(); return int256(n); } function unsigned104(int104 n) internal pure returns (uint104) { if (n < 0) revert NegativeNumber(); return uint104(n); } function unsigned256(int256 n) internal pure returns (uint256) { if (n < 0) revert NegativeNumber(); return uint256(n); } function toUInt8(bool x) internal pure returns (uint8) { return x ? 1 : 0; } function toBool(uint8 x) internal pure returns (bool) { return x != 0; } }
{ "optimizer": { "enabled": true, "runs": 1, "details": { "yulDetails": { "optimizerSteps": "dhfoDgvulfnTUtnIf [xa[r]scLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LsTOtfDnca[r]Iulc] jmul[jul] VcTOcul jmul" } } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address payable","name":"wrappedNativeToken_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedToSendNativeToken","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidArgument","type":"error"},{"inputs":[],"name":"TransferInFailed","type":"error"},{"inputs":[],"name":"TransferOutFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnhandledAction","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"},{"inputs":[],"name":"ACTION_CLAIM_REWARD","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ACTION_SUPPLY_ASSET","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ACTION_SUPPLY_NATIVE_TOKEN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ACTION_TRANSFER_ASSET","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ACTION_WITHDRAW_ASSET","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ACTION_WITHDRAW_NATIVE_TOKEN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"actions","type":"bytes32[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"invoke","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"sweepNativeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedNativeToken","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a080604052346100a157601f6110f738819003918201601f19168301916001600160401b038311848410176100a65780849260409485528339810103126100a15780516001600160a01b0391828216918290036100a1576020015191821682036100a157600080546001600160a01b03191691909117905560805260405161103a90816100bd823960805181818161013b01528181610a7d0152610d250152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806317fcb39b1461010b5780631aa7c53e14610102578063258836fe146100f9578063555029a6146100f057806375829def146100e75780639860d6e6146100de578063b660c156146100d5578063b8ef9d98146100cc578063c7f6d7b5146100c3578063cc157905146100ba578063d69adac4146100b15763f851a4400361000e576100ac610746565b61000e565b506100ac6106f7565b506100ac6106bd565b506100ac61068a565b506100ac610657565b506100ac610613565b506100ac6105de565b506100ac610555565b506100ac6102b2565b506100ac6101b0565b506100ac61016a565b506100ac610124565b600091031261011f57565b600080fd5b503461011f57600036600319011261011f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461011f57600036600319011261011f57604051741050d51253d397d514905394d1915497d054d4d155605a1b8152602090f35b6001600160a01b0381160361011f57565b503461011f57604036600319011261011f576004356101ce8161019f565b6024356101da8161019f565b6000546001600160a01b03163303610271576040516370a0823160e01b8152610019929091602083806102103060048301610733565b03816001600160a01b0385165afa928315610264575b600093610234575b50610f5c565b61025691935060203d811161025d575b61024e8183610787565b8101906107b7565b913861022e565b503d610244565b61026c6107c6565b610226565b6040516282b42960e81b8152600490fd5b9181601f8401121561011f578235916001600160401b03831161011f576020808501948460051b01011161011f57565b50604036600319011261011f576001600160401b0360043581811161011f576102df903690600401610282565b9160243590811161011f576102f8903690600401610282565b9081840361054357349360005b81811061034257858061031457005b600080809260405190335af16103286107d3565b501561033057005b60405163d1a4579f60e01b8152600490fd5b61034d818387610837565b35721050d51253d397d4d55414131657d054d4d155606a1b81036103a357508061039d6103886103806001948888610855565b810190610921565b9290868060a01b0380809216931691166109b7565b01610305565b9095907920a1aa24a7a72fa9aaa828262cafa720aa24ab22afaa27a5a2a760311b810361040957506104026001916103fc6103ea6103e28a8989610855565b8101906108f4565b9190868060a01b038091169116610a62565b90610958565b955b61039d565b9095600191741050d51253d397d514905394d1915497d054d4d155605a1b8103610454575061040461043f610380838888610855565b9290868060a01b038080921693169116610c9e565b741050d51253d397d5d2551211149055d7d054d4d155605a1b810361049a5750610404610485610380838888610855565b9290868060a01b038080921693169116610cd8565b7b20a1aa24a7a72faba4aa24222920abafa720aa24ab22afaa27a5a2a760211b81036104e457506104046104d26103e2838888610855565b9190858060a01b038091169116610d12565b721050d51253d397d0d310525357d49155d05491606a1b0361052e57610404610519610511838888610855565b8101906108ae565b9290868060a01b038080921693169116610f0a565b610539818686610855565b5050610404610979565b60405163a9cb9e0d60e01b8152600490fd5b503461011f57602036600319011261011f576004356105738161019f565b600054906001600160a01b038083169133839003610271571680156105cc578060009360018060a01b031916178355604051917ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec68484a3f35b60405163e6c4247b60e01b8152600490fd5b503461011f57600036600319011261011f57604051741050d51253d397d5d2551211149055d7d054d4d155605a1b8152602090f35b503461011f57602036600319011261011f576004356106318161019f565b6000546001600160a01b0316330361027157600080809247604051915af16103286107d3565b503461011f57600036600319011261011f57604051721050d51253d397d4d55414131657d054d4d155606a1b8152602090f35b503461011f57600036600319011261011f57604051721050d51253d397d0d310525357d49155d05491606a1b8152602090f35b503461011f57600036600319011261011f576040517920a1aa24a7a72fa9aaa828262cafa720aa24ab22afaa27a5a2a760311b8152602090f35b503461011f57600036600319011261011f576040517b20a1aa24a7a72faba4aa24222920abafa720aa24ab22afaa27a5a2a760211b8152602090f35b6001600160a01b03909116815260200190565b503461011f57600036600319011261011f576000546040516001600160a01b039091168152602090f35b50634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b038211908210176107aa57604052565b6107b2610770565b604052565b9081602091031261011f575190565b506040513d6000823e3d90fd5b3d1561081b573d906001600160401b03821161080e575b60405191610802601f8201601f191660200184610787565b82523d6000602084013e565b610816610770565b6107ea565b606090565b50634e487b7160e01b600052603260045260246000fd5b9190811015610848575b60051b0190565b610850610820565b610841565b9190811015610897575b60051b81013590601e198136030182121561011f5701803591906001600160401b03831161011f57602001823603811361011f579190565b61089f610820565b61085f565b8015150361011f57565b919082608091031261011f5781356108c58161019f565b9160208101356108d48161019f565b91606060408301356108e58161019f565b9201356108f1816108a4565b90565b9081606091031261011f57803561090a8161019f565b916040602083013561091b8161019f565b92013590565b919082608091031261011f5781356109388161019f565b9160208101356109478161019f565b916060604083013561091b8161019f565b818110610963570390565b634e487b7160e01b600052601160045260246000fd5b5060405163fb90de7160e01b8152600490fd5b6001600160a01b03918216815291811660208301529091166040820152606081019190915260800190565b919290916001600160a01b0316803b1561011f576109f1936000809460405196879586948593639032317760e01b8552336004860161098c565b03925af18015610a10575b610a035750565b6000610a0e91610787565b565b610a186107c6565b6109fc565b9081602091031261011f57516108f18161019f565b9081602091031261011f57516108f1816108a4565b6001600160a01b039091168152602081019190915260400190565b60405163c55dae6360e01b81526001600160a01b03808316937f0000000000000000000000000000000000000000000000000000000000000000939092602092879084836004818b5afa928315610c91575b600093610c62575b5080871692168214610bed575b50803b1561011f57868391610b1a93604051630d0e30db60e41b815260008160048187875af18015610be0575b610bcb575b50600060405180968195829463095ea7b360e01b845260048401610a47565b03925af18015610bbe575b610b90575b5050823b1561011f57610b5b9260009283869360405196879586948593639032317760e01b8552306004860161098c565b03925af18015610b83575b610b6e575090565b80610b7d60006108f193610787565b80610114565b610b8b6107c6565b610b66565b81610baf92903d10610bb7575b610ba78183610787565b810190610a32565b503880610b2a565b503d610b9d565b610bc66107c6565b610b25565b80610b7d6000610bda93610787565b38610afb565b610be86107c6565b610af6565b60001914610bfc575b38610ac9565b604051630dd3126d60e21b8152909650828180610c1c3360048301610733565b0381895afa908115610c55575b600091610c38575b5095610bf6565b610c4f9150833d851161025d5761024e8183610787565b38610c31565b610c5d6107c6565b610c29565b610c83919350853d8711610c8a575b610c7b8183610787565b810190610a1d565b9138610abc565b503d610c71565b610c996107c6565b610ab4565b919290916001600160a01b0316803b1561011f576109f193600080946040519687958694859363183dc58360e31b8552336004860161098c565b919290916001600160a01b0316803b1561011f576109f19360008094604051968795869485936304c8826360e31b8552336004860161098c565b6040805163c55dae6360e01b81529093917f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b039081169060209085908286600481875afa958615610efd575b600096610ede575b5080851695168514610e67575b5050803b1561011f5783600091610daa938389518096819582946304c8826360e31b845230336004860161098c565b03925af18015610e5a575b610e45575b50803b1561011f57600092839283928387518092632e1a7d4d60e01b8252818381610ded88600483019190602083019252565b03925af18015610e38575b610e24575b508551915af1610e0b6107d3565b5015610e145750565b5163d1a4579f60e01b8152600490fd5b80610b7d85610e3293610787565b38610dfd565b610e406107c6565b610df8565b80610b7d6000610e5493610787565b38610dba565b610e626107c6565b610db5565b60001914610e76575b80610d7b565b86516370a0823160e01b815291945090818180610e963360048301610733565b0381885afa918215610ed1575b600092610eb4575b50509238610e70565b610eca9250803d1061025d5761024e8183610787565b3880610eab565b610ed96107c6565b610ea3565b610ef6919650833d8511610c8a57610c7b8183610787565b9438610d6e565b610f056107c6565b610d66565b9192916001600160a01b0391821690813b1561011f5760006064928195856040519889978896635b81a7bf60e11b8852166004870152166024850152151560448401525af18015610a1057610a035750565b6001600160a01b03169291833b1561011f57610f9690604051809581809563a9059cbb60e01b825260009889968796879360048401610a47565b03925af18015610ff7575b610fe7575b503d90508015610fdc57602014610fbb575080fd5b90602081803e515b15610fca57565b60405163cefaffeb60e01b8152600490fd5b509050600019610fc3565b610ff091610787565b3882610fa6565b610fff6107c6565b610fa156fea2646970667358221220e370a34cbc9f25bd446eab2079da18e07965880dc48d8271b5b9ea9f30055da164736f6c634300080f0033000000000000000000000000cc3e7c85bb0ee4f09380e041fee95a0caedd4a020000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270Deployed Bytecode
0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806317fcb39b1461010b5780631aa7c53e14610102578063258836fe146100f9578063555029a6146100f057806375829def146100e75780639860d6e6146100de578063b660c156146100d5578063b8ef9d98146100cc578063c7f6d7b5146100c3578063cc157905146100ba578063d69adac4146100b15763f851a4400361000e576100ac610746565b61000e565b506100ac6106f7565b506100ac6106bd565b506100ac61068a565b506100ac610657565b506100ac610613565b506100ac6105de565b506100ac610555565b506100ac6102b2565b506100ac6101b0565b506100ac61016a565b506100ac610124565b600091031261011f57565b600080fd5b503461011f57600036600319011261011f576040517f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12706001600160a01b03168152602090f35b503461011f57600036600319011261011f57604051741050d51253d397d514905394d1915497d054d4d155605a1b8152602090f35b6001600160a01b0381160361011f57565b503461011f57604036600319011261011f576004356101ce8161019f565b6024356101da8161019f565b6000546001600160a01b03163303610271576040516370a0823160e01b8152610019929091602083806102103060048301610733565b03816001600160a01b0385165afa928315610264575b600093610234575b50610f5c565b61025691935060203d811161025d575b61024e8183610787565b8101906107b7565b913861022e565b503d610244565b61026c6107c6565b610226565b6040516282b42960e81b8152600490fd5b9181601f8401121561011f578235916001600160401b03831161011f576020808501948460051b01011161011f57565b50604036600319011261011f576001600160401b0360043581811161011f576102df903690600401610282565b9160243590811161011f576102f8903690600401610282565b9081840361054357349360005b81811061034257858061031457005b600080809260405190335af16103286107d3565b501561033057005b60405163d1a4579f60e01b8152600490fd5b61034d818387610837565b35721050d51253d397d4d55414131657d054d4d155606a1b81036103a357508061039d6103886103806001948888610855565b810190610921565b9290868060a01b0380809216931691166109b7565b01610305565b9095907920a1aa24a7a72fa9aaa828262cafa720aa24ab22afaa27a5a2a760311b810361040957506104026001916103fc6103ea6103e28a8989610855565b8101906108f4565b9190868060a01b038091169116610a62565b90610958565b955b61039d565b9095600191741050d51253d397d514905394d1915497d054d4d155605a1b8103610454575061040461043f610380838888610855565b9290868060a01b038080921693169116610c9e565b741050d51253d397d5d2551211149055d7d054d4d155605a1b810361049a5750610404610485610380838888610855565b9290868060a01b038080921693169116610cd8565b7b20a1aa24a7a72faba4aa24222920abafa720aa24ab22afaa27a5a2a760211b81036104e457506104046104d26103e2838888610855565b9190858060a01b038091169116610d12565b721050d51253d397d0d310525357d49155d05491606a1b0361052e57610404610519610511838888610855565b8101906108ae565b9290868060a01b038080921693169116610f0a565b610539818686610855565b5050610404610979565b60405163a9cb9e0d60e01b8152600490fd5b503461011f57602036600319011261011f576004356105738161019f565b600054906001600160a01b038083169133839003610271571680156105cc578060009360018060a01b031916178355604051917ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec68484a3f35b60405163e6c4247b60e01b8152600490fd5b503461011f57600036600319011261011f57604051741050d51253d397d5d2551211149055d7d054d4d155605a1b8152602090f35b503461011f57602036600319011261011f576004356106318161019f565b6000546001600160a01b0316330361027157600080809247604051915af16103286107d3565b503461011f57600036600319011261011f57604051721050d51253d397d4d55414131657d054d4d155606a1b8152602090f35b503461011f57600036600319011261011f57604051721050d51253d397d0d310525357d49155d05491606a1b8152602090f35b503461011f57600036600319011261011f576040517920a1aa24a7a72fa9aaa828262cafa720aa24ab22afaa27a5a2a760311b8152602090f35b503461011f57600036600319011261011f576040517b20a1aa24a7a72faba4aa24222920abafa720aa24ab22afaa27a5a2a760211b8152602090f35b6001600160a01b03909116815260200190565b503461011f57600036600319011261011f576000546040516001600160a01b039091168152602090f35b50634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b038211908210176107aa57604052565b6107b2610770565b604052565b9081602091031261011f575190565b506040513d6000823e3d90fd5b3d1561081b573d906001600160401b03821161080e575b60405191610802601f8201601f191660200184610787565b82523d6000602084013e565b610816610770565b6107ea565b606090565b50634e487b7160e01b600052603260045260246000fd5b9190811015610848575b60051b0190565b610850610820565b610841565b9190811015610897575b60051b81013590601e198136030182121561011f5701803591906001600160401b03831161011f57602001823603811361011f579190565b61089f610820565b61085f565b8015150361011f57565b919082608091031261011f5781356108c58161019f565b9160208101356108d48161019f565b91606060408301356108e58161019f565b9201356108f1816108a4565b90565b9081606091031261011f57803561090a8161019f565b916040602083013561091b8161019f565b92013590565b919082608091031261011f5781356109388161019f565b9160208101356109478161019f565b916060604083013561091b8161019f565b818110610963570390565b634e487b7160e01b600052601160045260246000fd5b5060405163fb90de7160e01b8152600490fd5b6001600160a01b03918216815291811660208301529091166040820152606081019190915260800190565b919290916001600160a01b0316803b1561011f576109f1936000809460405196879586948593639032317760e01b8552336004860161098c565b03925af18015610a10575b610a035750565b6000610a0e91610787565b565b610a186107c6565b6109fc565b9081602091031261011f57516108f18161019f565b9081602091031261011f57516108f1816108a4565b6001600160a01b039091168152602081019190915260400190565b60405163c55dae6360e01b81526001600160a01b03808316937f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270939092602092879084836004818b5afa928315610c91575b600093610c62575b5080871692168214610bed575b50803b1561011f57868391610b1a93604051630d0e30db60e41b815260008160048187875af18015610be0575b610bcb575b50600060405180968195829463095ea7b360e01b845260048401610a47565b03925af18015610bbe575b610b90575b5050823b1561011f57610b5b9260009283869360405196879586948593639032317760e01b8552306004860161098c565b03925af18015610b83575b610b6e575090565b80610b7d60006108f193610787565b80610114565b610b8b6107c6565b610b66565b81610baf92903d10610bb7575b610ba78183610787565b810190610a32565b503880610b2a565b503d610b9d565b610bc66107c6565b610b25565b80610b7d6000610bda93610787565b38610afb565b610be86107c6565b610af6565b60001914610bfc575b38610ac9565b604051630dd3126d60e21b8152909650828180610c1c3360048301610733565b0381895afa908115610c55575b600091610c38575b5095610bf6565b610c4f9150833d851161025d5761024e8183610787565b38610c31565b610c5d6107c6565b610c29565b610c83919350853d8711610c8a575b610c7b8183610787565b810190610a1d565b9138610abc565b503d610c71565b610c996107c6565b610ab4565b919290916001600160a01b0316803b1561011f576109f193600080946040519687958694859363183dc58360e31b8552336004860161098c565b919290916001600160a01b0316803b1561011f576109f19360008094604051968795869485936304c8826360e31b8552336004860161098c565b6040805163c55dae6360e01b81529093917f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270906001600160a01b039081169060209085908286600481875afa958615610efd575b600096610ede575b5080851695168514610e67575b5050803b1561011f5783600091610daa938389518096819582946304c8826360e31b845230336004860161098c565b03925af18015610e5a575b610e45575b50803b1561011f57600092839283928387518092632e1a7d4d60e01b8252818381610ded88600483019190602083019252565b03925af18015610e38575b610e24575b508551915af1610e0b6107d3565b5015610e145750565b5163d1a4579f60e01b8152600490fd5b80610b7d85610e3293610787565b38610dfd565b610e406107c6565b610df8565b80610b7d6000610e5493610787565b38610dba565b610e626107c6565b610db5565b60001914610e76575b80610d7b565b86516370a0823160e01b815291945090818180610e963360048301610733565b0381885afa918215610ed1575b600092610eb4575b50509238610e70565b610eca9250803d1061025d5761024e8183610787565b3880610eab565b610ed96107c6565b610ea3565b610ef6919650833d8511610c8a57610c7b8183610787565b9438610d6e565b610f056107c6565b610d66565b9192916001600160a01b0391821690813b1561011f5760006064928195856040519889978896635b81a7bf60e11b8852166004870152166024850152151560448401525af18015610a1057610a035750565b6001600160a01b03169291833b1561011f57610f9690604051809581809563a9059cbb60e01b825260009889968796879360048401610a47565b03925af18015610ff7575b610fe7575b503d90508015610fdc57602014610fbb575080fd5b90602081803e515b15610fca57565b60405163cefaffeb60e01b8152600490fd5b509050600019610fc3565b610ff091610787565b3882610fa6565b610fff6107c6565b610fa156fea2646970667358221220e370a34cbc9f25bd446eab2079da18e07965880dc48d8271b5b9ea9f30055da164736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cc3e7c85bb0ee4f09380e041fee95a0caedd4a020000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
-----Decoded View---------------
Arg [0] : admin_ (address): 0xCC3E7c85Bb0EE4f09380e041fee95a0caeDD4a02
Arg [1] : wrappedNativeToken_ (address): 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cc3e7c85bb0ee4f09380e041fee95a0caedd4a02
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...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.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to VerbatimInvalidDeduplication (low-severity), FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity), StorageWriteRemovalBeforeConditionalTermination (medium/high-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.