Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
No gas? No problem. MetaMask Gas Station includes gas fees directly in your quote.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
100s of games, generous bonuses, 20+ years of trusted gaming. Join CryptoWins & start winning today!
Overview
ETH Balance
Eth Value
$242.01 (@ $3,385.94/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (>200)92.97956251 MAZZEMAZZE (MAZZE)$0.22@0.002453,600 TRXCTRONCLASSIC (TRXC)$0.01@0.000.00000081 aDAIAave Interes... (aDAI)$0.00@0.99940.35 ATHAethir Token (ATH)$0.02@0.066722.3542688 AMPAmp (AMP)$0.18@0.00829.92676953 ANKRAnkr Network (ANKR)$0.37@0.03680.25244788 ARCXArchitex (ARCX)$0.12@0.483436.01450322 ALIArtificial L... (ALI)$0.35@0.00971.87672232 AUDIOAudius (AUDIO)$0.31@0.16698.83974823 BXXBaanx (BXX)$0.35@0.03940.01436197 BADGERBadger (BADGER)$0.06@4.33180.3968 SPWNBitSpawn Tok... (SPWN)$0.01@0.000159 GUILDBlockchainSp... (GUILD)$0.11@0.001994,746.67497696 BOBOBOBO (BOBO)$0.08@0.00108,658.58460102 BTCBoost Trump ... (BTC)$0.01@0.000.8985451 BRETTBrett (BRETT)$0.02@0.02220.0008 BZRXbZx Protocol... (BZRX)$0.00@0.00360.42930768 CEEKCEEK (CEEK)$0.02@0.041317.59207315 CELRCelerToken (CELR)$0.40@0.02270.14577208 LINKChainLink To... (LINK)$3.20@21.935.9141415 CVPConcentrated... (CVP)$0.48@0.08090.07456592 CRUCRUST (CRU)$0.04@0.4881.6 DAODAO Maker (DAO)$0.58@0.36060.59372753 GENDAOstack (GEN)$0.00@0.001.23892166 MANADecentraland (MANA)$0.62@0.498637.20001197 TSUKADejitaru Tsu... (TSUKA)$0.25@0.00680.21710145 DIADIAToken (DIA)$0.16@0.74318 DMTRDimitra Toke... (DMTR)$0.59@0.0743274.28571424 DIVERDivergencePr... (DIVER)$2.81@0.010389.411768 DOMIDomi (DOMI)$1.57@0.017640,000 DRAGONXDragonX (DRAGON...)$0.23@0.005.99268382 DYDXdYdX (DYDX)$9.29@1.552.4 ENJEnjinCoin (ENJ)$0.55@0.229315.57489994 erowanerowan (erowan)$0.00@0.009.33664484 ENAEthena (ENA)$8.70@0.931740 BLUEEthereum Blu... (BLUE)$0.10@0.002525.01251705 XEDExeedme (XED)$0.52@0.02090.00200592 Renzo Restaked ETHezETH (Renzo ...)$6.98@3,482.151.93148298 FETFetch (FET)$2.61@1.350.2 FOXFOX (FOX)$0.01@0.059444.79968 GAMEGame Coin (GAME)$2.30@0.05134,500.067 GMEGameStop (GME)$1.24@0.00030.05178699 GFIGoldfinch (GFI)$0.08@1.5332.12734976 GRTGraph Token (GRT)$6.84@0.2131225.20241814 HEXHEX (HEX)$0.80@0.00360.0032 HTHuobiToken (HT)$0.00@1.19120.0042 ILVIlluvium (ILV)$0.17@41.0816.59524989 ITGRIntegral (ITGR)$0.09@0.00520.54909562 IOTXIoTeX Networ... (IOTX)$0.02@0.03959.2 JPEGJPEG’d Gover... (JPEG)$0.00@0.004.23325841 KARRATKarratCoin (KARRAT)$1.59@0.37452.36541589 KASKaspa (KAS)$0.28@0.117812.41698821 KNCKyberNetwork (KNC)$7.18@0.5781,115.95752153 LITHLithium (LITH)$0.37@0.00038 LRCLoopringCoin... (LRC)$1.67@0.20880.376 FOLDManifold Fin... (FOLD)$0.87@2.30360.10900754 OMMANTRA DAO (OM)$0.41@3.7249.84124714 PONDMarlin POND (POND)$1.35@0.02710.03423992 MLNMelon Token (MLN)$0.71@20.70480.000001 mETHmETH (mETH)$0.00@3,564.58117.03010258 NEIRONeiro (NEIRO)$4.90@0.04180.00304 OHMOHM V1 (OHM)$0.35@113.580.16731503 OMGOMG Network (OMG)$0.06@0.35134,029.68338854 OMIOMI Token (OMI)$1.59@0.00040.7691251 ONDOOndo (ONDO)$1.18@1.534 ORIONOrion Money ... (ORION)$0.00@0.00121.84334596 PALMPaLM AI (PALM)$1.56@0.84860.49826231 PATEXPatex Token (PATEX)$0.21@0.428493,486.74442676 PEPEPepe (PEPE)$1.76@0.0082.47151372 PKFPolkaFoundry (PKF)$2.24@0.02728 POLSPolkastarter... (POLS)$3.54@0.4430.27553515 PORTALPORTAL (PORTAL)$0.09@0.32621.1581 XPRProton (XPR)$0.03@0.00140.00000137 pBTCpTokens BTC (pBTC)$0.00@2,034.680.0002311 pufETHpufETH (pufETH)$0.80@3,467.700.03206912 QNTQuant (QNT)$3.64@113.380.7905328 RAERAE Token (RAE)$0.65@0.82071.41409179 RIORealio Netwo... (RIO)$1.37@0.96650.05366535 RNDRRender Token (RNDR)$0.38@7.120.318496 RENRepublic (REN)$0.01@0.03219.736 REQRequest (REQ)$1.28@0.13170.00001015 rETHRocket Pool ... (rETH)$0.04@3,795.080.06 ROUTERoute (ROUTE)$0.07@1.205.3117719 SAVMSatoshiVM (SAVM)$3.08@0.57910.3584 SENATESENATE (SENATE)$0.02@0.044518,241.64927966 SHIBSHIBA INU (SHIB)$0.41@0.0079.33493333 SIDUSSIDUS (SIDUS)$0.38@0.00480.45364219 AGIXSingularityN... (AGIX)$0.27@0.5852.30482751 SIPHERSipher Token (SIPHER)$0.41@0.17710.0159191 SSVSSV Token (SSV)$0.43@26.922.56772551 STRKStarknet Tok... (STRK)$1.24@0.483356,707.79442464 STARLStarLink (STARL)$0.06@0.000 stETHstETH (stETH)$0.00@3,382.4919.15964238 BERRYStrawberry A... (BERRY)$5.41@0.28230.01222944 STRNGRStronger (STRNGR)$0.01@0.70070.47483583 SUPERSuperVerse (SUPER)$0.74@1.560.46646031 SUSHISushiToken (SUSHI)$0.69@1.470.25 SISSymbiosis (SIS)$0.03@0.12740.0302296 SNXSynthetix Ne... (SNX)$0.06@2.1039.9992 TEMPTempus (TEMP)2,306.48666616 RUNIXTHE.RUNIX.TO... (RUNIX)$0.27@0.00010.03 THORTHORSwap Tok... (THOR)$0.00@0.144116.99168 TGTTHORWallet G... (TGT)$0.18@0.01071.2443904 UMAUMA Voting T... (UMA)$3.55@2.8523.83064948 UBTUniBright (UBT)$1.14@0.04791.09932856 UFTUniLend Fina... (UFT)$0.37@0.33710.3 USDeUSDe (USDe)$0.30@0.99724 USUALUSUAL (USUAL)$4.28@1.06882.53143602 VXVVectorspaceA... (VXV)$0.95@0.374425.084744 VRVictoria VR (VR)$0.31@0.012438.0783259 VOLTVOLT.WIN (VOLT)$0.23@0.0060.00002417 weETHWrapped eETH (weETH)$0.09@3,574.0211 wPOKTWrapped Pock... (wPOKT)$0.40@0.03590.00775081 wTAOWrapped TAO (wTAO)$3.63@467.783.1513223 USTCWrapped USTC... (USTC)$0.06@0.020512.71960373 XDXD Token (XD)$0.27@0.021410,911,415.5644607 XENXEN Crypto (XEN)$1.50@0.000.09061979 yCRVYearn CRV (yCRV)$0.06@0.608821.30115393 yPRISMAYearn PRISMA (yPRISM...)$0.80@0.03752.96 ZCXZEN Exchange... (ZCX)$0.37@0.12611.96401064 ZRXZRX (ZRX)$0.97@0.49290.00109682 AAVEAave Token (AAVE)$0.37@333.650.09806131 ARBArbitrum (ARB)$0.08@0.76970.009464 BATBAT (BAT)$0.00@0.24860.00085 BNBBNB (BNB)$0.62@725.44283.82666828 BUSDBUSD (BUSD)$3.82@0.99923.99467072 cDAICompound Dai (cDAI)$0.10@0.02414.83967638 CRVCurve DAO To... (CRV)$4.76@0.98360.00076867 KNCKyber Networ... (KNC)$0.00@0.57680.00021655 MKRMaker (MKR)$0.34@1,549.3312.90796143 MATICMatic Token (MATIC)$6.27@0.48550.0528 USDPPax Dollar (USDP)$0.05@0.99970.35857351 PENDLEPendle (PENDLE)$1.93@5.370.05953768 PAYTenXPay (PAY)$0.00@0.007184.9813 USDTTether USD (USDT)$84.82@0.998153.26818 USDCUSDC (USDC)$53.26@0.99980.00000423 WBTCWrapped BTC (WBTC)$0.40@94,594.000.01379883 WETHWrapped Ethe... (WETH)$46.72@3,385.45840.0001 wstETHWrapped liqu... (wstETH)$0.40@4,026.590.72156219 TONCOINWrapped TON ... (TONCOI...)$4.17@5.780.20976 1MIL1MILNFT$0.01@0.03954.79476244 AGVAstra Guild Ventures Token1.17504285 AXGTAxonDAO Governance Token$0.32@0.26981,700 BANCABANCA2.24176276 BEFIBefi Labs$0.06@0.0274357.64187677 BIAOBiaoqing$0.42@0.00124,845.21905 BonkBonk$0.16@0.0080,259.16428955 CLARKERC-20: Clar... (CLARK)25.44959456 KAIERC-20: Code... (KAI)31.74329591 COLONColon$0.01@0.00046,919.47297919 DaramERC-20: Dara... (Daram)196.63066776 DAZUERC-20: Dazu... (DAZU)11.167 DECTERC-20: DEC ... (DECT)0.31974441 DreamERC-20: Dece... (Dream)6.58931393 DSyncDestra Network$1.91@0.28997.27001486 DEFITDIGITAL FITNESS13.30389112 DNXCDinoX Coin$0.01@0.00070.00084054 LEASHDOGE KILLER$0.24@284.820.00014603 EEtheism110.96516659 WTFfees.wtf158.85114556 FIGHTFight to MAGA$0.43@0.0027800 FNXFinNexus351,193.92 FIONAERC-20: Fion... (FIONA)3,387.04271601 FOURFour$0.01@0.001,822.408 FWTFreewayToken0.00968 GameGame4,594.548 GECKYERC-20: Geck... (GECKY)346.5 TETHERHarryPotterObamaHomerSimpson888Inu13.33015183 HEARTHUMANS$0.42@0.031232,964.06923851 HYPERERC-20: Hype... (HYPER)3,887,417.94635168 HYPEERC-20: Hype... (HYPE)993.04954808 ISPIspolink Token$1.03@0.001110,587,551 KIZUNAKIZUNA$1.10@0.0017.16666667 LOTUSLOTUS7,230.31995546 MAGAMAGA$0.50@0.0001182,608.50048026 MAPEMAGA Pepe$0.08@0.0011.55838376 MTOMerchant Token$0.59@0.05131,822.408 FWTMigrationERC-20: migr... (FWTMig...)1,683,495.80235155 MogMog Coin$3.96@0.00159.23288416 燃ERC-20: Moya... (燃)57.32255826 MUBIMUBI$1.28@0.02230.11721697 OMNIOmni Network$1.01@8.6015.69540331 PAIDPAID Network8.24602432 PLEERC-20: Plet... (PLE)5.832 XPERC-20: Polk... (XP)5,556.88586553 PNDCPond Coin$0.00@0.003.74171556 RPGRangers Protocol Gas532,611.27917213 ROEERC-20: Rena... (ROE)3 Claim on: claim.renzo-ecosystem.comERC-20: Renz... (Claim ...)0.63134336 SMB SWAPSIMBCOIN SWAP$0.00@0.001223.844 MIHARUERC-20: Smil... (MIHARU)0.00002485 SQUIDERC-20: Squi... (SQUID)0.00021846 STONEStakeStone Ether$0.76@3,498.111,814,775.89382071 TITANXTITAN X$0.91@0.000 TOMItomi Token$0.00@0.017214.66408301 TPUERC-20: TPU (TPU)28.1448594 TRUFTruflation1 UPCUPCX$3.67@3.677.58800002 VALORValorToken$0.75@0.09940.3928 VPADERC-20: VLau... (VPAD)NFT Tokens (54)claim rewards on agixcoin.netagixcoin.netERC-1155claim rewards on clinknetwork.orgclinknetwork.orgERC-1155claim rewards on dydxnetwork.orgdydxnetwork.orgERC-1155ether-origin.comether-origin.comERC-1155claim rewards on fetchevent.netfetchevent.netERC-1155claim rewards on fetpool.orgfetpool.orgERC-1155claim rewards on getaave.orggetaave.orgERC-1155claim rewards on getquant.orggetquant.orgERC-1155claim rewards on grtprotocol.comgrtprotocol.comERC-1155claim rewards illuviumnetwork.netilluviumnetwork.netERC-1155claim rewards on jasmyprotocol.comjasmyprotocol.comERC-1155claim rewards on linkprize.iolinkprize.ioERC-1155claim rewards on ondonetwork.orgondonetwork.orgERC-1155claim rewards on ondopool.comondopool.comERC-1155claim rewards on poolstaked.compoolstaked.comERC-1155claim rewards qntnetwork.orgqntnetwork.orgERC-1155claim rewards on renderpool.orgrenderpool.orgERC-1155claim rewards on renderportal.netrenderportal.netERC-1155claim rewards riotoken.orgriotoken.orgERC-1155claim rewards on shibprotocol.comshibprotocol.comERC-1155claim rewards on snxtoken.comsnxtoken.comERC-1155Withdrawal NFT originethers.commWithdrawal NFT originethers.comERC-1155Withdrawal NFT pufether.orgWithdrawal NFT pufether.orgERC-1155claim rewards on wrappedbtc.netwrappedbtc.netERC-1155claim rewards on wsteth.comwsteth.comERC-1155ERC-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]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
- Cards New
- Info
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 5,410 transactions
Transaction Hash MethodBlockFromToSwap 21499619 2024-12-28 7:58:23 10 hrs ago 1735372703 IN 0 ETH$0.00 0.00089014 4.1470532 Swap 21498979 2024-12-28 5:49:47 12 hrs ago 1735364987 IN 0 ETH$0.00 0.00066298 3.16 Swap 21497685 2024-12-28 1:30:11 17 hrs ago 1735349411 IN 1 ETH$3,385.94 0.00069647 3.90698063 Swap 21497486 2024-12-28 0:50:11 17 hrs ago 1735347011 IN 0 ETH$0.00 0.00210903 4.95168626 Swap 21497445 2024-12-28 0:41:59 17 hrs ago 1735346519 IN 0 ETH$0.00 0.00185663 4.81811073 Swap 21497365 2024-12-28 0:25:59 18 hrs ago 1735345559 IN 0 ETH$0.00 0.00101717 4.86738336 Swap 21496512 2024-12-27 21:34:11 21 hrs ago 1735335251 IN 0 ETH$0.00 0.00163014 5.89058641 Swap 21495116 2024-12-27 16:53:47 25 hrs ago 1735318427 IN 0 ETH$0.00 0.00203423 10.06332854 Swap 21495111 2024-12-27 16:52:47 25 hrs ago 1735318367 IN 0 ETH$0.00 0.00190357 9.01565686 Swap 21494873 2024-12-27 16:04:47 26 hrs ago 1735315487 IN 0 ETH$0.00 0.00197604 9.81997309 Swap 21491808 2024-12-27 5:48:11 36 hrs ago 1735278491 IN 0 ETH$0.00 0.00138954 4.88606686 Swap 21490230 2024-12-27 0:30:47 42 hrs ago 1735259447 IN 0 ETH$0.00 0.00113177 6.29652666 Swap 21489483 2024-12-26 22:00:11 44 hrs ago 1735250411 IN 0.035 ETH$118.51 0.0011557 5.96789505 Swap 21488484 2024-12-26 18:38:59 47 hrs ago 1735238339 IN 0 ETH$0.00 0.00207896 10.04446245 Swap 21488448 2024-12-26 18:31:47 2 days ago 1735237907 IN 0 ETH$0.00 0.00433694 13.42475698 Swap 21486983 2024-12-26 13:37:35 2 days ago 1735220255 IN 0.004 ETH$13.54 0.00159606 7.40434898 Swap 21486976 2024-12-26 13:36:11 2 days ago 1735220171 IN 0.005 ETH$16.93 0.00171459 7.39293955 Swap 21486933 2024-12-26 13:27:35 2 days ago 1735219655 IN 0 ETH$0.00 0.00271697 7.28513459 Swap 21485947 2024-12-26 10:09:11 2 days ago 1735207751 IN 0 ETH$0.00 0.00151868 7.22238746 Swap 21485886 2024-12-26 9:56:47 2 days ago 1735207007 IN 0.002 ETH$6.77 0.00119 6.50366923 Swap 21485293 2024-12-26 7:57:59 2 days ago 1735199879 IN 0 ETH$0.00 0.00172019 6.00244829 Swap 21485291 2024-12-26 7:57:35 2 days ago 1735199855 IN 0 ETH$0.00 0.0025609 6.21472464 Swap 21485274 2024-12-26 7:54:11 2 days ago 1735199651 IN 0 ETH$0.00 0.00169351 5.65472785 Swap 21484141 2024-12-26 4:05:59 2 days ago 1735185959 IN 0 ETH$0.00 0.00202054 5.15075302 Swap 21483725 2024-12-26 2:42:11 2 days ago 1735180931 IN 0 ETH$0.00 0.00242128 4.7136732 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block FromTo21499619 2024-12-28 7:58:23 10 hrs ago 1735372703 0.00690138 ETH$23.37 21499619 2024-12-28 7:58:23 10 hrs ago 1735372703 0.00690829 ETH$23.39 21498979 2024-12-28 5:49:47 12 hrs ago 1735364987 0.02975323 ETH$100.74 21498979 2024-12-28 5:49:47 12 hrs ago 1735364987 0.02978301 ETH$100.84 21497685 2024-12-28 1:30:11 17 hrs ago 1735349411 0.999 ETH$3,382.55 21495116 2024-12-27 16:53:47 25 hrs ago 1735318427 0.136074 ETH$460.74 21495116 2024-12-27 16:53:47 25 hrs ago 1735318427 0.13621021 ETH$461.20 21495111 2024-12-27 16:52:47 25 hrs ago 1735318367 0.06302184 ETH$213.39 21495111 2024-12-27 16:52:47 25 hrs ago 1735318367 0.06308492 ETH$213.60 21494873 2024-12-27 16:04:47 26 hrs ago 1735315487 0.01022096 ETH$34.61 21494873 2024-12-27 16:04:47 26 hrs ago 1735315487 0.01023119 ETH$34.64 21489483 2024-12-26 22:00:11 44 hrs ago 1735250411 0.034965 ETH$118.39 21488484 2024-12-26 18:38:59 47 hrs ago 1735238339 0.39853217 ETH$1,349.41 21488484 2024-12-26 18:38:59 47 hrs ago 1735238339 0.3989311 ETH$1,350.76 21488448 2024-12-26 18:31:47 2 days ago 1735237907 0.03453201 ETH$116.92 21488448 2024-12-26 18:31:47 2 days ago 1735237907 0.03456657 ETH$117.04 21486983 2024-12-26 13:37:35 2 days ago 1735220255 0.003996 ETH$13.53 21486976 2024-12-26 13:36:11 2 days ago 1735220171 0.004995 ETH$16.91 21485947 2024-12-26 10:09:11 2 days ago 1735207751 0.00852286 ETH$28.86 21485947 2024-12-26 10:09:11 2 days ago 1735207751 0.00853139 ETH$28.89 21485886 2024-12-26 9:56:47 2 days ago 1735207007 0.001998 ETH$6.77 21483343 2024-12-26 1:24:59 2 days ago 1735176299 0.00098901 ETH$3.35 21482221 2024-12-25 21:38:35 2 days ago 1735162715 0.000999 ETH$3.38 21477727 2024-12-25 6:34:11 3 days ago 1735108451 0.02243567 ETH$75.97 21477727 2024-12-25 6:34:11 3 days ago 1735108451 0.02245813 ETH$76.04 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...LoadingLoading...LoadingOVERVIEW
Simplest Web3 Wallet for Everyone
Multichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ETH Ether (ETH)29.52% $3,385.46 0.0715 $241.98 ETH 10.35% $0.998103 84.9813 $84.82 ETH 6.50% $0.999838 53.2682 $53.26 ETH 5.70% $3,385.46 0.0138 $46.72 ETH 1.13% $1.55 5.9927 $9.29 ETH 1.06% $0.931697 9.3366 $8.7 ETH 0.88% $0.578014 12.417 $7.18 ETH 0.85% $3,482.15 0.00200592 $6.98 ETH 0.84% $0.213052 32.1273 $6.84 ETH 0.76% $0.485535 12.908 $6.27 ETH 0.66% $0.282332 19.1596 $5.41 ETH 0.60% $0.041828 117.0301 $4.9 ETH 0.58% $0.983602 4.8397 $4.76 ETH 0.52% $1.07 4 $4.28 ETH 0.51% $5.78 0.7216 $4.17 ETH 0.51% $0.479885 8.6475 $4.15 ETH 0.48% $0.000002 1,683,495.8024 $3.96 ETH 0.47% $0.9992 3.8267 $3.82 ETH 0.45% $3.67 1 $3.67 ETH 0.44% $113.38 0.0321 $3.64 ETH 0.44% $467.78 0.00775081 $3.63 ETH 0.43% $2.85 1.2444 $3.55 ETH 0.43% $0.442956 8 $3.54 ETH 0.39% $21.93 0.1458 $3.2 ETH 0.38% $0.579104 5.3118 $3.08 ETH 0.34% $0.010253 274.2857 $2.81 ETH 0.32% $1.35 1.9315 $2.61 ETH 0.30% $10.23 0.24 $2.46 ETH 0.28% $0.051321 44.7997 $2.3 ETH 0.27% $0.027187 82.4715 $2.24 ETH 0.23% $5.37 0.3586 $1.93 ETH 0.23% $0.289919 6.5893 $1.91 ETH 0.22% $0.000019 93,486.7444 $1.76 ETH 0.20% $0.208823 8 $1.67 ETH 0.19% $0.000394 4,029.6834 $1.59 ETH 0.19% $0.374538 4.2333 $1.59 ETH 0.19% $0.017566 89.4118 $1.57 ETH 0.19% $0.848644 1.8433 $1.56 ETH 0.19% $0.005406 288.1894 $1.56 ETH 0.18% <$0.000001 10,911,415.5645 $1.5 ETH 0.17% $0.966487 1.4141 $1.37 ETH 0.16% $0.027123 49.8412 $1.35 ETH 0.16% $0.131673 9.736 $1.28 ETH 0.16% $0.022315 57.3226 $1.28 ETH 0.15% $0.48327 2.5677 $1.24 ETH 0.15% $0.000276 4,500.067 $1.24 ETH 0.14% $1.53 0.7691 $1.18 ETH 0.14% $0.04794 23.8306 $1.14 ETH 0.13% <$0.000001 110,587,551 $1.1 ETH 0.13% $0.001034 993.0495 $1.03 ETH 0.12% $8.6 0.1172 $1.01 ETH 0.12% $0.000001 1,674,835.2431 $0.9922 ETH 0.12% $0.040537 24 $0.9728 ETH 0.12% $0.492931 1.964 $0.9681 ETH 0.12% $0.374415 2.5314 $0.9478 ETH 0.11% $0.000001 1,814,775.8938 $0.9118 ETH 0.11% $2.3 0.376 $0.8661 ETH 0.10% $3,467.7 0.0002311 $0.8013 ETH 0.10% $0.003555 225.2024 $0.8005 ETH 0.10% $0.037517 21.3012 $0.7991 ETH 0.09% $3,498.11 0.00021846 $0.7641 ETH 0.09% $0.099359 7.588 $0.7539 ETH 0.09% $1.56 0.4748 $0.7407 ETH 0.09% $20.7 0.0342 $0.7089 ETH 0.08% $1.47 0.4665 $0.6856 ETH 0.08% $0.820652 0.7905 $0.6487 ETH 0.08% $0.498552 1.2389 $0.6176 ETH 0.08% $725.44 0.00085 $0.6166 ETH 0.07% $0.074272 8 $0.5941 ETH 0.07% $0.051311 11.5584 $0.593 ETH 0.07% $0.360552 1.6 $0.5768 ETH 0.07% $0.146594 3.9233 $0.5751 ETH 0.07% $0.229326 2.4 $0.5503 ETH 0.06% $0.020879 25.0125 $0.5222 ETH 0.06% $0.034721 14.2995 $0.4964 ETH 0.06% $0.000069 7,230.32 $0.4963 ETH 0.06% $0.080906 5.9141 $0.4784 ETH 0.06% $0.253167 1.854 $0.4693 ETH 0.05% $0.002705 158.8511 $0.4297 ETH 0.05% $26.92 0.0159 $0.4285 ETH 0.05% $0.001163 357.6419 $0.416 ETH 0.05% $0.031163 13.3302 $0.4154 ETH 0.05% $0.177068 2.3048 $0.4081 ETH 0.05% $3.72 0.109 $0.4055 ETH 0.05% $0.000022 18,241.6493 $0.4051 ETH 0.05% $4,026.59 0.0001 $0.4026 ETH 0.05% $94,594 0.00000423 $0.4001 ETH 0.05% $0.022683 17.5921 $0.399 ETH 0.05% $0.035922 11 $0.3951 ETH 0.05% $0.004819 79.3349 $0.3823 ETH 0.05% $7.12 0.0537 $0.382 ETH 0.05% $0.126053 2.96 $0.3731 ETH 0.05% $0.000333 1,115.9575 $0.371 ETH 0.05% $0.337124 1.0993 $0.3706 ETH 0.04% $333.65 0.00109682 $0.3659 ETH 0.04% $0.036819 9.9268 $0.3654 ETH 0.04% $0.009691 36.0145 $0.349 ETH 0.04% $0.039351 8.8397 $0.3478 ETH 0.04% $113.58 0.00304 $0.3452 ETH 0.04% $1,549.33 0.00021655 $0.3355 ETH 0.04% $0.269794 1.175 $0.317 ETH 0.04% $0.166875 1.8767 $0.3131 ETH 0.04% $0.012409 25.0847 $0.3112 ETH 0.04% $0.997196 0.3 $0.2991 ETH 0.03% $0.117827 2.3654 $0.2787 ETH 0.03% $0.021431 12.7196 $0.2725 ETH 0.03% $0.000117 2,306.4867 $0.2705 ETH 0.03% $0.584967 0.4536 $0.2653 ETH 0.03% $0.006804 37.2 $0.2531 ETH 0.03% $284.82 0.00084054 $0.2394 ETH 0.03% $0.000006 40,000 $0.2332 ETH 0.03% $0.06058 3.793 $0.2297 ETH 0.03% $0.00596 38.0783 $0.2269 ETH 0.03% $0.002379 92.9796 $0.2211 ETH 0.03% $0.428444 0.4983 $0.2134 ETH 0.02% $0.008217 22.3543 $0.1836 ETH 0.02% $0.010657 16.9917 $0.181 ETH 0.02% $41.08 0.0042 $0.1725 ETH 0.02% $0.074372 2.2889 $0.1702 ETH 0.02% $0.743062 0.2171 $0.1613 ETH 0.02% $0.000033 4,845.2191 $0.1599 ETH 0.01% $0.483393 0.2524 $0.122 ETH 0.01% $0.001873 59 $0.1104 POL 4.20% $0.484752 71.0387 $34.44 POL 1.87% $0.998598 15.3761 $15.35 POL 1.20% $1 9.7983 $9.81 POL 1.03% $194.15 0.0437 $8.48 POL 0.97% $3,386.98 0.00235432 $7.97 POL 0.49% $1 3.9862 $3.99 POL 0.44% $0.983251 3.706 $3.64 POL 0.38% $94,741 0.00003261 $3.09 POL 0.32% $21.94 0.1208 $2.65 POL 0.31% $3.73 0.6707 $2.5 POL 0.24% $0.044372 44.851 $1.99 POL 0.23% $1.04 1.7832 $1.85 POL 0.18% $1.08 1.39 $1.5 POL 0.17% $0.989735 1.4174 $1.4 POL 0.16% $0.000228 5,918.7036 $1.35 POL 0.16% $2,647.21 0.0005 $1.32 POL 0.16% $0.577712 2.2898 $1.32 POL 0.16% $1.84 0.7163 $1.32 POL 0.15% $0.565869 2.1422 $1.21 POL 0.14% $0.001831 644.8875 $1.18 POL 0.14% $0.00542 217.29 $1.18 POL 0.14% $0.000033 35,396.7517 $1.17 POL 0.14% $7.13 0.1567 $1.12 POL 0.13% $1 1.067 $1.07 POL 0.11% $0.187361 4.9333 $0.9243 POL 0.11% $337.17 0.00260705 $0.879 POL 0.10% $0.485038 1.6945 $0.8218 POL 0.10% $0.00023 3,444.4839 $0.7919 POL 0.08% $0.189494 3.2734 $0.6202 POL 0.07% $13.38 0.0446 $0.5961 POL 0.07% $0.248383 2.3241 $0.5772 POL 0.06% $0.195126 2.667 $0.5204 POL 0.06% $1.04 0.4633 $0.4823 POL 0.05% $8,752.9 0.00004954 $0.4336 POL 0.05% $0.003531 120.0403 $0.4238 POL 0.05% $0.000709 523.1095 $0.3707 POL 0.04% $367.85 0.0009915 $0.3647 POL 0.04% <$0.000001 26,458,728.8268 $0.3175 POL 0.03% $0.006514 43.0069 $0.2801 POL 0.03% $3.32 0.0799 $0.2653 POL 0.03% $0.499382 0.525 $0.2621 POL 0.03% $0.008701 25.2871 $0.22 POL 0.02% $0.005016 25.7218 $0.129 POL 0.02% $0.003547 35.9697 $0.1275 POL 0.01% $0.55581 0.2186 $0.1215 POL 0.01% $94,716 0.00000128 $0.1211 BSC 10.25% $724.09 0.116 $83.99 BSC 0.02% $0.000593 328.1551 $0.1944 BASE 0.83% $3,385.11 0.002 $6.77 BASE 0.17% $0.090156 15.695 $1.41 FTM <0.01% $0.800586 0.1 $0.080059 GNO <0.01% $0.999795 0.0004 $0.0004 Loading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
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.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.