![ads](/images/gen/moonpay_20.png)
20M+ users trust MoonPay worldwide. Checkout with your preferred payment method.
![ads](/images/gen/cons_20.png)
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
![ads](/images/gen/nexo.png)
Get up to 0.5% cashback per purchase and receive daily interest.
![ads](/images/gen/cons_20.png)
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Purchase 100+ cryptocurrencies instantly, with Visa/Mastercard, Google/Apple Pay, and a variety of other funding methods.
![ads](/images/gen/coinsgame_20a.png)
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
![ads](/images/gen/celsiuscasino_20.png)
9 years old Licensed Crypto Casino, Instant Withdraw 24/7, 6000+ Slots available, Paypal Deposit, Instant Live Support 24/7, 30% Rakeback.
![ads](/images/gen/bcgames_20.png)
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
![ads](/images/gen/bcgames_20.png)
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
![ads](/images/gen/cw_20.png)
Play 100s of games anonymously with all major cryptos. Join CryptoWins & start winning!
![ads](/images/gen/cryptoslots.png)
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
Overview
ETH Balance
Eth Value
$311.49 (@ $2,503.48/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (>200)92.97956251 MAZZEMAZZE (MAZZE)$0.32@0.003453,600 TRXCTRONCLASSIC (TRXC)$0.01@0.000.00000081 aDAIAave Interes... (aDAI)$0.00@0.99880.00109682 AAVEAave Token (AAVE)$0.14@131.220.35 ATHAethir Token (ATH)$0.02@0.051822.3542688 AMPAmp (AMP)$0.09@0.00399.92676953 ANKRAnkr Network (ANKR)$0.24@0.02410.25244788 ARCXArchitex (ARCX)$0.12@0.467636.01450322 ALIArtificial L... (ALI)$0.33@0.00911.87672232 AUDIOAudius (AUDIO)$0.25@0.13170.01436197 BADGERBadger (BADGER)$0.04@2.72180.3968 SPWNBitSpawn Tok... (SPWN)$0.00@0.0059 GUILDBlockchainSp... (GUILD)$0.15@0.002594,746.67497696 BOBOBOBO (BOBO)$0.05@0.00108,658.58460102 BTCBoost Trump ... (BTC)$0.01@0.000.8985451 BRETTBrett (BRETT)$0.01@0.00980.0008 BZRXbZx Protocol... (BZRX)$0.00@0.01420.42930768 CEEKCEEK (CEEK)$0.01@0.028517.59207315 CELRCelerToken (CELR)$0.20@0.01130.14577208 LINKChainLink To... (LINK)$1.54@10.575.9141415 CVPConcentrated... (CVP)$0.16@0.02630.07456592 CRUCRUST (CRU)$0.03@0.44194.83967638 CRVCurve DAO To... (CRV)$1.33@0.27431.6 DAODAO Maker (DAO)$0.47@0.29630.59372753 GENDAOstack (GEN)$0.00@0.001.23892166 MANADecentraland (MANA)$0.33@0.264137.20001197 TSUKADejitaru Tsu... (TSUKA)$0.19@0.00510.21710145 DIADIAToken (DIA)$0.08@0.35398 DMTRDimitra Toke... (DMTR)$0.52@0.065274.28571424 DIVERDivergencePr... (DIVER)$2.35@0.008689.411768 DOMIDomi (DOMI)$0.85@0.00955.99268382 DYDXdYdX (DYDX)$5.40@0.9012.4 ENJEnjinCoin (ENJ)$0.34@0.139615.57489994 erowanerowan (erowan)$0.00@0.009.33664484 ENAEthena (ENA)$2.18@0.233340 BLUEEthereum Blu... (BLUE)$0.09@0.00230.00200592 Renzo Restaked ETHezETH (Renzo ...)$5.11@2,546.311.93148298 FETFetch (FET)$2.28@1.180.2 FOXFOX (FOX)$0.01@0.04144.79968 GAMEGame Coin (GAME)$3.32@0.07420.05178699 GFIGoldfinch (GFI)$0.12@2.351.84519856 GRTGraph Token (GRT)$0.26@0.1433225.20241814 HEXHEX (HEX)$0.24@0.00110.0032 HTHuobiToken (HT)$0.00@0.48490.0042 ILVIlluvium (ILV)$0.16@37.5416.59524989 ITGRIntegral (ITGR)$0.05@0.0030.54909562 IOTXIoTeX Networ... (IOTX)$0.02@0.034859.2 JPEGJPEG’d Gover... (JPEG)$0.03@0.00052.3527174 KARRATKarratCoin (KARRAT)$0.79@0.33532.36541589 KASKaspa (KAS)$0.37@0.156412.41698821 KNCKyberNetwork (KNC)$5.48@0.44111,115.95752153 LITHLithium (LITH)$0.66@0.00068 LRCLoopringCoin... (LRC)$1.00@0.12480.376 FOLDManifold Fin... (FOLD)$2.93@7.7960.10900754 OMMANTRA DAO (OM)$0.11@0.995249.84124714 PONDMarlin POND (POND)$0.68@0.013712.90796143 MATICMatic Token (MATIC)$5.26@0.40740.03423992 MLNMelon Token (MLN)$0.54@15.830.000001 mETHmETH (mETH)$0.00@2,610.92103.02984711 NEIRONeiro (NEIRO)$3.20@0.03110.00304 OHMOHM V1 (OHM)$0.25@81.900.16731503 OMGOMG Network (OMG)$0.04@0.21594,029.68338854 OMIOMI Token (OMI)$1.58@0.00040.7691251 ONDOOndo (ONDO)$0.47@0.6154 ORIONOrion Money ... (ORION)$0.00@0.00115.69540331 PAIDPAID Network (PAID)$0.74@0.04691.84334596 PALMPaLM AI (PALM)$0.91@0.491693,486.74442676 PEPEPepe (PEPE)$0.70@0.002.70366727 pepecoinpepeCoin (pepeco...)$6.62@2.44782.47151372 PKFPolkaFoundry (PKF)$2.20@0.02678 POLSPolkastarter... (POLS)$1.89@0.23610.27553515 PORTALPORTAL (PORTAL)$0.07@0.2521.1581 XPRProton (XPR)$0.02@0.00080.00000137 pBTCpTokens BTC (pBTC)$0.00@1,689.740.0002311 pufETHpufETH (pufETH)$0.58@2,527.900.03206912 QNTQuant (QNT)$2.00@62.440.7905328 RAERAE Token (RAE)$0.80@1.0170.01228672 RNDRRender Token (RNDR)$0.06@5.000.318496 RENRepublic (REN)$0.01@0.03829.736 REQRequest (REQ)$1.00@0.10280.0000008 rETHRocket Pool ... (rETH)$0.00@2,809.910.06 ROUTERoute (ROUTE)$0.09@1.545.3117719 SAVMSatoshiVM (SAVM)$5.27@0.9920.3584 SENATESENATE (SENATE)$0.01@0.033118,241.64927966 SHIBSHIBA INU (SHIB)$0.25@0.0079.33493333 SIDUSSIDUS (SIDUS)$0.21@0.00270.45364219 AGIXSingularityN... (AGIX)$0.23@0.51730.0159191 SSVSSV Token (SSV)$0.31@19.702.56772551 STRKStarknet Tok... (STRK)$0.97@0.376656,707.79442464 STARLStarLink (STARL)$0.04@0.000 stETHstETH (stETH)$0.00@2,504.120.01222944 STRNGRStronger (STRNGR)$0.01@0.64160.47483583 SUPERSuperFarm (SUPER)$0.32@0.67790.46646031 SUSHISushiToken (SUSHI)$0.27@0.57590.25 SISSymbiosis (SIS)$0.04@0.16330.0302296 SNXSynthetix Ne... (SNX)$0.04@1.3239.9992 TEMPTempus (TEMP)2,306.48666616 RUNIXTHE.RUNIX.TO... (RUNIX)$0.38@0.00020.03 THORTHORSwap Tok... (THOR)$0.01@0.300416.99168 TGTTHORWallet G... (TGT)$0.36@0.02111,948.18184438 TURBOTurbo (TURBO)$7.07@0.00361.2443904 UMAUMA Voting T... (UMA)$2.89@2.3223.83064948 UBTUniBright (UBT)$0.75@0.03131.09932856 UFTUniLend Fina... (UFT)$0.30@0.26842.53143602 VXVVectorspaceA... (VXV)$0.99@0.390925.084744 VRVictoria VR (VR)$0.16@0.00640.00002417 weETHWrapped eETH (weETH)$0.06@2,626.040.00469083 wTAOWrapped TAO (wTAO)$1.29@275.240.72156219 TONCOINWrapped TON ... (TONCOI...)$3.74@5.183.1513223 USTCWrapped USTC... (USTC)$0.05@0.01612.71960373 XDXD Token (XD)$0.27@0.02144,902,517.48944286 XENXEN Crypto (XEN)$0.36@0.002.96 ZCXZEN Exchange... (ZCX)$0.22@0.07291.96401064 ZRXZRX (ZRX)$0.57@0.29120.09806131 ARBArbitrum (ARB)$0.05@0.51190.009464 BATBAT (BAT)$0.00@0.16470.00085 BNBBNB (BNB)$0.45@532.52263.82666828 BUSDBUSD (BUSD)$3.78@0.98763.99467072 cDAICompound Dai (cDAI)$0.09@0.02381.06853932 DAIDai Stableco... (DAI)$1.07@1.000.00021655 MKRMaker (MKR)$0.38@1,753.000.0528 USDPPax Dollar (USDP)$0.05@1.0010.35857351 PENDLEPendle (PENDLE)$1.10@3.080.05953768 PAYTenXPay (PAY)$0.00@0.00754.32089 USDTTether USD (USDT)$4.32@1.00223.476245 USDCUSDC (USDC)$223.48@1.000.00000036 WBTCWrapped BTC (WBTC)$0.02@58,880.000.00270952 WETHWrapped Ethe... (WETH)$6.78@2,503.48480.0001 wstETHWrapped liqu... (wstETH)$0.29@2,948.440.20976 1MIL1MILNFT$0.02@0.07994.79476244 AGVAstra Guild Ventures Token1.17504285 AXGTAxonDAO Governance Token$0.14@0.11661,700 BANCABANCA2.24176276 BEFIBefi Labs$0.05@0.024357.64187677 BIAOBiaoqing$0.51@0.00144,845.21905 BonkBonk$0.09@0.0080,259.16428955 CLARKClark G The ... (CLARK)25.44959456 KAICodename: Ka... (KAI)31.74329591 COLONColon$0.13@0.004196.63066776 DAZUDazu Huike (DAZU)0.31974441 DreamDecentralize... (Dream)7.27001486 DEFITDIGITAL FITNESS13.30389112 DNXCDinoX Coin$0.02@0.00130.00084054 LEASHDOGE KILLER$0.22@262.8340,000 DRAGONXDragonX (DRAGON...)110.96516659 WTFfees.wtf101.71796413 FIGHTFight to MAGA$0.63@0.0062800 FNXFinNexus3,387.04271601 FOURFour$0.01@0.001,822.408 FWTFreewayToken0.00968 GameGame346.5 TETHERHarryPotterObamaHomerSimpson888Inu13.33015183 HEARTHUMANS$0.11@0.00832,964.06923851 HYPERHyper (HYPER)3,887,417.94635168 HYPEHypeToken.vi... (HYPE)110,587,551 KIZUNAKIZUNA$0.52@0.007,230.31995546 MAGAMAGA$0.74@0.0001182,608.50048026 MAPEMAGA Pepe$0.14@0.000.47508741 MPLMaple Token$8.06@16.9611.55838376 MTOMerchant Token$0.48@0.04131,822.408 FWTMigrationmigration.au... (FWTMig...)1,683,495.80235155 MogMog Coin$1.57@0.00159.23288416 燃Moyasu (燃)57.32255826 MUBIMUBI$1.34@0.023469,457.06207188 NeiroNeiro$6.13@0.00010.11721697 OMNIOmni Network$0.81@6.888.24602432 PLEPlethori (PLE)5.832 XPPolkaFantasy (XP)5,556.88586553 PNDCPond Coin$0.00@0.003.74171556 RPGRangers Protocol Gas532,611.27917213 ROERenaissance ... (ROE)3 Claim on: claim.renzo-ecosystem.comRenzo Restak... (Claim ...)0.63134336 SMB SWAPSIMBCOIN SWAP$0.00@0.0010.00002485 SQUIDSquid (SQUID)0.00021846 STONEStakeStone Ether$0.56@2,562.25314,775.89382071 TITANXTITAN X$0.16@0.000 TOMItomi Token$0.00@0.043714.66408301 TPUTPU (TPU)1 UPCUPCX$1.85@1.857.58800002 VALORValorToken$0.81@0.10710.3928 VPADVLaunch (VPAD)52.89936672 WAIFWaifu3.793 AITAIT Protocol$0.24@0.06313.92333333 BCUBEb-cube.ai Token$0.28@0.07223.36 BBANKBlockBank$0.00@0.000120 BOLTBolt Token$0.06@0.00322.28892681 C3CHARLI3$0.12@0.05278.64750628 CPOOLClearpool$1.05@0.12160.24 HAPIHAPI$2.11@8.796.52252445 JASMYJasmyCoin$0.12@0.01890.11773288 NAONettensor$0.00@0.019324 NTXNuNet Utility Token$0.62@0.0258288.18938769 OXOpen Exchange Token$0.08@0.000321.4472 RAINIRainicorn$0.13@0.00620.58386364 RIORealio Network$0.40@0.688773,799.72862732 UFOTHE TRUTH$0.30@0.000.008 WXRPWrapped XRP$0.00@0.56629,900 TokenERC-20 TOKEN*[Suspicious]4,999 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]NFT Tokens (33)claim rewards on clinknetwork.orgclinknetwork.orgERC-1155ether-origin.comether-origin.comERC-1155claim rewards on shibprotocol.comshibprotocol.comERC-1155Withdrawal NFT originethers.commWithdrawal NFT originethers.comERC-1155Withdrawal NFT pufether.orgWithdrawal NFT pufether.orgERC-1155
ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]ERC-1155 TOKEN*
[Spam]More Info
Private Name Tags
ContractCreator
Multichain Info
3 addresses found via- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Info
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 4,485 transactions
Transaction Hash MethodBlockFromToSwap 20669151 2024-09-03 9:27:47 45 mins ago 1725355667 IN 0 ETH$0.00 0.0005249 2.26225225 Swap 20669146 2024-09-03 9:26:47 46 mins ago 1725355607 IN 0 ETH$0.00 0.00045713 2.09206601 Swap 20668981 2024-09-03 8:53:47 1 hr ago 1725353627 IN 0 ETH$0.00 0.00101774 3.64507688 Swap 20664920 2024-09-02 19:17:35 14 hrs ago 1725304655 IN 0 ETH$0.00 0.00181601 7.16683544 Swap 20661678 2024-09-02 8:25:35 25 hrs ago 1725265535 IN 0 ETH$0.00 0.00088189 4.55326239 Swap 20661672 2024-09-02 8:24:23 25 hrs ago 1725265463 IN 0 ETH$0.00 0.00124952 4.49516217 Swap 20661637 2024-09-02 8:17:23 25 hrs ago 1725265043 IN 0 ETH$0.00 0.00121141 4.10533559 Swap 20659685 2024-09-02 1:45:47 32 hrs ago 1725241547 IN 0 ETH$0.00 0.00012957 0.6 Swap 20657637 2024-09-01 18:53:23 39 hrs ago 1725216803 IN 0 ETH$0.00 0.00021207 0.86357219 Swap 20656319 2024-09-01 14:28:59 43 hrs ago 1725200939 IN 0 ETH$0.00 0.00053042 1.79289587 Swap 20656313 2024-09-01 14:27:47 43 hrs ago 1725200867 IN 0 ETH$0.00 0.00050282 1.86834525 Swap 20656082 2024-09-01 13:41:23 44 hrs ago 1725198083 IN 0 ETH$0.00 0.0002865 1.08976769 Swap 20654572 2024-09-01 8:36:59 2 days ago 1725179819 IN 0.056 ETH$140.20 0.00032989 1.10781778 Swap 20654546 2024-09-01 8:31:47 2 days ago 1725179507 IN 0 ETH$0.00 0.00027246 1.14776787 Swap 20654541 2024-09-01 8:30:47 2 days ago 1725179447 IN 0 ETH$0.00 0.00027599 1.16261083 Swap 20654537 2024-09-01 8:29:59 2 days ago 1725179399 IN 0 ETH$0.00 0.00027218 1.17938174 Swap 20651335 2024-08-31 21:47:59 2 days ago 1725140879 IN 0 ETH$0.00 0.00033536 1.20084563 Swap 20651321 2024-08-31 21:45:11 2 days ago 1725140711 IN 0 ETH$0.00 0.00037161 0.91899036 Swap 20648424 2024-08-31 12:02:11 2 days ago 1725105731 IN 0 ETH$0.00 0.00025415 1.21609463 Swap 20648162 2024-08-31 11:09:35 2 days ago 1725102575 IN 0 ETH$0.00 0.00030903 1.38171877 Swap 20647242 2024-08-31 8:04:47 3 days ago 1725091487 IN 0 ETH$0.00 0.00024304 0.99206865 Swap 20646486 2024-08-31 5:32:59 3 days ago 1725082379 IN 0 ETH$0.00 0.00019126 0.80696498 Swap 20646268 2024-08-31 4:49:11 3 days ago 1725079751 IN 0.082 ETH$205.29 0.00022254 1.1942612 Swap 20646246 2024-08-31 4:44:47 3 days ago 1725079487 IN 0 ETH$0.00 0.00025351 1.10348806 Swap 20644594 2024-08-30 23:12:11 3 days ago 1725059531 IN 0 ETH$0.00 0.0000616 1.2219031 Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669368 2024-09-03 10:11:11 1 min ago 1725358271 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669365 2024-09-03 10:10:35 2 mins ago 1725358235 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669222 2024-09-03 9:41:59 31 mins ago 1725356519 0 ETH$0.00 20669219 2024-09-03 9:41:23 31 mins ago 1725356483 0 ETH$0.00 Loading...LoadingContract Name:SmartWalletProxy
Compiler Versionv0.7.6+commit.7338295f
Optimization Enabled:Yes with 780 runs
Other Settings:default evmVersionContract 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
60806040523480156200001157600080fd5b5060405162001a8838038062001a88833981810160405260a08110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82518660208202830111640100000000821117156200009757600080fd5b82525081516020918201928201910280838360005b83811015620000c6578181015183820152602001620000ac565b5050505090500160405260200180516040519392919084640100000000821115620000f057600080fd5b9083019060208201858111156200010657600080fd5b82518660208202830111640100000000821117156200012457600080fd5b82525081516020918201928201910280838360005b838110156200015357818101518382015260200162000139565b50505050905001604052602001805160405193929190846401000000008211156200017d57600080fd5b9083019060208201858111156200019357600080fd5b8251866020820283011164010000000082111715620001b157600080fd5b82525081516020918201928201910280838360005b83811015620001e0578181015183820152602001620001c6565b5050505090500160405250505084808060006001600160a01b0316816001600160a01b0316141562000243576040805162461bcd60e51b8152602060048201526007602482015266061646d696e20360cc1b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091178155600355506200027490508462000354565b60005b8351811015620002ba57620002b08482815181106200029257fe5b60200260200101516005620003e960201b62000fe71790919060201c565b5060010162000277565b5060005b82518110156200030157620002f7838281518110620002d957fe5b60200260200101516007620003e960201b62000fe71790919060201c565b50600101620002be565b5060005b815181101562000348576200033e8282815181106200032057fe5b60200260200101516009620003e960201b62000fe71790919060201c565b5060010162000305565b50505050505062000476565b62000373816001600160a01b03166200040960201b620010051760201c565b620003c5576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000604482015290519081900360640190fd5b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e9955565b600062000400836001600160a01b0384166200040f565b90505b92915050565b3b151590565b60006200041d83836200045e565b620004555750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000403565b50600062000403565b60009081526001919091016020526040902054151590565b61160280620004866000396000f3fe6080604052600436106101125760003560e01c806375829def116100a5578063845bc11b11610074578063c1a49d2e11610059578063c1a49d2e146104c6578063ce56c45414610545578063f851a4401461057e57610119565b8063845bc11b1461040c578063a7c477971461048b57610119565b806375829def1461037c57806377f50f97146103af5780637acc8678146103c457806380644c70146103f757610119565b8063296f4120116100e1578063296f4120146102705780633ccdbb28146102f15780635c60da1b1461033457806373a71a501461034957610119565b80630cdc405d1461019e57806316b6934314610203578063249d39e914610218578063267822471461023f57610119565b3661011957005b6000610123610593565b6001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461017e576040519150601f19603f3d011682016040523d82523d6000602084013e610183565b606091505b505090506040513d6000823e81801561019a573d82f35b3d82fd5b3480156101aa57600080fd5b506101b36105b8565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101ef5781810151838201526020016101d7565b505050509050019250505060405180910390f35b34801561020f57600080fd5b506101b3610653565b34801561022457600080fd5b5061022d6106e9565b60408051918252519081900360200190f35b34801561024b57600080fd5b506102546106ef565b604080516001600160a01b039092168252519081900360200190f35b34801561027c57600080fd5b506102ef6004803603604081101561029357600080fd5b8101906020810181356401000000008111156102ae57600080fd5b8201836020820111156102c057600080fd5b803590602001918460208302840111640100000000831117156102e257600080fd5b91935091503515156106fe565b005b3480156102fd57600080fd5b506102ef6004803603606081101561031457600080fd5b506001600160a01b038135811691602081013591604090910135166107cf565b34801561034057600080fd5b50610254610593565b34801561035557600080fd5b506102ef6004803603602081101561036c57600080fd5b50356001600160a01b031661087e565b34801561038857600080fd5b506102ef6004803603602081101561039f57600080fd5b50356001600160a01b031661090a565b3480156103bb57600080fd5b506102ef610a1c565b3480156103d057600080fd5b506102ef600480360360208110156103e757600080fd5b50356001600160a01b0316610afb565b34801561040357600080fd5b506101b3610c55565b34801561041857600080fd5b506102ef6004803603604081101561042f57600080fd5b81019060208101813564010000000081111561044a57600080fd5b82018360208201111561045c57600080fd5b8035906020019184602083028401116401000000008311171561047e57600080fd5b9193509150351515610ceb565b34801561049757600080fd5b5061022d600480360360408110156104ae57600080fd5b506001600160a01b0381358116916020013516610db6565b3480156104d257600080fd5b506102ef600480360360408110156104e957600080fd5b81019060208101813564010000000081111561050457600080fd5b82018360208201111561051657600080fd5b8035906020019184602083028401116401000000008311171561053857600080fd5b9193509150351515610dd3565b34801561055157600080fd5b506102ef6004803603604081101561056857600080fd5b50803590602001356001600160a01b0316610e9e565b34801561058a57600080fd5b50610254610fd8565b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e995490565b606060006105c6600761100b565b90508067ffffffffffffffff811180156105df57600080fd5b50604051908082528060200260200182016040528015610609578160200160208202803683370190505b50915060005b8181101561064e57610622600782611016565b83828151811061062e57fe5b6001600160a01b039092166020928302919091019091015260010161060f565b505090565b60606000610661600561100b565b90508067ffffffffffffffff8111801561067a57600080fd5b506040519080825280602002602001820160405280156106a4578160200160208202803683370190505b50915060005b8181101561064e576106bd600582611016565b8382815181106106c957fe5b6001600160a01b03909216602092830291909101909101526001016106aa565b61271081565b6002546001600160a01b031681565b6001546001600160a01b0316331461074a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c95781156107905761078a84848381811061076a57fe5b905060200201356001600160a01b03166005610fe790919063ffffffff16565b506107c1565b6107bf84848381811061079f57fe5b905060200201356001600160a01b0316600561102290919063ffffffff16565b505b60010161074d565b50505050565b6001546001600160a01b0316331461081b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b61082f6001600160a01b0384168284611037565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6001546001600160a01b031633146108ca576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6108d3816110a3565b6040516001600160a01b038216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0390600090a250565b6001546001600160a01b03163314610956576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b0381166109b1576040805162461bcd60e51b815260206004820152600b60248201527f6e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a16002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610a7b576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600254600154604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600280546001805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03841617909155169055565b6001546001600160a01b03163314610b47576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b038116610ba2576040805162461bcd60e51b815260206004820152600760248201527f61646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600154604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606000610c63600961100b565b90508067ffffffffffffffff81118015610c7c57600080fd5b50604051908082528060200260200182016040528015610ca6578160200160208202803683370190505b50915060005b8181101561064e57610cbf600982611016565b838281518110610ccb57fe5b6001600160a01b0390921660209283029190910190910152600101610cac565b6001546001600160a01b03163314610d37576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610d7d57610d77848483818110610d5757fe5b905060200201356001600160a01b03166007610fe790919063ffffffff16565b50610dae565b610dac848483818110610d8c57fe5b905060200201356001600160a01b0316600761102290919063ffffffff16565b505b600101610d3a565b600460209081526000928352604080842090915290825290205481565b6001546001600160a01b03163314610e1f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610e6557610e5f848483818110610e3f57fe5b905060200201356001600160a01b03166009610fe790919063ffffffff16565b50610e96565b610e94848483818110610e7457fe5b905060200201356001600160a01b0316600961102290919063ffffffff16565b505b600101610e22565b6001546001600160a01b03163314610eea576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114610f35576040519150601f19603f3d011682016040523d82523d6000602084013e610f3a565b606091505b5050905080610f90576040805162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6001546001600160a01b031681565b6000610ffc836001600160a01b03841661112a565b90505b92915050565b3b151590565b6000610fff82611174565b6000610ffc8383611178565b6000610ffc836001600160a01b0384166111dc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905261109e9084906112a2565b505050565b6110b5816001600160a01b0316611005565b611106576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000604482015290519081900360640190fd5b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e9955565b60006111368383611353565b61116c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fff565b506000610fff565b5490565b815460009082106111ba5760405162461bcd60e51b81526004018080602001828103825260228152602001806115846022913960400191505060405180910390fd5b8260000182815481106111c957fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015611298578354600019808301919081019060009087908390811061120f57fe5b906000526020600020015490508087600001848154811061122c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061125c57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fff565b6000915050610fff565b60006112f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661136b9092919063ffffffff16565b80519091501561109e5780806020019051602081101561131657600080fd5b505161109e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115cc602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b606061137a8484600085611384565b90505b9392505050565b6060824710156113c55760405162461bcd60e51b81526004018080602001828103825260268152602001806115a66026913960400191505060405180910390fd5b6113ce85611005565b61141f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061145d5780518252601f19909201916020918201910161143e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114bf576040519150601f19603f3d011682016040523d82523d6000602084013e6114c4565b606091505b50915091506114d48282866114df565b979650505050505050565b606083156114ee57508161137d565b8251156114fe5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611548578181015183820152602001611530565b50505050905090810190601f1680156115755780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a000000000000000000000000a3e78ab6f120c730d6f3939c0dc6dcd0e3da7278000000000000000000000000379801fabaedfb07e43e4eb2e76199921f08858e00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a1738f8dd7c42cd4175ccdca79af89b3ec7b68e90000000000000000000000005250b8202aebca35328e2c217c687e894d70cd31000000000000000000000000168e4c3ac8d89b00958b6be6400b066f0347ddc900000000000000000000000000000000000000000000000000000000000000040000000000000000000000002fa1e7df142665320ca916afda9dfd9a97c9b986000000000000000000000000465661625b3b96b102a49e07e2eb31cc9f5ce58b00000000000000000000000060fc810ea972809d729fce0043b82a58766596ee000000000000000000000000f351dd5ec89e5ac6c9125262853c74e714c1d56a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000008c27abf05de1d4847c3924566c3cbafec6efb42a00000000000000000000000066f54006b47d1b381b5b933f2de9bf05a6b4eb40000000000000000000000000ae0505c0c30dc0ea077cdb4ed1b2bb894d9c6b650000000000000000000000002bcfcaa40395f4f38ad1afa8915bf11d9df8cf56Deployed Bytecode
0x6080604052600436106101125760003560e01c806375829def116100a5578063845bc11b11610074578063c1a49d2e11610059578063c1a49d2e146104c6578063ce56c45414610545578063f851a4401461057e57610119565b8063845bc11b1461040c578063a7c477971461048b57610119565b806375829def1461037c57806377f50f97146103af5780637acc8678146103c457806380644c70146103f757610119565b8063296f4120116100e1578063296f4120146102705780633ccdbb28146102f15780635c60da1b1461033457806373a71a501461034957610119565b80630cdc405d1461019e57806316b6934314610203578063249d39e914610218578063267822471461023f57610119565b3661011957005b6000610123610593565b6001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d806000811461017e576040519150601f19603f3d011682016040523d82523d6000602084013e610183565b606091505b505090506040513d6000823e81801561019a573d82f35b3d82fd5b3480156101aa57600080fd5b506101b36105b8565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101ef5781810151838201526020016101d7565b505050509050019250505060405180910390f35b34801561020f57600080fd5b506101b3610653565b34801561022457600080fd5b5061022d6106e9565b60408051918252519081900360200190f35b34801561024b57600080fd5b506102546106ef565b604080516001600160a01b039092168252519081900360200190f35b34801561027c57600080fd5b506102ef6004803603604081101561029357600080fd5b8101906020810181356401000000008111156102ae57600080fd5b8201836020820111156102c057600080fd5b803590602001918460208302840111640100000000831117156102e257600080fd5b91935091503515156106fe565b005b3480156102fd57600080fd5b506102ef6004803603606081101561031457600080fd5b506001600160a01b038135811691602081013591604090910135166107cf565b34801561034057600080fd5b50610254610593565b34801561035557600080fd5b506102ef6004803603602081101561036c57600080fd5b50356001600160a01b031661087e565b34801561038857600080fd5b506102ef6004803603602081101561039f57600080fd5b50356001600160a01b031661090a565b3480156103bb57600080fd5b506102ef610a1c565b3480156103d057600080fd5b506102ef600480360360208110156103e757600080fd5b50356001600160a01b0316610afb565b34801561040357600080fd5b506101b3610c55565b34801561041857600080fd5b506102ef6004803603604081101561042f57600080fd5b81019060208101813564010000000081111561044a57600080fd5b82018360208201111561045c57600080fd5b8035906020019184602083028401116401000000008311171561047e57600080fd5b9193509150351515610ceb565b34801561049757600080fd5b5061022d600480360360408110156104ae57600080fd5b506001600160a01b0381358116916020013516610db6565b3480156104d257600080fd5b506102ef600480360360408110156104e957600080fd5b81019060208101813564010000000081111561050457600080fd5b82018360208201111561051657600080fd5b8035906020019184602083028401116401000000008311171561053857600080fd5b9193509150351515610dd3565b34801561055157600080fd5b506102ef6004803603604081101561056857600080fd5b50803590602001356001600160a01b0316610e9e565b34801561058a57600080fd5b50610254610fd8565b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e995490565b606060006105c6600761100b565b90508067ffffffffffffffff811180156105df57600080fd5b50604051908082528060200260200182016040528015610609578160200160208202803683370190505b50915060005b8181101561064e57610622600782611016565b83828151811061062e57fe5b6001600160a01b039092166020928302919091019091015260010161060f565b505090565b60606000610661600561100b565b90508067ffffffffffffffff8111801561067a57600080fd5b506040519080825280602002602001820160405280156106a4578160200160208202803683370190505b50915060005b8181101561064e576106bd600582611016565b8382815181106106c957fe5b6001600160a01b03909216602092830291909101909101526001016106aa565b61271081565b6002546001600160a01b031681565b6001546001600160a01b0316331461074a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c95781156107905761078a84848381811061076a57fe5b905060200201356001600160a01b03166005610fe790919063ffffffff16565b506107c1565b6107bf84848381811061079f57fe5b905060200201356001600160a01b0316600561102290919063ffffffff16565b505b60010161074d565b50505050565b6001546001600160a01b0316331461081b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b61082f6001600160a01b0384168284611037565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6001546001600160a01b031633146108ca576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6108d3816110a3565b6040516001600160a01b038216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0390600090a250565b6001546001600160a01b03163314610956576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b0381166109b1576040805162461bcd60e51b815260206004820152600b60248201527f6e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a16002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610a7b576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600254600154604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600280546001805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03841617909155169055565b6001546001600160a01b03163314610b47576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b038116610ba2576040805162461bcd60e51b815260206004820152600760248201527f61646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600154604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606000610c63600961100b565b90508067ffffffffffffffff81118015610c7c57600080fd5b50604051908082528060200260200182016040528015610ca6578160200160208202803683370190505b50915060005b8181101561064e57610cbf600982611016565b838281518110610ccb57fe5b6001600160a01b0390921660209283029190910190910152600101610cac565b6001546001600160a01b03163314610d37576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610d7d57610d77848483818110610d5757fe5b905060200201356001600160a01b03166007610fe790919063ffffffff16565b50610dae565b610dac848483818110610d8c57fe5b905060200201356001600160a01b0316600761102290919063ffffffff16565b505b600101610d3a565b600460209081526000928352604080842090915290825290205481565b6001546001600160a01b03163314610e1f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b60005b828110156107c9578115610e6557610e5f848483818110610e3f57fe5b905060200201356001600160a01b03166009610fe790919063ffffffff16565b50610e96565b610e94848483818110610e7457fe5b905060200201356001600160a01b0316600961102290919063ffffffff16565b505b600101610e22565b6001546001600160a01b03163314610eea576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114610f35576040519150601f19603f3d011682016040523d82523d6000602084013e610f3a565b606091505b5050905080610f90576040805162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6001546001600160a01b031681565b6000610ffc836001600160a01b03841661112a565b90505b92915050565b3b151590565b6000610fff82611174565b6000610ffc8383611178565b6000610ffc836001600160a01b0384166111dc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905261109e9084906112a2565b505050565b6110b5816001600160a01b0316611005565b611106576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000604482015290519081900360640190fd5b7f7cf58d76330f82325c2a503c72b55abca3eb533fadde43d95e3c0cceb1583e9955565b60006111368383611353565b61116c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fff565b506000610fff565b5490565b815460009082106111ba5760405162461bcd60e51b81526004018080602001828103825260228152602001806115846022913960400191505060405180910390fd5b8260000182815481106111c957fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015611298578354600019808301919081019060009087908390811061120f57fe5b906000526020600020015490508087600001848154811061122c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061125c57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fff565b6000915050610fff565b60006112f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661136b9092919063ffffffff16565b80519091501561109e5780806020019051602081101561131657600080fd5b505161109e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115cc602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b606061137a8484600085611384565b90505b9392505050565b6060824710156113c55760405162461bcd60e51b81526004018080602001828103825260268152602001806115a66026913960400191505060405180910390fd5b6113ce85611005565b61141f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061145d5780518252601f19909201916020918201910161143e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114bf576040519150601f19603f3d011682016040523d82523d6000602084013e6114c4565b606091505b50915091506114d48282866114df565b979650505050505050565b606083156114ee57508161137d565b8251156114fe5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611548578181015183820152602001611530565b50505050905090810190601f1680156115755780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a3e78ab6f120c730d6f3939c0dc6dcd0e3da7278000000000000000000000000379801fabaedfb07e43e4eb2e76199921f08858e00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a1738f8dd7c42cd4175ccdca79af89b3ec7b68e90000000000000000000000005250b8202aebca35328e2c217c687e894d70cd31000000000000000000000000168e4c3ac8d89b00958b6be6400b066f0347ddc900000000000000000000000000000000000000000000000000000000000000040000000000000000000000002fa1e7df142665320ca916afda9dfd9a97c9b986000000000000000000000000465661625b3b96b102a49e07e2eb31cc9f5ce58b00000000000000000000000060fc810ea972809d729fce0043b82a58766596ee000000000000000000000000f351dd5ec89e5ac6c9125262853c74e714c1d56a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000008c27abf05de1d4847c3924566c3cbafec6efb42a00000000000000000000000066f54006b47d1b381b5b933f2de9bf05a6b4eb40000000000000000000000000ae0505c0c30dc0ea077cdb4ed1b2bb894d9c6b650000000000000000000000002bcfcaa40395f4f38ad1afa8915bf11d9df8cf56
-----Decoded View---------------
Arg [0] : _admin (address): 0xa3e78aB6f120C730D6F3939c0Dc6dcD0E3da7278
Arg [1] : _implementation (address): 0x379801fabAEDFB07e43e4Eb2E76199921f08858e
Arg [2] : _supportedPlatformWallets (address[]): 0xa1738F8DD7c42cd4175CcdCa79Af89b3EC7b68E9,0x5250b8202AEBca35328E2c217C687E894d70Cd31,0x168E4c3AC8d89B00958B6bE6400B066f0347DDc9
Arg [3] : _supportedSwaps (address[]): 0x2FA1e7dF142665320cA916AFDA9DFD9A97C9b986,0x465661625B3B96b102a49e07E2Eb31cC9F5cE58B,0x60fc810EA972809d729FCE0043B82a58766596ee,0xf351Dd5EC89e5ac6c9125262853c74E714C1d56a
Arg [4] : _supportedLendings (address[]): 0x8C27aBf05DE1d4847c3924566C3cBAFec6eFb42A,0x66f54006B47d1b381b5B933F2De9bf05a6B4Eb40,0xAE0505c0C30Dc0EA077cDB4Ed1B2BB894D9c6B65,0x2bcfCaA40395F4f38Ad1aFa8915BF11d9df8Cf56
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 000000000000000000000000a3e78ab6f120c730d6f3939c0dc6dcd0e3da7278
Arg [1] : 000000000000000000000000379801fabaedfb07e43e4eb2e76199921f08858e
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 000000000000000000000000a1738f8dd7c42cd4175ccdca79af89b3ec7b68e9
Arg [7] : 0000000000000000000000005250b8202aebca35328e2c217c687e894d70cd31
Arg [8] : 000000000000000000000000168e4c3ac8d89b00958b6be6400b066f0347ddc9
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [10] : 0000000000000000000000002fa1e7df142665320ca916afda9dfd9a97c9b986
Arg [11] : 000000000000000000000000465661625b3b96b102a49e07e2eb31cc9f5ce58b
Arg [12] : 00000000000000000000000060fc810ea972809d729fce0043b82a58766596ee
Arg [13] : 000000000000000000000000f351dd5ec89e5ac6c9125262853c74e714c1d56a
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [15] : 0000000000000000000000008c27abf05de1d4847c3924566c3cbafec6efb42a
Arg [16] : 00000000000000000000000066f54006b47d1b381b5b933f2de9bf05a6b4eb40
Arg [17] : 000000000000000000000000ae0505c0c30dc0ea077cdb4ed1b2bb894d9c6b65
Arg [18] : 0000000000000000000000002bcfcaa40395f4f38ad1afa8915bf11d9df8cf56Loading...LoadingLoading...LoadingABI for the implementation contract at 0x5583795ad3d58f4c00b499f83f6fed58389d2167, using the EIP-897 DelegateProxy concept.
Previously recorded to be on 0xfd5904626c103a9be91635df823b442f0b77ec88.Learn more about proxy contracts in our Knowledge Base
Loading...LoadingABI for the implementation contract at 0x5583795ad3d58f4c00b499f83f6fed58389d2167, using the EIP-897 DelegateProxy concept.
Previously recorded to be on 0xfd5904626c103a9be91635df823b442f0b77ec88.Learn more about proxy contracts in our Knowledge Base
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingOVERVIEW
Simplest Web3 Wallet for Everyone
Multichain Portfolio | 26 Chains
Chain Token Portfolio % Price Amount Value MATIC 16.43% $1 246.1435 $246.39 MATIC 15.53% $1 232.6756 $232.91 MATIC 14.51% $0.411609 528.8794 $217.69 MATIC 1.85% $2,518.11 0.011 $27.8 MATIC 0.30% $1 4.4695 $4.47 MATIC 0.20% $0.410595 7.4834 $3.07 MATIC 0.13% $1.11 1.7832 $1.98 MATIC 0.11% $0.035398 44.7178 $1.58 MATIC 0.10% $1.11 1.39 $1.54 MATIC 0.10% $10.65 0.1346 $1.43 MATIC 0.08% $1 1.1532 $1.15 MATIC 0.08% $0.000327 3,444.4839 $1.13 MATIC 0.07% $0.446128 2.2898 $1.02 MATIC 0.06% $0.887311 1.05 $0.9316 MATIC 0.06% $134.02 0.00621892 $0.8334 MATIC 0.05% $1.06 0.7016 $0.743 MATIC 0.05% $5.04 0.1467 $0.7393 MATIC 0.04% $0.000018 33,937.9047 $0.6031 MATIC 0.04% $58,942 0.0000095 $0.5599 MATIC 0.04% $0.252473 2.1316 $0.5381 MATIC 0.03% $0.160102 3.2734 $0.524 MATIC 0.03% $1.11 0.4622 $0.513 MATIC 0.03% $0.117209 3.9835 $0.4669 MATIC 0.03% $0.156091 2.6503 $0.4136 MATIC 0.03% $0.003392 120 $0.4069 MATIC 0.02% $0.000054 5,918.7036 $0.3173 MATIC 0.02% $0.001444 202.32 $0.292 MATIC 0.02% <$0.000001 26,406,148.6596 $0.2799 MATIC 0.02% $6.23 0.0441 $0.2746 MATIC 0.02% $0.01155 22.3704 $0.2583 MATIC 0.02% $0.148304 1.6954 $0.2514 MATIC 0.02% $0.276364 0.8726 $0.2411 MATIC 0.02% $5,114.63 0.00004678 $0.2392 MATIC 0.02% $0.000532 449.4778 $0.2391 MATIC 0.01% $2.59 0.0799 $0.207 MATIC <0.01% $0.12216 1.1458 $0.1399 MATIC <0.01% $0.265846 0.525 $0.1395 MATIC <0.01% $0.00398 25.7218 $0.1023 MATIC <0.01% $0.464265 0.2186 $0.1014 ETH Ether (ETH)20.77% $2,503.48 0.1244 $311.49 ETH 14.90% $1 223.4762 $223.48 ETH 0.54% $16.96 0.4751 $8.06 ETH 0.47% $0.00363 1,948.1818 $7.07 ETH 0.45% $2,503.48 0.00270952 $6.78 ETH 0.44% $2.45 2.7037 $6.62 ETH 0.41% $0.000088 69,457.0621 $6.13 ETH 0.37% $0.441108 12.417 $5.48 ETH 0.36% $0.900978 5.9927 $5.4 ETH 0.35% $0.992033 5.3118 $5.27 ETH 0.35% $0.407367 12.908 $5.26 ETH 0.34% $2,546.31 0.00200592 $5.11 ETH 0.29% $1 4.3209 $4.32 ETH 0.25% $0.987647 3.8267 $3.78 ETH 0.25% $5.18 0.7216 $3.74 ETH 0.22% $0.074162 44.7997 $3.32 ETH 0.21% $0.031072 103.0298 $3.2 ETH 0.20% $7.8 0.376 $2.93 ETH 0.19% $2.32 1.2444 $2.89 ETH 0.16% $0.008578 274.2857 $2.35 ETH 0.15% $1.18 1.9315 $2.28 ETH 0.15% $0.026679 82.4715 $2.2 ETH 0.15% $0.233268 9.3366 $2.18 ETH 0.14% $8.79 0.24 $2.11 ETH 0.13% $62.44 0.0321 $2 ETH 0.13% $0.236097 8 $1.89 ETH 0.12% $1.85 1 $1.85 ETH 0.11% $0.000391 4,029.6834 $1.58 ETH 0.10% $0.000001 1,683,495.8024 $1.57 ETH 0.10% $10.57 0.1458 $1.54 ETH 0.09% $0.023367 57.3226 $1.34 ETH 0.09% $0.274283 4.8397 $1.33 ETH 0.09% $275.24 0.00469083 $1.29 ETH 0.07% $3.08 0.3586 $1.1 ETH 0.07% $1 1.0685 $1.07 ETH 0.07% $0.121625 8.6475 $1.05 ETH 0.07% $0.102819 9.736 $1 ETH 0.07% $0.124764 8 $0.9981 ETH 0.07% $0.390935 2.5314 $0.9896 ETH 0.06% $0.376561 2.5677 $0.9669 ETH 0.06% $0.491621 1.8433 $0.9062 ETH 0.06% $0.009528 89.4118 $0.8518 ETH 0.05% $0.107101 7.588 $0.8126 ETH 0.05% $6.88 0.1172 $0.8064 ETH 0.05% $1.02 0.7905 $0.8039 ETH 0.05% $0.335281 2.3527 $0.7888 ETH 0.05% $0.031269 23.8306 $0.7451 ETH 0.05% $0.000103 7,230.32 $0.7429 ETH 0.05% $0.046891 15.6954 $0.7359 ETH 0.05% $0.000008 93,486.7444 $0.7039 ETH 0.05% $0.013709 49.8412 $0.6832 ETH 0.04% $0.000595 1,115.9575 $0.6637 ETH 0.04% $0.006231 101.718 $0.6337 ETH 0.04% $0.0258 24 $0.6191 ETH 0.04% $2,527.9 0.0002311 $0.5841 ETH 0.04% $0.291248 1.964 $0.572 ETH 0.04% $2,562.25 0.00021846 $0.5597 ETH 0.04% $15.83 0.0342 $0.542 ETH 0.03% <$0.000001 110,587,551 $0.5215 ETH 0.03% $0.065002 8 $0.52 ETH 0.03% $0.001419 357.6419 $0.5075 ETH 0.03% $0.041309 11.5584 $0.4774 ETH 0.03% $0.296273 1.6 $0.474 ETH 0.03% $0.614993 0.7691 $0.473 ETH 0.03% $532.52 0.00085 $0.4526 ETH 0.03% $0.688033 0.5839 $0.4017 ETH 0.03% $1,753 0.00021655 $0.3796 ETH 0.03% $0.000165 2,306.4867 $0.3796 ETH 0.02% $0.156449 2.3654 $0.37 ETH 0.02% <$0.000001 4,902,517.4894 $0.3638 ETH 0.02% $0.021146 16.9917 $0.3593 ETH 0.02% $0.139594 2.4 $0.335 ETH 0.02% $0.264096 1.2389 $0.3271 ETH 0.02% $0.009065 36.0145 $0.3264 ETH 0.02% $0.677882 0.4748 $0.3218 ETH 0.02% $0.003421 92.9796 $0.3181 ETH 0.02% $19.7 0.0159 $0.3136 ETH 0.02% <$0.000001 773,799.7286 $0.3023 ETH 0.02% $0.268386 1.0993 $0.295 ETH 0.02% $2,948.44 0.0001 $0.2948 ETH 0.02% $0.072171 3.9233 $0.2831 ETH 0.02% $0.021431 12.7196 $0.2725 ETH 0.02% $0.575859 0.4665 $0.2686 ETH 0.02% $0.143336 1.8452 $0.2644 ETH 0.02% $81.9 0.00304 $0.2489 ETH 0.02% $0.000014 18,241.6493 $0.248 ETH 0.02% $0.131676 1.8767 $0.2471 ETH 0.02% $0.001069 225.2024 $0.2406 ETH 0.02% $0.0631 3.793 $0.2393 ETH 0.02% $0.024061 9.9268 $0.2388 ETH 0.02% $0.5173 0.4536 $0.2346 ETH 0.01% $262.83 0.00084054 $0.2209 ETH 0.01% $0.072885 2.96 $0.2157 ETH 0.01% $0.002657 79.3349 $0.2108 ETH 0.01% $0.011334 17.5921 $0.1993 ETH 0.01% $0.005115 37.2 $0.1902 ETH 0.01% $0.006393 25.0847 $0.1603 ETH 0.01% $0.000001 314,775.8938 $0.1596 ETH 0.01% $37.54 0.0042 $0.1576 ETH 0.01% $0.026328 5.9141 $0.1557 ETH <0.01% $0.002482 59 $0.1464 ETH <0.01% $131.22 0.00109682 $0.1439 ETH <0.01% $0.000001 182,608.5005 $0.1374 ETH <0.01% $0.116637 1.175 $0.137 ETH <0.01% $0.006172 21.4472 $0.1323 ETH <0.01% $0.004016 31.7433 $0.1274 ETH <0.01% $0.018946 6.5225 $0.1235 ETH <0.01% $2.35 0.0518 $0.1216 ETH <0.01% $0.052727 2.2889 $0.1206 ETH <0.01% $0.467565 0.2524 $0.118 ETH <0.01% $0.995173 0.109 $0.1084 ETH <0.01% $0.007958 13.3302 $0.106 BSC 4.12% $532.5 0.116 $61.77 BSC 0.02% $0.000711 328.1551 $0.2332 BASE 0.33% $2,503.41 0.002 $5.01 FTM <0.01% $0.418421 0.1 $0.041842 GNO <0.01% $0.999943 0.0004 $0.0004 Loading...Loading[ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to 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
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.