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!
Overview
POL Balance
POL Value
$28.10 (@ $0.61/POL)Token Holdings
Could not find any matches!
- ERC-20 Tokens (>100)0.008438 amUSDCAave Matic M... (amUSDC)$0.01@1.00131,197.21748113 ELONDogelon (ELON)$0.01@0.000.00006637 COMP(PoS) Compou... (COMP)$0.01@78.400.49587519 DAI(PoS) Dai St... (DAI)$0.50@1.008.14379 USDT(PoS) Tether... (USDT)$8.14@1.000.0000126 WBTC(PoS) Wrappe... (WBTC)$1.21@95,978.000.0000475 YFI(PoS) yearn.... (YFI)$0.39@8,234.190.001628 amUSDTAave Matic M... (amUSDT)$0.00@1.0010.00000818 amWMATICAave Matic M... (amWMAT...)$0.00@0.60750.00100939 aPolDAIAave Polygon... (aPolDA...)$0.00@1.000.029399 aPolUSDCAave Polygon... (aPolUS...)$0.03@1.000.002415 aPolUSDTAave Polygon... (aPolUS...)$0.00@1.000.01019119 aPolWMATICAave Polygon... (aPolWM...)$0.01@0.61110.0072 ALPHAAavegotchi A... (ALPHA)$0.00@0.00050.0144 FOMOAavegotchi F... (FOMO)$0.00@0.00020.01776 FUDAavegotchi F... (FUD)$0.00@0.00010 GHSTAavegotchi G... (GHST)$0.00@1.200.00144 KEKAavegotchi K... (KEK)$0.00@0.00140.00885547 ADDYAdamant (ADDY)$0.00@0.029922.37037524 AEGAETHER GAMES (AEG)$0.23@0.010312.50570162 FYNAffyn (FYN)$0.06@0.00460.46331405 agEURagEUR (agEUR)$0.49@1.0540.1 ANKRAnkr (PoS) (ANKR)$0.00@0.04280.00554456 ankrMATICAnkr Staked ... (ankrMA...)$0.00@0.72281.0504 $ANRXAnRKey X (Po... ($ANRX)$0.00@0.00020.00661284 APEApeCoin (PoS... (APE)$0.01@1.540.16435246 OMENAugury Finan... (OMEN)$0.00@0.00110.00509009 AXAurusX (AX)$0.00@0.22690 AVAXAvalanche To... (AVAX)$0.00@48.320.25460813 AWTAWT (AWT)$0.00@0.000.180187 axlUSDCAxelar Wrapp... (axlUSD...)2.29477864 BAKEDBakedToken (... (BAKED)$0.00@0.00160.00064036 BALBalancer (BAL)$0.00@2.970.06410484 BATBAT (BAT)$0.02@0.31620.0009915 BIFIbeefy.financ... (BIFI)$0.34@340.450.00475363 BUSDBinance-Peg ... (BUSD)2.66294048 BCMCBlockchain M... (BCMC)$0.00@0.00154.75150044 VEEBLOCKv (VEE)$0.04@0.00927.75465103 BONSAIBonsai Token (BONSAI)$0.08@0.00970.018 BRZBRZ Token (BRZ)$0.00@0.16780.14831411 BUSDBUSD Token (... (BUSD)0.10408584 LINKChainLink To... (LINK)$2.06@19.822.030386 PORTXChainPort To... (PORTX)$0.00@0.00220.00000003 C98Coin98 (C98)$0.00@0.21673.68101298 CRVCRV (PoS) (CRV)$2.78@0.75430.73290242 ICEDecentral Ga... (ICE)$0.00@0.00070.5249548 MANADecentraland (MANA)$0.33@0.63580.00236687 DUBIDecentralize... (DUBI)$0.00@0.06590.50018613 DERCDeRace Token (DERC)$0.05@0.10870.16818286 DFYNDFYN Token (... (DFYN)$0.00@0.00912.66704184 DIMODimo (DIMO)$0.61@0.22840.00000849 dQUICKDragon QUICK (dQUICK)$0.00@0.06847.48936768 DSLADSLA (DSLA)$0.00@0.00030.31506813 ERPEntropy (PoS... (ERP)$0.00@0.00142.6927604 EMONEthermonToke... (EMON)$0.00@0.0012.30238832 IQEveripedia I... (IQ)$0.02@0.00870.6465879 WELTFABWELT (WELT)$0.00@0.00340.0772 FNCFancy Games (FNC)$0.00@0.00084 1FLRFlare Token (1FLR)$0.00@0.00011 FKRFlicker (FKR)$0.01@0.00510 FRAXFrax (FRAX)$0.00@0.9960.0000041 frxETHFrax Ether (frxETH)$0.02@3,660.890.94169769 COMBOFurucombo (COMBO)$0.00@0.00411.74790953 GAIAGAIA Everwor... (GAIA)$0.00@0.0020.00379957 GNSGains Networ... (GNS)$0.01@2.522.4012688 GMEEGAMEE (GMEE)$0.03@0.01277.51650443 GAMERGameStation (GAMER)$0.00@0.00030.00010805 GGTGO GAME TOKE... (GGT)0.0000485 GLMGolem Networ... (GLM)$0.00@0.47510.06961721 GOONGOON (GOON)$0.00@0.00150.41931407 GRTGraph Token (GRT)$0.12@0.28950.72 GFIGravity Fina... (GFI)$0.00@0.00335.96965216 HEXHEX (HEX)$0.17@0.004683.65430989 HONORHONOR (HONOR)$0.01@0.00010.00043707 ICHIICHI (ICHI)$0.00@1.151.45141123 INSURInsurAce (Po... (INSUR)$0.03@0.01820.00007507 IOTXIoTeX Networ... (IOTX)$0.00@0.05560.15865716 jEURJarvis Synth... (jEUR)0.0026892 jCHFJarvis Synth... (jCHF)$0.00@0.43830.00632311 JMPTJumpToken (JMPT)$0.01@1.130.02408145 KLIMAKlima DAO (KLIMA)$0.03@1.191.28 KOMKommunitas (KOM)$0.00@0.00160.0455316 KrillKrill (Krill)$0.00@0.00082.28981886 KNCKyber Networ... (KNC)$1.61@0.70190.70164529 LDOLido DAO Tok... (LDO)$1.23@1.750.000288 MaticXLiquid Staki... (MaticX)$0.00@0.69280.02843943 MAHAMahaDAO (PoS... (MAHA)$0.03@1.110.00004772 MKRMaker (MKR)$0.09@1,853.430.67074378 OMMANTRA DAO (OM)$2.39@3.570.0016 MASKMask Network (MASK)$0.01@3.690.000001 maUSDCMatic Aave i... (maUSDC)$0.00@1.364.31831338 MTCLMaticLaunch (MTCL)$0.02@0.00440.36 MSUMetaSoccer U... (MSU)$0.00@0.00180.00001702 MVIMetaverse In... (MVI)$0.00@42.900 miMATICmiMATIC (miMATI...)$0.00@0.9919796.58107196 WOLFmoonwolf.io (WOLF)$0.00@0.001.19995772 NAKANakamoto.Gam... (NAKA)$1.74@1.450 NPMNeptune Mutu... (NPM)$0.00@0.04890.0752 NITRONitro (PoS) (NITRO)$0.00@0.00110.00000943 OCEANOcean Token (OCEAN)$0.00@0.7912NFT Tokens (>100)usd-drops.xyz$10000 AirDropERC-1155NFT Airdrop Round0.05 WBTCERC-1155NFT Airdrop Round1,000 DAIERC-1155NFT Airdrop Round1,000 UNIERC-115510 Collection10 CollectionERC-72110 Collection10 CollectionERC-72110 Collection10 CollectionERC-72110 Collection10 CollectionERC-721NFT Airdrop Round10 QNTERC-1155NFT Airdrop Round10,000 ZRXERC-1155NFT Airdrop Round1000 DAIERC-1155NFT Airdrop1000 DAIERC-1155NFT Airdrop Round1000 FRAXERC-1155NFT Airdrop1000 UNI NFT VoucherERC-1155NFT Airdrop1300 GHSTERC-1155NFT Airdrop Round1500 AVAXERC-1155NFT Airdrop1500 AVAXERC-1155NFT Airdrop1500 KNCERC-1155NFT Airdrop Round20 AAVEERC-1155NFT Airdrop Round20 AAVEERC-1155NFT Airdrop Round200 LINKERC-1155NFT Airdrop200 LINKERC-1155NFT Airdrop Round200 LINKERC-1155NFT Airdrop200 LINKERC-1155drop-usdt.xyz2000$ RewardERC-1155drops-usdt.xyz2000$ RewardERC-1155NFT Airdrop Round23,000 BATERC-1155NFT Airdrop25 COMPERC-1155VOUCHER2500 LIDOERC-1155NFT Airdrop Round3500 MANAERC-1155Base Chain Raffle5.00 ETH by BaseERC-1155NFT Airdrop Round500 SNXERC-1155NFTVoucher5000$ CYBERERC-1155NFTVoucher5000$ CYBERERC-1155NFTVoucher5000$ CYBERERC-1155Vouchers50M $SHIB VoucherERC-1155NFT Airdrop Round6,000 FTMERC-1155NFT Airdrop6000 WOOERC-1155NFT Airdrop Round700 LDOERC-1155NFT Airdrop Round700 LDOERC-1155NFT Airdrop700 LDOERC-1155NFT Airdrop700 LDO VoucherERC-1155NFT Airdrop Round8,000 CRVERC-1155APE COINAPE NFT TICKETSERC-1155ARBITDROP.COMARBITDROP.COM COUPONERC-1155ARBITDROP.INFOARBITDROP.INFO COUPONERC-1155ARBITDROP.INFOARBITDROP.INFO COUPONERC-1155DCL-ARC8XICEPKRArc8 x ICE PokerERC-721FREESPINBitCase FREESPINERC-1155BitCase.OrgBitCase FreeSpin VouchersERC-1155DCL-CRYPTUNCRNSXICEPKRCrypto Unicorns x ICE PokerERC-721deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdropx2ERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdropx3ERC-721deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721https://t.ly/ethersdeBridge AirdropERC-721https://t.ly/ethersdeBridge Airdropx2ERC-721https://t.ly/ethersdeBridge AirdropERC-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/ethersx4ERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdrop https://t.ly/ethersx2ERC-721dYdXEvent.comdYdX EventERC-1155dYdX EventdYdX Exchange EventERC-1155dYdX EventdYdX Exchange EventERC-1155UniEvent.PlusEvent by UniswapERC-1155Green kolectivGreen kolectivERC-1155Happy ReflectionHappy ReflectionERC-1155NFTImmutable AirdropERC-721STAXLedger Stax: GiveawayERC-1155STAXLedger Stax: GiveawayERC-1155STAXLedger Stax: GiveawayERC-1155STAXLedger Stax: GiveawayERC-1155STAXLedger Stax: GiveawayERC-1155STAXLedger Stax: GiveawayERC-1155NFTLido AirdropERC-721LastOneMorgenshternLastOnex2ERC-721A NFT SpritesNFTSprites.comERC-721Open Night ReflectsOpen Night ReflectsERC-1155PolyEvent.PlusPolygon EventERC-1155Powerfull DezukiPowerfull Dezukix2ERC-1155REVOLUTIONREVOLUTIONERC-1155RLBRLBERC-721SUPERPLASTIC: SUPERGUCCI OfficialSUPERPLASTIC: SUPERGUCCI OfficialERC-1155The Squiggle OfficialThe Squiggle OfficialERC-1155UNIUNI EVENTERC-1155UniEvent.PlusUNI EVENTERC-1155UniEvent.PlusUni NFT EventERC-1155UniEvent.PlusUniswap NFT EventERC-1155UniEvent.PlusUniswap Summer EventERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155coin-reward.xyzUSDC AirDropERC-1155
More Info
Private Name Tags
ContractCreator
Multichain Info
3 addresses found via
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Multichain Portfolio
- Info
- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 303,978 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Swap | 64985245 | 2024-12-02 7:55:55 | 16 mins ago | 1733126155 | IN | 1 POL$0.61 | 0.00755123 | 43.00714122 | ||||
Swap | 64985000 | 2024-12-02 7:47:15 | 25 mins ago | 1733125635 | IN | 2 POL$1.23 | 0.01473732 | 56.36507333 | ||||
Swap | 64984959 | 2024-12-02 7:45:47 | 26 mins ago | 1733125547 | IN | 2 POL$1.23 | 0.0095068 | 54.14486003 | ||||
Swap | 64984899 | 2024-12-02 7:43:41 | 28 mins ago | 1733125421 | IN | 2 POL$1.23 | 0.01853206 | 70.86884958 | ||||
Swap | 64984864 | 2024-12-02 7:42:27 | 30 mins ago | 1733125347 | IN | 2 POL$1.23 | 0.0117646 | 67.00386119 | ||||
Swap | 64984777 | 2024-12-02 7:39:04 | 33 mins ago | 1733125144 | IN | 6 POL$3.68 | 0.03035725 | 116.10580889 | ||||
Swap | 64984727 | 2024-12-02 7:37:02 | 35 mins ago | 1733125022 | IN | 5 POL$3.06 | 0.01178344 | 67.11115398 | ||||
Swap | 64984692 | 2024-12-02 7:35:48 | 36 mins ago | 1733124948 | IN | 4 POL$2.45 | 0.01504752 | 57.55411448 | ||||
Swap | 64984692 | 2024-12-02 7:35:48 | 36 mins ago | 1733124948 | IN | 1 POL$0.61 | 0.01014982 | 57.80710781 | ||||
Swap | 64984653 | 2024-12-02 7:34:24 | 38 mins ago | 1733124864 | IN | 1 POL$0.61 | 0.01300857 | 49.75091254 | ||||
Swap | 64984588 | 2024-12-02 7:32:06 | 40 mins ago | 1733124726 | IN | 1 POL$0.61 | 0.01513649 | 57.88910798 | ||||
Swap | 64984488 | 2024-12-02 7:28:02 | 44 mins ago | 1733124482 | IN | 1 POL$0.61 | 0.00777179 | 44.26328969 | ||||
Swap | 64984445 | 2024-12-02 7:26:30 | 46 mins ago | 1733124390 | IN | 1 POL$0.61 | 0.00851494 | 48.495838 | ||||
Swap | 64981896 | 2024-12-02 5:53:43 | 2 hrs ago | 1733118823 | IN | 0.9 POL$0.55 | 0.00744 | 42.37362524 | ||||
Swap | 64981843 | 2024-12-02 5:51:51 | 2 hrs ago | 1733118711 | IN | 0.8 POL$0.49 | 0.00695884 | 39.63325791 | ||||
Swap | 64981745 | 2024-12-02 5:48:23 | 2 hrs ago | 1733118503 | IN | 0.9 POL$0.55 | 0.00822256 | 46.83379443 | ||||
Swap | 64980623 | 2024-12-02 5:07:57 | 3 hrs ago | 1733116077 | IN | 2 POL$1.23 | 0.00630383 | 35.90270401 | ||||
Swap | 64979467 | 2024-12-02 4:25:05 | 3 hrs ago | 1733113505 | IN | 10 POL$6.13 | 0.0280129 | 107.14441647 | ||||
Swap | 64977689 | 2024-12-02 3:19:24 | 4 hrs ago | 1733109564 | IN | 1.65 POL$1.01 | 0.0112355 | 62.8682809 | ||||
Swap | 64976883 | 2024-12-02 2:49:48 | 5 hrs ago | 1733107788 | IN | 2 POL$1.23 | 0.00929884 | 35.56480155 | ||||
Swap | 64976854 | 2024-12-02 2:48:46 | 5 hrs ago | 1733107726 | IN | 1 POL$0.61 | 0.00678299 | 38.6317409 | ||||
Swap | 64976725 | 2024-12-02 2:44:08 | 5 hrs ago | 1733107448 | IN | 1.5 POL$0.92 | 0.00890797 | 34.07144499 | ||||
Swap | 64976587 | 2024-12-02 2:39:14 | 5 hrs ago | 1733107154 | IN | 1 POL$0.61 | 0.01104146 | 42.22776665 | ||||
Swap | 64976534 | 2024-12-02 2:37:22 | 5 hrs ago | 1733107042 | IN | 1 POL$0.61 | 0.01164103 | 44.52079807 | ||||
Swap | 64976486 | 2024-12-02 2:35:22 | 5 hrs ago | 1733106922 | IN | 1 POL$0.61 | 0.01277188 | 48.84570502 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||||
---|---|---|---|---|---|---|---|---|
64985245 | 2024-12-02 7:55:55 | 16 mins ago | 1733126155 | 0.999 POL$0.61 | ||||
64985000 | 2024-12-02 7:47:15 | 25 mins ago | 1733125635 | 1.998 POL$1.22 | ||||
64984959 | 2024-12-02 7:45:47 | 26 mins ago | 1733125547 | 1.998 POL$1.22 | ||||
64984899 | 2024-12-02 7:43:41 | 28 mins ago | 1733125421 | 1.998 POL$1.22 | ||||
64984864 | 2024-12-02 7:42:27 | 30 mins ago | 1733125347 | 1.998 POL$1.22 | ||||
64984777 | 2024-12-02 7:39:04 | 33 mins ago | 1733125144 | 5.994 POL$3.67 | ||||
64984727 | 2024-12-02 7:37:02 | 35 mins ago | 1733125022 | 4.995 POL$3.06 | ||||
64984692 | 2024-12-02 7:35:48 | 36 mins ago | 1733124948 | 3.996 POL$2.45 | ||||
64984692 | 2024-12-02 7:35:48 | 36 mins ago | 1733124948 | 0.999 POL$0.61 | ||||
64984653 | 2024-12-02 7:34:24 | 38 mins ago | 1733124864 | 0.999 POL$0.61 | ||||
64984588 | 2024-12-02 7:32:06 | 40 mins ago | 1733124726 | 0.999 POL$0.61 | ||||
64984488 | 2024-12-02 7:28:02 | 44 mins ago | 1733124482 | 0.999 POL$0.61 | ||||
64984445 | 2024-12-02 7:26:30 | 46 mins ago | 1733124390 | 0.999 POL$0.61 | ||||
64981896 | 2024-12-02 5:53:43 | 2 hrs ago | 1733118823 | 0.8991 POL$0.55 | ||||
64981843 | 2024-12-02 5:51:51 | 2 hrs ago | 1733118711 | 0.7992 POL$0.49 | ||||
64981745 | 2024-12-02 5:48:23 | 2 hrs ago | 1733118503 | 0.8991 POL$0.55 | ||||
64980623 | 2024-12-02 5:07:57 | 3 hrs ago | 1733116077 | 1.998 POL$1.22 | ||||
64979467 | 2024-12-02 4:25:05 | 3 hrs ago | 1733113505 | 9.99 POL$6.12 | ||||
64977689 | 2024-12-02 3:19:24 | 4 hrs ago | 1733109564 | 1.64835 POL$1.01 | ||||
64976883 | 2024-12-02 2:49:48 | 5 hrs ago | 1733107788 | 1.998 POL$1.22 | ||||
64976854 | 2024-12-02 2:48:46 | 5 hrs ago | 1733107726 | 0.999 POL$0.61 | ||||
64976725 | 2024-12-02 2:44:08 | 5 hrs ago | 1733107448 | 1.4985 POL$0.92 | ||||
64976587 | 2024-12-02 2:39:14 | 5 hrs ago | 1733107154 | 0.999 POL$0.61 | ||||
64976534 | 2024-12-02 2:37:22 | 5 hrs ago | 1733107042 | 0.999 POL$0.61 | ||||
64976486 | 2024-12-02 2:35:22 | 5 hrs ago | 1733106922 | 0.999 POL$0.61 |
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.7.6; import "./SmartWalletStorage.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/EnumerableSet.sol"; contract SmartWalletProxy is SmartWalletStorage { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; event ImplementationUpdated(address indexed implementation); constructor( address _admin, address _implementation, address[] memory _supportedPlatformWallets, address[] memory _supportedSwaps, address[] memory _supportedLendings ) SmartWalletStorage(_admin) { _setImplementation(_implementation); for (uint256 i = 0; i < _supportedPlatformWallets.length; i++) { supportedPlatformWallets.add(_supportedPlatformWallets[i]); } for (uint256 i = 0; i < _supportedSwaps.length; i++) { supportedSwaps.add(_supportedSwaps[i]); } for (uint256 i = 0; i < _supportedLendings.length; i++) { supportedLendings.add(_supportedLendings[i]); } } receive() external payable {} /** * @dev Delegates execution to an implementation contract. * It returns to the external caller whatever the implementation returns * or forwards reverts. */ fallback() external payable { (bool success, ) = implementation().delegatecall(msg.data); assembly { let free_mem_ptr := mload(0x40) returndatacopy(free_mem_ptr, 0, returndatasize()) switch success case 0 { revert(free_mem_ptr, returndatasize()) } default { return(free_mem_ptr, returndatasize()) } } } function implementation() public view returns (address impl) { bytes32 slot = IMPLEMENTATION; assembly { impl := sload(slot) } } function _setImplementation(address _implementation) internal { require(_implementation.isContract(), "non-contract address"); bytes32 slot = IMPLEMENTATION; assembly { sstore(slot, _implementation) } } function updateNewImplementation(address _implementation) external onlyAdmin { _setImplementation(_implementation); emit ImplementationUpdated(_implementation); } function updateSupportedSwaps(address[] calldata addresses, bool isSupported) external onlyAdmin { for (uint256 i = 0; i < addresses.length; i++) { if (isSupported) { supportedSwaps.add(addresses[i]); } else { supportedSwaps.remove(addresses[i]); } } } function getAllSupportedSwaps() external view returns (address[] memory addresses) { uint256 length = supportedSwaps.length(); addresses = new address[](length); for (uint256 i = 0; i < length; i++) { addresses[i] = supportedSwaps.at(i); } } function updateSupportedLendings(address[] calldata addresses, bool isSupported) external onlyAdmin { for (uint256 i = 0; i < addresses.length; i++) { if (isSupported) { supportedLendings.add(addresses[i]); } else { supportedLendings.remove(addresses[i]); } } } function getAllSupportedLendings() external view returns (address[] memory addresses) { uint256 length = supportedLendings.length(); addresses = new address[](length); for (uint256 i = 0; i < length; i++) { addresses[i] = supportedLendings.at(i); } } function updateSupportedPlatformWallets(address[] calldata addresses, bool isSupported) external onlyAdmin { for (uint256 i = 0; i < addresses.length; i++) { if (isSupported) { supportedPlatformWallets.add(addresses[i]); } else { supportedPlatformWallets.remove(addresses[i]); } } } function getAllSupportedPlatformWallets() external view returns (address[] memory addresses) { uint256 length = supportedPlatformWallets.length(); addresses = new address[](length); for (uint256 i = 0; i < length; i++) { addresses[i] = supportedPlatformWallets.at(i); } } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.7.6; import "@kyber.network/utils-sc/contracts/IERC20Ext.sol"; import "@kyber.network/utils-sc/contracts/Utils.sol"; import "@kyber.network/utils-sc/contracts/Withdrawable.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/EnumerableSet.sol"; contract SmartWalletStorage is Utils, Withdrawable, ReentrancyGuard { uint256 internal constant MAX_AMOUNT = type(uint256).max; mapping(address => mapping(IERC20Ext => uint256)) public platformWalletFees; EnumerableSet.AddressSet internal supportedPlatformWallets; EnumerableSet.AddressSet internal supportedSwaps; EnumerableSet.AddressSet internal supportedLendings; // [EIP-1967] bytes32(uint256(keccak256("SmartWalletImplementation")) - 1) bytes32 internal constant IMPLEMENTATION = 0x7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e99; constructor(address _admin) Withdrawable(_admin) {} }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /** * @dev Interface extending ERC20 standard to include decimals() as * it is optional in the OpenZeppelin IERC20 interface. */ interface IERC20Ext is IERC20 { /** * @dev This function is required as Kyber requires to interact * with token.decimals() with many of its operations. */ function decimals() external view returns (uint8 digits); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import "./IERC20Ext.sol"; /** * @title Kyber utility file * mostly shared constants and rate calculation helpers * inherited by most of kyber contracts. * previous utils implementations are for previous solidity versions. */ abstract contract Utils { // Declared constants below to be used in tandem with // getDecimalsConstant(), for gas optimization purposes // which return decimals from a constant list of popular // tokens. IERC20Ext internal constant ETH_TOKEN_ADDRESS = IERC20Ext( 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE ); IERC20Ext internal constant USDT_TOKEN_ADDRESS = IERC20Ext( 0xdAC17F958D2ee523a2206206994597C13D831ec7 ); IERC20Ext internal constant DAI_TOKEN_ADDRESS = IERC20Ext( 0x6B175474E89094C44Da98b954EedeAC495271d0F ); IERC20Ext internal constant USDC_TOKEN_ADDRESS = IERC20Ext( 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 ); IERC20Ext internal constant WBTC_TOKEN_ADDRESS = IERC20Ext( 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 ); IERC20Ext internal constant KNC_TOKEN_ADDRESS = IERC20Ext( 0xdd974D5C2e2928deA5F71b9825b8b646686BD200 ); uint256 public constant BPS = 10000; // Basic Price Steps. 1 step = 0.01% uint256 internal constant PRECISION = (10**18); uint256 internal constant MAX_QTY = (10**28); // 10B tokens uint256 internal constant MAX_RATE = (PRECISION * 10**7); // up to 10M tokens per eth uint256 internal constant MAX_DECIMALS = 18; uint256 internal constant ETH_DECIMALS = 18; uint256 internal constant MAX_ALLOWANCE = uint256(-1); // token.approve inifinite mapping(IERC20Ext => uint256) internal decimals; /// @dev Sets the decimals of a token to storage if not already set, and returns /// the decimals value of the token. Prefer using this function over /// getDecimals(), to avoid forgetting to set decimals in local storage. /// @param token The token type /// @return tokenDecimals The decimals of the token function getSetDecimals(IERC20Ext token) internal returns (uint256 tokenDecimals) { tokenDecimals = getDecimalsConstant(token); if (tokenDecimals > 0) return tokenDecimals; tokenDecimals = decimals[token]; if (tokenDecimals == 0) { tokenDecimals = token.decimals(); decimals[token] = tokenDecimals; } } /// @dev Get the balance of a user /// @param token The token type /// @param user The user's address /// @return The balance function getBalance(IERC20Ext token, address user) internal view returns (uint256) { if (token == ETH_TOKEN_ADDRESS) { return user.balance; } else { return token.balanceOf(user); } } /// @dev Get the decimals of a token, read from the constant list, storage, /// or from token.decimals(). Prefer using getSetDecimals when possible. /// @param token The token type /// @return tokenDecimals The decimals of the token function getDecimals(IERC20Ext token) internal view returns (uint256 tokenDecimals) { // return token decimals if has constant value tokenDecimals = getDecimalsConstant(token); if (tokenDecimals > 0) return tokenDecimals; // handle case where token decimals is not a declared decimal constant tokenDecimals = decimals[token]; // moreover, very possible that old tokens have decimals 0 // these tokens will just have higher gas fees. return (tokenDecimals > 0) ? tokenDecimals : token.decimals(); } function calcDestAmount( IERC20Ext src, IERC20Ext dest, uint256 srcAmount, uint256 rate ) internal view returns (uint256) { return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate); } function calcSrcAmount( IERC20Ext src, IERC20Ext dest, uint256 destAmount, uint256 rate ) internal view returns (uint256) { return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate); } function calcDstQty( uint256 srcQty, uint256 srcDecimals, uint256 dstDecimals, uint256 rate ) internal pure returns (uint256) { require(srcQty <= MAX_QTY, "srcQty > MAX_QTY"); require(rate <= MAX_RATE, "rate > MAX_RATE"); if (dstDecimals >= srcDecimals) { require((dstDecimals - srcDecimals) <= MAX_DECIMALS, "dst - src > MAX_DECIMALS"); return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION; } else { require((srcDecimals - dstDecimals) <= MAX_DECIMALS, "src - dst > MAX_DECIMALS"); return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals))); } } function calcSrcQty( uint256 dstQty, uint256 srcDecimals, uint256 dstDecimals, uint256 rate ) internal pure returns (uint256) { require(dstQty <= MAX_QTY, "dstQty > MAX_QTY"); require(rate <= MAX_RATE, "rate > MAX_RATE"); //source quantity is rounded up. to avoid dest quantity being too low. uint256 numerator; uint256 denominator; if (srcDecimals >= dstDecimals) { require((srcDecimals - dstDecimals) <= MAX_DECIMALS, "src - dst > MAX_DECIMALS"); numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals))); denominator = rate; } else { require((dstDecimals - srcDecimals) <= MAX_DECIMALS, "dst - src > MAX_DECIMALS"); numerator = (PRECISION * dstQty); denominator = (rate * (10**(dstDecimals - srcDecimals))); } return (numerator + denominator - 1) / denominator; //avoid rounding down errors } function calcRateFromQty( uint256 srcAmount, uint256 destAmount, uint256 srcDecimals, uint256 dstDecimals ) internal pure returns (uint256) { require(srcAmount <= MAX_QTY, "srcAmount > MAX_QTY"); require(destAmount <= MAX_QTY, "destAmount > MAX_QTY"); if (dstDecimals >= srcDecimals) { require((dstDecimals - srcDecimals) <= MAX_DECIMALS, "dst - src > MAX_DECIMALS"); return ((destAmount * PRECISION) / ((10**(dstDecimals - srcDecimals)) * srcAmount)); } else { require((srcDecimals - dstDecimals) <= MAX_DECIMALS, "src - dst > MAX_DECIMALS"); return ((destAmount * PRECISION * (10**(srcDecimals - dstDecimals))) / srcAmount); } } /// @dev save storage access by declaring token decimal constants /// @param token The token type /// @return token decimals function getDecimalsConstant(IERC20Ext token) internal pure returns (uint256) { if (token == ETH_TOKEN_ADDRESS) { return ETH_DECIMALS; } else if (token == USDT_TOKEN_ADDRESS) { return 6; } else if (token == DAI_TOKEN_ADDRESS) { return 18; } else if (token == USDC_TOKEN_ADDRESS) { return 6; } else if (token == WBTC_TOKEN_ADDRESS) { return 8; } else if (token == KNC_TOKEN_ADDRESS) { return 18; } else { return 0; } } function minOf(uint256 x, uint256 y) internal pure returns (uint256) { return x > y ? y : x; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; import "./IERC20Ext.sol"; import "./PermissionAdmin.sol"; abstract contract Withdrawable is PermissionAdmin { using SafeERC20 for IERC20Ext; event TokenWithdraw(IERC20Ext token, uint256 amount, address sendTo); event EtherWithdraw(uint256 amount, address sendTo); constructor(address _admin) PermissionAdmin(_admin) {} /** * @dev Withdraw all IERC20Ext compatible tokens * @param token IERC20Ext The address of the token contract */ function withdrawToken( IERC20Ext token, uint256 amount, address sendTo ) external onlyAdmin { token.safeTransfer(sendTo, amount); emit TokenWithdraw(token, amount, sendTo); } /** * @dev Withdraw Ethers */ function withdrawEther(uint256 amount, address payable sendTo) external onlyAdmin { (bool success, ) = sendTo.call{value: amount}(""); require(success, "withdraw failed"); emit EtherWithdraw(amount, sendTo); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @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"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; abstract contract PermissionAdmin { address public admin; address public pendingAdmin; event AdminClaimed(address newAdmin, address previousAdmin); event TransferAdminPending(address pendingAdmin); constructor(address _admin) { require(_admin != address(0), "admin 0"); admin = _admin; } modifier onlyAdmin() { require(msg.sender == admin, "only admin"); _; } /** * @dev Allows the current admin to set the pendingAdmin address. * @param newAdmin The address to transfer ownership to. */ function transferAdmin(address newAdmin) public onlyAdmin { require(newAdmin != address(0), "new admin 0"); emit TransferAdminPending(newAdmin); pendingAdmin = newAdmin; } /** * @dev Allows the current admin to set the admin in one tx. Useful initial deployment. * @param newAdmin The address to transfer ownership to. */ function transferAdminQuickly(address newAdmin) public onlyAdmin { require(newAdmin != address(0), "admin 0"); emit TransferAdminPending(newAdmin); emit AdminClaimed(newAdmin, admin); admin = newAdmin; } /** * @dev Allows the pendingAdmin address to finalize the change admin process. */ function claimAdmin() public { require(pendingAdmin == msg.sender, "not pending"); emit AdminClaimed(pendingAdmin, admin); admin = pendingAdmin; pendingAdmin = address(0); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
{ "optimizer": { "enabled": true, "runs": 780 }, "metadata": { "bytecodeHash": "none" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"address[]","name":"_supportedPlatformWallets","type":"address[]"},{"internalType":"address[]","name":"_supportedSwaps","type":"address[]"},{"internalType":"address[]","name":"_supportedLendings","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ImplementationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20Ext","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllSupportedLendings","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllSupportedPlatformWallets","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllSupportedSwaps","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"contract IERC20Ext","name":"","type":"address"}],"name":"platformWalletFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"updateNewImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isSupported","type":"bool"}],"name":"updateSupportedLendings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isSupported","type":"bool"}],"name":"updateSupportedPlatformWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isSupported","type":"bool"}],"name":"updateSupportedSwaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Ext","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001a8838038062001a88833981810160405260a08110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82518660208202830111640100000000821117156200009757600080fd5b82525081516020918201928201910280838360005b83811015620000c6578181015183820152602001620000ac565b5050505090500160405260200180516040519392919084640100000000821115620000f057600080fd5b9083019060208201858111156200010657600080fd5b82518660208202830111640100000000821117156200012457600080fd5b82525081516020918201928201910280838360005b838110156200015357818101518382015260200162000139565b50505050905001604052602001805160405193929190846401000000008211156200017d57600080fd5b9083019060208201858111156200019357600080fd5b8251866020820283011164010000000082111715620001b157600080fd5b82525081516020918201928201910280838360005b83811015620001e0578181015183820152602001620001c6565b5050505090500160405250505084808060006001600160a01b0316816001600160a01b0316141562000243576040805162461bcd60e51b8152602060048201526007602482015266061646d696e20360cc1b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091178155600355506200027490508462000354565b60005b8351811015620002ba57620002b08482815181106200029257fe5b60200260200101516005620003e960201b62000fe71790919060201c565b5060010162000277565b5060005b82518110156200030157620002f7838281518110620002d957fe5b60200260200101516007620003e960201b62000fe71790919060201c565b50600101620002be565b5060005b815181101562000348576200033e8282815181106200032057fe5b60200260200101516009620003e960201b62000fe71790919060201c565b5060010162000305565b50505050505062000476565b62000373816001600160a01b03166200040960201b620010051760201c565b620003c5576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000604482015290519081900360640190fd5b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e9955565b600062000400836001600160a01b0384166200040f565b90505b92915050565b3b151590565b60006200041d83836200045e565b620004555750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000403565b50600062000403565b60009081526001919091016020526040902054151590565b61160280620004866000396000f3fe6080604052600436106101125760003560e01c806375829def116100a5578063845bc11b11610074578063c1a49d2e11610059578063c1a49d2e146104c6578063ce56c45414610545578063f851a4401461057e57610119565b8063845bc11b1461040c578063a7c477971461048b57610119565b806375829def1461037c57806377f50f97146103af5780637acc8678146103c457806380644c70146103f757610119565b8063296f4120116100e1578063296f4120146102705780633ccdbb28146102f15780635c60da1b1461033457806373a71a501461034957610119565b80630cdc405d1461019e57806316b6934314610203578063249d39e914610218578063267822471461023f57610119565b3661011957005b6000610123610593565b6001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461017e576040519150601f19603f3d011682016040523d82523d6000602084013e610183565b606091505b505090506040513d6000823e81801561019a573d82f35b3d82fd5b3480156101aa57600080fd5b506101b36105b8565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101ef5781810151838201526020016101d7565b505050509050019250505060405180910390f35b34801561020f57600080fd5b506101b3610653565b34801561022457600080fd5b5061022d6106e9565b60408051918252519081900360200190f35b34801561024b57600080fd5b506102546106ef565b604080516001600160a01b039092168252519081900360200190f35b34801561027c57600080fd5b506102ef6004803603604081101561029357600080fd5b8101906020810181356401000000008111156102ae57600080fd5b8201836020820111156102c057600080fd5b803590602001918460208302840111640100000000831117156102e257600080fd5b91935091503515156106fe565b005b3480156102fd57600080fd5b506102ef6004803603606081101561031457600080fd5b506001600160a01b038135811691602081013591604090910135166107cf565b34801561034057600080fd5b50610254610593565b34801561035557600080fd5b506102ef6004803603602081101561036c57600080fd5b50356001600160a01b031661087e565b34801561038857600080fd5b506102ef6004803603602081101561039f57600080fd5b50356001600160a01b031661090a565b3480156103bb57600080fd5b506102ef610a1c565b3480156103d057600080fd5b506102ef600480360360208110156103e757600080fd5b50356001600160a01b0316610afb565b34801561040357600080fd5b506101b3610c55565b34801561041857600080fd5b506102ef6004803603604081101561042f57600080fd5b81019060208101813564010000000081111561044a57600080fd5b82018360208201111561045c57600080fd5b8035906020019184602083028401116401000000008311171561047e57600080fd5b9193509150351515610ceb565b34801561049757600080fd5b5061022d600480360360408110156104ae57600080fd5b506001600160a01b0381358116916020013516610db6565b3480156104d257600080fd5b506102ef600480360360408110156104e957600080fd5b81019060208101813564010000000081111561050457600080fd5b82018360208201111561051657600080fd5b8035906020019184602083028401116401000000008311171561053857600080fd5b9193509150351515610dd3565b34801561055157600080fd5b506102ef6004803603604081101561056857600080fd5b50803590602001356001600160a01b0316610e9e565b34801561058a57600080fd5b50610254610fd8565b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e995490565b606060006105c6600761100b565b90508067ffffffffffffffff811180156105df57600080fd5b50604051908082528060200260200182016040528015610609578160200160208202803683370190505b50915060005b8181101561064e57610622600782611016565b83828151811061062e57fe5b6001600160a01b039092166020928302919091019091015260010161060f565b505090565b60606000610661600561100b565b90508067ffffffffffffffff8111801561067a57600080fd5b506040519080825280602002602001820160405280156106a4578160200160208202803683370190505b50915060005b8181101561064e576106bd600582611016565b8382815181106106c957fe5b6001600160a01b03909216602092830291909101909101526001016106aa565b61271081565b6002546001600160a01b031681565b6001546001600160a01b0316331461074a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c95781156107905761078a84848381811061076a57fe5b905060200201356001600160a01b03166005610fe790919063ffffffff16565b506107c1565b6107bf84848381811061079f57fe5b905060200201356001600160a01b0316600561102290919063ffffffff16565b505b60010161074d565b50505050565b6001546001600160a01b0316331461081b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b61082f6001600160a01b0384168284611037565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6001546001600160a01b031633146108ca576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6108d3816110a3565b6040516001600160a01b038216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0390600090a250565b6001546001600160a01b03163314610956576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b0381166109b1576040805162461bcd60e51b815260206004820152600b60248201527f6e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a16002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610a7b576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600254600154604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600280546001805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03841617909155169055565b6001546001600160a01b03163314610b47576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b038116610ba2576040805162461bcd60e51b815260206004820152600760248201527f61646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600154604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606000610c63600961100b565b90508067ffffffffffffffff81118015610c7c57600080fd5b50604051908082528060200260200182016040528015610ca6578160200160208202803683370190505b50915060005b8181101561064e57610cbf600982611016565b838281518110610ccb57fe5b6001600160a01b0390921660209283029190910190910152600101610cac565b6001546001600160a01b03163314610d37576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610d7d57610d77848483818110610d5757fe5b905060200201356001600160a01b03166007610fe790919063ffffffff16565b50610dae565b610dac848483818110610d8c57fe5b905060200201356001600160a01b0316600761102290919063ffffffff16565b505b600101610d3a565b600460209081526000928352604080842090915290825290205481565b6001546001600160a01b03163314610e1f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610e6557610e5f848483818110610e3f57fe5b905060200201356001600160a01b03166009610fe790919063ffffffff16565b50610e96565b610e94848483818110610e7457fe5b905060200201356001600160a01b0316600961102290919063ffffffff16565b505b600101610e22565b6001546001600160a01b03163314610eea576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114610f35576040519150601f19603f3d011682016040523d82523d6000602084013e610f3a565b606091505b5050905080610f90576040805162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6001546001600160a01b031681565b6000610ffc836001600160a01b03841661112a565b90505b92915050565b3b151590565b6000610fff82611174565b6000610ffc8383611178565b6000610ffc836001600160a01b0384166111dc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905261109e9084906112a2565b505050565b6110b5816001600160a01b0316611005565b611106576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000604482015290519081900360640190fd5b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e9955565b60006111368383611353565b61116c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fff565b506000610fff565b5490565b815460009082106111ba5760405162461bcd60e51b81526004018080602001828103825260228152602001806115846022913960400191505060405180910390fd5b8260000182815481106111c957fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015611298578354600019808301919081019060009087908390811061120f57fe5b906000526020600020015490508087600001848154811061122c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061125c57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fff565b6000915050610fff565b60006112f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661136b9092919063ffffffff16565b80519091501561109e5780806020019051602081101561131657600080fd5b505161109e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115cc602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b606061137a8484600085611384565b90505b9392505050565b6060824710156113c55760405162461bcd60e51b81526004018080602001828103825260268152602001806115a66026913960400191505060405180910390fd5b6113ce85611005565b61141f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061145d5780518252601f19909201916020918201910161143e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114bf576040519150601f19603f3d011682016040523d82523d6000602084013e6114c4565b606091505b50915091506114d48282866114df565b979650505050505050565b606083156114ee57508161137d565b8251156114fe5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611548578181015183820152602001611530565b50505050905090810190601f1680156115755780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a000000000000000000000000a3e78ab6f120c730d6f3939c0dc6dcd0e3da727800000000000000000000000060fc810ea972809d729fce0043b82a58766596ee00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a1738f8dd7c42cd4175ccdca79af89b3ec7b68e90000000000000000000000005250b8202aebca35328e2c217c687e894d70cd31000000000000000000000000168e4c3ac8d89b00958b6be6400b066f0347ddc9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000066f54006b47d1b381b5b933f2de9bf05a6b4eb40000000000000000000000000ae0505c0c30dc0ea077cdb4ed1b2bb894d9c6b6500000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bcfcaa40395f4f38ad1afa8915bf11d9df8cf56
Deployed Bytecode
0x6080604052600436106101125760003560e01c806375829def116100a5578063845bc11b11610074578063c1a49d2e11610059578063c1a49d2e146104c6578063ce56c45414610545578063f851a4401461057e57610119565b8063845bc11b1461040c578063a7c477971461048b57610119565b806375829def1461037c57806377f50f97146103af5780637acc8678146103c457806380644c70146103f757610119565b8063296f4120116100e1578063296f4120146102705780633ccdbb28146102f15780635c60da1b1461033457806373a71a501461034957610119565b80630cdc405d1461019e57806316b6934314610203578063249d39e914610218578063267822471461023f57610119565b3661011957005b6000610123610593565b6001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461017e576040519150601f19603f3d011682016040523d82523d6000602084013e610183565b606091505b505090506040513d6000823e81801561019a573d82f35b3d82fd5b3480156101aa57600080fd5b506101b36105b8565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101ef5781810151838201526020016101d7565b505050509050019250505060405180910390f35b34801561020f57600080fd5b506101b3610653565b34801561022457600080fd5b5061022d6106e9565b60408051918252519081900360200190f35b34801561024b57600080fd5b506102546106ef565b604080516001600160a01b039092168252519081900360200190f35b34801561027c57600080fd5b506102ef6004803603604081101561029357600080fd5b8101906020810181356401000000008111156102ae57600080fd5b8201836020820111156102c057600080fd5b803590602001918460208302840111640100000000831117156102e257600080fd5b91935091503515156106fe565b005b3480156102fd57600080fd5b506102ef6004803603606081101561031457600080fd5b506001600160a01b038135811691602081013591604090910135166107cf565b34801561034057600080fd5b50610254610593565b34801561035557600080fd5b506102ef6004803603602081101561036c57600080fd5b50356001600160a01b031661087e565b34801561038857600080fd5b506102ef6004803603602081101561039f57600080fd5b50356001600160a01b031661090a565b3480156103bb57600080fd5b506102ef610a1c565b3480156103d057600080fd5b506102ef600480360360208110156103e757600080fd5b50356001600160a01b0316610afb565b34801561040357600080fd5b506101b3610c55565b34801561041857600080fd5b506102ef6004803603604081101561042f57600080fd5b81019060208101813564010000000081111561044a57600080fd5b82018360208201111561045c57600080fd5b8035906020019184602083028401116401000000008311171561047e57600080fd5b9193509150351515610ceb565b34801561049757600080fd5b5061022d600480360360408110156104ae57600080fd5b506001600160a01b0381358116916020013516610db6565b3480156104d257600080fd5b506102ef600480360360408110156104e957600080fd5b81019060208101813564010000000081111561050457600080fd5b82018360208201111561051657600080fd5b8035906020019184602083028401116401000000008311171561053857600080fd5b9193509150351515610dd3565b34801561055157600080fd5b506102ef6004803603604081101561056857600080fd5b50803590602001356001600160a01b0316610e9e565b34801561058a57600080fd5b50610254610fd8565b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e995490565b606060006105c6600761100b565b90508067ffffffffffffffff811180156105df57600080fd5b50604051908082528060200260200182016040528015610609578160200160208202803683370190505b50915060005b8181101561064e57610622600782611016565b83828151811061062e57fe5b6001600160a01b039092166020928302919091019091015260010161060f565b505090565b60606000610661600561100b565b90508067ffffffffffffffff8111801561067a57600080fd5b506040519080825280602002602001820160405280156106a4578160200160208202803683370190505b50915060005b8181101561064e576106bd600582611016565b8382815181106106c957fe5b6001600160a01b03909216602092830291909101909101526001016106aa565b61271081565b6002546001600160a01b031681565b6001546001600160a01b0316331461074a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c95781156107905761078a84848381811061076a57fe5b905060200201356001600160a01b03166005610fe790919063ffffffff16565b506107c1565b6107bf84848381811061079f57fe5b905060200201356001600160a01b0316600561102290919063ffffffff16565b505b60010161074d565b50505050565b6001546001600160a01b0316331461081b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b61082f6001600160a01b0384168284611037565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6001546001600160a01b031633146108ca576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6108d3816110a3565b6040516001600160a01b038216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0390600090a250565b6001546001600160a01b03163314610956576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b0381166109b1576040805162461bcd60e51b815260206004820152600b60248201527f6e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a16002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610a7b576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600254600154604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600280546001805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03841617909155169055565b6001546001600160a01b03163314610b47576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b038116610ba2576040805162461bcd60e51b815260206004820152600760248201527f61646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600154604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606000610c63600961100b565b90508067ffffffffffffffff81118015610c7c57600080fd5b50604051908082528060200260200182016040528015610ca6578160200160208202803683370190505b50915060005b8181101561064e57610cbf600982611016565b838281518110610ccb57fe5b6001600160a01b0390921660209283029190910190910152600101610cac565b6001546001600160a01b03163314610d37576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610d7d57610d77848483818110610d5757fe5b905060200201356001600160a01b03166007610fe790919063ffffffff16565b50610dae565b610dac848483818110610d8c57fe5b905060200201356001600160a01b0316600761102290919063ffffffff16565b505b600101610d3a565b600460209081526000928352604080842090915290825290205481565b6001546001600160a01b03163314610e1f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610e6557610e5f848483818110610e3f57fe5b905060200201356001600160a01b03166009610fe790919063ffffffff16565b50610e96565b610e94848483818110610e7457fe5b905060200201356001600160a01b0316600961102290919063ffffffff16565b505b600101610e22565b6001546001600160a01b03163314610eea576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114610f35576040519150601f19603f3d011682016040523d82523d6000602084013e610f3a565b606091505b5050905080610f90576040805162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6001546001600160a01b031681565b6000610ffc836001600160a01b03841661112a565b90505b92915050565b3b151590565b6000610fff82611174565b6000610ffc8383611178565b6000610ffc836001600160a01b0384166111dc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905261109e9084906112a2565b505050565b6110b5816001600160a01b0316611005565b611106576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000604482015290519081900360640190fd5b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e9955565b60006111368383611353565b61116c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fff565b506000610fff565b5490565b815460009082106111ba5760405162461bcd60e51b81526004018080602001828103825260228152602001806115846022913960400191505060405180910390fd5b8260000182815481106111c957fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015611298578354600019808301919081019060009087908390811061120f57fe5b906000526020600020015490508087600001848154811061122c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061125c57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fff565b6000915050610fff565b60006112f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661136b9092919063ffffffff16565b80519091501561109e5780806020019051602081101561131657600080fd5b505161109e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115cc602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b606061137a8484600085611384565b90505b9392505050565b6060824710156113c55760405162461bcd60e51b81526004018080602001828103825260268152602001806115a66026913960400191505060405180910390fd5b6113ce85611005565b61141f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061145d5780518252601f19909201916020918201910161143e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114bf576040519150601f19603f3d011682016040523d82523d6000602084013e6114c4565b606091505b50915091506114d48282866114df565b979650505050505050565b606083156114ee57508161137d565b8251156114fe5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611548578181015183820152602001611530565b50505050905090810190601f1680156115755780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a3e78ab6f120c730d6f3939c0dc6dcd0e3da727800000000000000000000000060fc810ea972809d729fce0043b82a58766596ee00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a1738f8dd7c42cd4175ccdca79af89b3ec7b68e90000000000000000000000005250b8202aebca35328e2c217c687e894d70cd31000000000000000000000000168e4c3ac8d89b00958b6be6400b066f0347ddc9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000066f54006b47d1b381b5b933f2de9bf05a6b4eb40000000000000000000000000ae0505c0c30dc0ea077cdb4ed1b2bb894d9c6b6500000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bcfcaa40395f4f38ad1afa8915bf11d9df8cf56
-----Decoded View---------------
Arg [0] : _admin (address): 0xa3e78aB6f120C730D6F3939c0Dc6dcD0E3da7278
Arg [1] : _implementation (address): 0x60fc810EA972809d729FCE0043B82a58766596ee
Arg [2] : _supportedPlatformWallets (address[]): 0xa1738F8DD7c42cd4175CcdCa79Af89b3EC7b68E9,0x5250b8202AEBca35328E2c217C687E894d70Cd31,0x168E4c3AC8d89B00958B6bE6400B066f0347DDc9
Arg [3] : _supportedSwaps (address[]): 0x66f54006B47d1b381b5B933F2De9bf05a6B4Eb40,0xAE0505c0C30Dc0EA077cDB4Ed1B2BB894D9c6B65
Arg [4] : _supportedLendings (address[]): 0x2bcfCaA40395F4f38Ad1aFa8915BF11d9df8Cf56
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000a3e78ab6f120c730d6f3939c0dc6dcd0e3da7278
Arg [1] : 00000000000000000000000060fc810ea972809d729fce0043b82a58766596ee
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 000000000000000000000000a1738f8dd7c42cd4175ccdca79af89b3ec7b68e9
Arg [7] : 0000000000000000000000005250b8202aebca35328e2c217c687e894d70cd31
Arg [8] : 000000000000000000000000168e4c3ac8d89b00958b6be6400b066f0347ddc9
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 00000000000000000000000066f54006b47d1b381b5b933f2de9bf05a6b4eb40
Arg [11] : 000000000000000000000000ae0505c0c30dc0ea077cdb4ed1b2bb894d9c6b65
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [13] : 0000000000000000000000002bcfcaa40395f4f38ad1afa8915bf11d9df8cf56
Previously recorded to be on 0x9715975c4c5e3447dc14e07a0d00ff74a6faf8cd.
Previously recorded to be on 0x9715975c4c5e3447dc14e07a0d00ff74a6faf8cd.
OVERVIEW
Krystal's router contract.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 21.62% | $3,672.44 | 0.036 | $132.19 | |
ETH | 8.59% | $0.999865 | 52.503 | $52.5 | |
ETH | 5.86% | $0.999125 | 35.8514 | $35.82 | |
ETH | 1.69% | $1.72 | 5.9927 | $10.31 | |
ETH | 1.51% | $0.288311 | 32.1273 | $9.26 | |
ETH | 1.42% | $0.698205 | 12.417 | $8.67 | |
ETH | 1.41% | $0.073817 | 117.0301 | $8.64 | |
ETH | 1.29% | $0.610077 | 12.908 | $7.87 | |
ETH | 1.28% | $3,672.44 | 0.00213261 | $7.83 | |
ETH | 1.27% | $0.832027 | 9.3366 | $7.77 | |
ETH | 1.23% | $3,763.48 | 0.00200592 | $7.55 | |
ETH | 1.11% | $0.451767 | 15.0441 | $6.8 | |
ETH | 0.82% | $0.941996 | 5.3118 | $5 | |
ETH | 0.78% | $6.64 | 0.7216 | $4.79 | |
ETH | 0.78% | $616.57 | 0.00775081 | $4.78 | |
ETH | 0.70% | $0.534681 | 8 | $4.28 | |
ETH | 0.67% | $3.3 | 1.2444 | $4.11 | |
ETH | 0.64% | $3.89 | 1 | $3.89 | |
ETH | 0.63% | $1 | 3.8267 | $3.83 | |
ETH | 0.63% | $0.000002 | 1,683,495.8024 | $3.82 | |
ETH | 0.60% | $114.88 | 0.0321 | $3.68 | |
ETH | 0.60% | $0.752724 | 4.8397 | $3.64 | |
ETH | 0.57% | $1.82 | 1.9315 | $3.52 | |
ETH | 0.52% | $13.27 | 0.24 | $3.18 | |
ETH | 0.51% | $0.473354 | 6.5893 | $3.12 | |
ETH | 0.50% | $0.011047 | 274.2857 | $3.03 | |
ETH | 0.49% | $0.067103 | 44.7997 | $3.01 | |
ETH | 0.47% | $19.76 | 0.1458 | $2.88 | |
ETH | 0.44% | $0.032337 | 82.4715 | $2.67 | |
ETH | 0.40% | $1.34 | 1.8433 | $2.48 | |
ETH | 0.38% | $0.552243 | 4.2333 | $2.34 | |
ETH | 0.36% | $0.254013 | 8.6475 | $2.2 | |
ETH | 0.35% | $0.037264 | 57.3226 | $2.14 | |
ETH | 0.33% | $5.66 | 0.3586 | $2.03 | |
ETH | 0.32% | $0.243351 | 8 | $1.95 | |
ETH | 0.32% | $0.000021 | 93,486.7444 | $1.94 | |
ETH | 0.29% | $0.698214 | 2.5677 | $1.79 | |
ETH | 0.29% | $1.26 | 1.4141 | $1.78 | |
ETH | 0.28% | <$0.000001 | 110,587,551 | $1.72 | |
ETH | 0.26% | $0.001614 | 993.0495 | $1.6 | |
ETH | 0.24% | $0.016484 | 89.4118 | $1.47 | |
ETH | 0.23% | $12.25 | 0.1172 | $1.44 | |
ETH | 0.23% | $3.76 | 0.376 | $1.41 | |
ETH | 0.22% | $0.000001 | 1,674,835.2431 | $1.37 | |
ETH | 0.22% | $0.000334 | 4,029.6834 | $1.34 | |
ETH | 0.21% | $0.052718 | 24 | $1.27 | |
ETH | 0.21% | <$0.000001 | 10,911,415.5645 | $1.25 | |
ETH | 0.20% | $0.128269 | 9.736 | $1.25 | |
ETH | 0.20% | $0.004315 | 288.1894 | $1.24 | |
ETH | 0.20% | $0.000001 | 1,814,775.8938 | $1.23 | |
ETH | 0.18% | $0.563029 | 1.964 | $1.11 | |
ETH | 0.18% | $0.046115 | 23.8306 | $1.1 | |
ETH | 0.17% | $0.004644 | 225.2024 | $1.05 | |
ETH | 0.17% | $0.127756 | 8 | $1.02 | |
ETH | 0.15% | $0.018994 | 49.8412 | $0.9466 | |
ETH | 0.15% | $1.2 | 0.7691 | $0.9229 | |
ETH | 0.15% | $0.360857 | 2.5314 | $0.9134 | |
ETH | 0.15% | $0.119115 | 7.588 | $0.9038 | |
ETH | 0.14% | $3,759.01 | 0.0002311 | $0.8687 | |
ETH | 0.13% | $3,771.69 | 0.00021846 | $0.8239 | |
ETH | 0.13% | $0.634926 | 1.2389 | $0.7866 | |
ETH | 0.13% | $0.131426 | 5.9141 | $0.7772 | |
ETH | 0.13% | $0.3197 | 2.4 | $0.7672 | |
ETH | 0.12% | $0.933831 | 0.7905 | $0.7382 | |
ETH | 0.12% | $0.001993 | 357.6419 | $0.7129 | |
ETH | 0.12% | $0.443357 | 1.6 | $0.7093 | |
ETH | 0.11% | $1.45 | 0.4748 | $0.6885 | |
ETH | 0.11% | $19.29 | 0.0342 | $0.6603 | |
ETH | 0.11% | $0.030776 | 21.3012 | $0.6555 | |
ETH | 0.10% | $0.017733 | 36.0145 | $0.6386 | |
ETH | 0.10% | $0.02542 | 25.0125 | $0.6358 | |
ETH | 0.10% | $0.336489 | 1.854 | $0.6238 | |
ETH | 0.10% | $1.33 | 0.4665 | $0.6203 | |
ETH | 0.10% | $0.052903 | 11.5584 | $0.6114 | |
ETH | 0.10% | $0.054483 | 11 | $0.5993 | |
ETH | 0.09% | $647.38 | 0.00085 | $0.5502 | |
ETH | 0.09% | $0.00003 | 18,241.6493 | $0.5485 | |
ETH | 0.09% | $0.00671 | 79.3349 | $0.5323 | |
ETH | 0.09% | $0.179009 | 2.96 | $0.5298 | |
ETH | 0.08% | $0.000067 | 7,230.32 | $0.4859 | |
ETH | 0.08% | $30.46 | 0.0159 | $0.4848 | |
ETH | 0.08% | $0.000108 | 4,500.067 | $0.4842 | |
ETH | 0.08% | $0.935756 | 0.4983 | $0.4662 | |
ETH | 0.08% | $0.052656 | 8.8397 | $0.4654 | |
ETH | 0.08% | $0.000415 | 1,115.9575 | $0.4629 | |
ETH | 0.07% | $0.387689 | 1.175 | $0.4555 | |
ETH | 0.07% | $8.48 | 0.0537 | $0.455 | |
ETH | 0.07% | $0.114332 | 3.9233 | $0.4485 | |
ETH | 0.07% | $4,349.93 | 0.0001 | $0.4349 | |
ETH | 0.07% | $0.04274 | 9.9268 | $0.4242 | |
ETH | 0.07% | $0.110747 | 3.793 | $0.42 | |
ETH | 0.07% | $95,842 | 0.00000423 | $0.4054 | |
ETH | 0.07% | $1,852.14 | 0.00021655 | $0.401 | |
ETH | 0.06% | $0.022418 | 17.5921 | $0.3943 | |
ETH | 0.06% | $3.56 | 0.109 | $0.388 | |
ETH | 0.06% | $0.159282 | 2.3654 | $0.3767 | |
ETH | 0.06% | $0.783104 | 0.4536 | $0.3552 | |
ETH | 0.06% | $0.185234 | 1.8767 | $0.3476 | |
ETH | 0.06% | $0.009332 | 37.2 | $0.3471 | |
ETH | 0.06% | $0.310103 | 1.0993 | $0.3409 | |
ETH | 0.05% | $0.00318 | 101.718 | $0.3234 | |
ETH | 0.05% | $104.03 | 0.00304 | $0.3162 | |
ETH | 0.05% | $0.000137 | 2,306.4867 | $0.316 | |
ETH | 0.05% | $0.000008 | 40,000 | $0.3132 | |
ETH | 0.05% | $0.129418 | 2.2889 | $0.2962 | |
ETH | 0.05% | $0.125742 | 2.3048 | $0.2898 | |
ETH | 0.05% | $340.55 | 0.00084054 | $0.2862 | |
ETH | 0.05% | $0.016436 | 16.9917 | $0.2792 | |
ETH | 0.04% | $0.020558 | 13.3302 | $0.274 | |
ETH | 0.04% | $0.021431 | 12.7196 | $0.2725 | |
ETH | 0.04% | $0.010786 | 25.0847 | $0.2705 | |
ETH | 0.04% | $59.18 | 0.0042 | $0.2485 | |
ETH | 0.04% | $0.002641 | 92.9796 | $0.2455 | |
ETH | 0.04% | $213.97 | 0.00109682 | $0.2346 | |
ETH | 0.03% | $0.000043 | 4,845.2191 | $0.209 | |
ETH | 0.03% | $0.03082 | 6.5225 | $0.201 | |
ETH | 0.03% | $0.857945 | 0.2171 | $0.1862 | |
ETH | 0.03% | $0.693686 | 0.2524 | $0.1751 | |
ETH | 0.03% | $0.007121 | 22.3543 | $0.1591 | |
ETH | 0.03% | $0.000156 | 1,000 | $0.1556 | |
ETH | 0.02% | $0.006421 | 21.4472 | $0.1377 | |
ETH | 0.02% | $0.002299 | 59 | $0.1356 | |
ETH | 0.02% | $0.000001 | 94,746.675 | $0.1231 | |
ETH | 0.02% | $0.437987 | 0.2755 | $0.1206 | |
ETH | 0.02% | $1.83 | 0.06 | $0.1098 | |
ETH | 0.02% | $1.99 | 0.0518 | $0.103 | |
ETH | 0.02% | $0.002561 | 40 | $0.1024 | |
POL | Polygon (POL) | 4.59% | $0.612117 | 45.861 | $28.07 |
POL | 1.49% | $1 | 9.114 | $9.11 | |
POL | 1.33% | $1 | 8.1438 | $8.14 | |
POL | 1.17% | $228.64 | 0.0312 | $7.14 | |
POL | 0.69% | $3,670.96 | 0.00115012 | $4.22 | |
POL | 0.62% | $1 | 3.8091 | $3.81 | |
POL | 0.45% | $0.754283 | 3.681 | $2.78 | |
POL | 0.39% | $3.57 | 0.6707 | $2.39 | |
POL | 0.39% | $0.052971 | 44.794 | $2.37 | |
POL | 0.34% | $19.82 | 0.1041 | $2.06 | |
POL | 0.31% | $1.05 | 1.7832 | $1.87 | |
POL | 0.28% | $1.45 | 1.2 | $1.74 | |
POL | 0.26% | $0.701896 | 2.2898 | $1.61 | |
POL | 0.25% | $0.000043 | 35,071.0304 | $1.52 | |
POL | 0.25% | $1.08 | 1.39 | $1.5 | |
POL | 0.23% | $0.006892 | 202.32 | $1.39 | |
POL | 0.23% | $0.000234 | 5,918.7036 | $1.38 | |
POL | 0.22% | $0.641603 | 2.1316 | $1.37 | |
POL | 0.21% | $8.48 | 0.1509 | $1.28 | |
POL | 0.21% | $0.000366 | 3,444.4839 | $1.26 | |
POL | 0.20% | $1.75 | 0.7016 | $1.23 | |
POL | 0.20% | $95,978 | 0.0000126 | $1.21 | |
POL | 0.17% | $0.220829 | 4.6773 | $1.03 | |
POL | 0.13% | $0.237292 | 3.2734 | $0.7767 | |
POL | 0.10% | $0.228373 | 2.667 | $0.609 | |
POL | 0.09% | $13.03 | 0.0441 | $0.5745 | |
POL | 0.09% | $0.612158 | 0.8885 | $0.5439 | |
POL | 0.08% | $0.999999 | 0.4959 | $0.4958 | |
POL | 0.08% | $1.05 | 0.4633 | $0.4883 | |
POL | 0.07% | $0.250545 | 1.6954 | $0.4247 | |
POL | 0.06% | $0.000882 | 449.4778 | $0.3965 | |
POL | 0.06% | $0.003294 | 120 | $0.3953 | |
POL | 0.06% | $8,234.19 | 0.0000475 | $0.3911 | |
POL | 0.06% | <$0.000001 | 26,406,148.6596 | $0.3696 | |
POL | 0.06% | $340.45 | 0.0009915 | $0.3375 | |
POL | 0.05% | $0.635789 | 0.525 | $0.3337 | |
POL | 0.05% | $214.67 | 0.00154297 | $0.3312 | |
POL | 0.05% | $4.06 | 0.0799 | $0.3245 | |
POL | 0.05% | $0.006645 | 43.0069 | $0.2857 | |
POL | 0.04% | $0.010343 | 22.3704 | $0.2313 | |
POL | 0.03% | $0.004635 | 35.9697 | $0.1667 | |
POL | 0.02% | $0.692028 | 0.2186 | $0.1512 | |
POL | 0.02% | $0.289548 | 0.4193 | $0.1214 | |
POL | 0.02% | $95,918 | 0.00000116 | $0.1113 | |
POL | 0.02% | $0.00422 | 25.7218 | $0.1085 | |
BSC | 12.28% | $647.25 | 0.116 | $75.08 | |
BSC | 0.04% | $0.000654 | 328.1551 | $0.2144 | |
BASE | 1.20% | $3,672.8 | 0.002 | $7.35 | |
BASE | 0.29% | $0.111794 | 15.695 | $1.75 | |
FTM | 0.02% | $1.04 | 0.1 | $0.104128 | |
GNO | <0.01% | $0.999948 | 0.0004 | $0.0004 |
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 Note:
Please DO NOT store any passwords or private keys here.
The compiled contract might be susceptible to FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), DataLocationChangeInInternalOverride (very low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), SignedImmutables (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity) Solidity Compiler Bugs.
Connect a Wallet
Connect a Wallet
Connect a Wallet
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.