Help
RSS
API
Feed
Maltego
Contact
Domain > admin.starmannft.io
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2022-04-06
108.156.91.127
(
ClassC
)
2024-10-16
52.222.201.77
(
ClassC
)
2026-02-06
3.169.173.107
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Fri, 06 Feb 2026 09:53:01 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://admin.starmannft.io/X-Cache: Redirect from cloudfrontVia: 1.1 e765e4220a4552156eaeff06c1304e0c.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4X-Amz-Cf-Id: l51lygsZHU5HsEXXzqJROdfGZTEba0sO1M_t6cfhavomfbn6xZYpcw html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 81245Connection: keep-aliveDate: Fri, 06 Feb 2026 09:53:03 GMTLast-Modified: Sat, 09 Apr 2022 18:43:03 GMTETag: f58b2a3e583c92f09b50aa891f42fef4Accept-Ranges: bytesServer: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 6a31d7747628574e9fa26dd40efa100a.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4X-Amz-Cf-Id: BhjZHEoNTjTebHa6hC71ntCgVyny_SihmLbbJijwJtptvOYj4D5NwA !DOCTYPE html>html langen>head> script> var backendBase https://zgc10qe3z3.execute-api.us-west-2.amazonaws.com var allowedNetwork main var store window.localStorage var userJson store.getItem(user) var user JSON.parse(userJson) if (!user || !user.token) { window.location.href login.html } store.setItem(target, index.html) var logout function(event) { event && event.preventDefault() store.removeItem(user) window.location.href login.html }; /script> meta charsetutf-8> meta http-equivX-UA-Compatible contentIEedge> meta nameviewport contentwidthdevice-width, initial-scale1, shrink-to-fitno> meta namedescription content> meta nameauthor content> title>Admin - Dashboard/title> link relshortcut icon hreffavicon.png> !-- Custom fonts for this template--> link hrefvendor/fontawesome-free/css/all.min.css relstylesheet typetext/css> link hrefhttps://fonts.googleapis.com/css?familyNunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i relstylesheet> !-- Custom styles for this template--> link hrefcss/sb-admin-2.min.css relstylesheet> style> .board-title span { color: #4e73df; font-size: .9rem; } .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; } .only-owner { display: none } /style>/head>body idpage-top> !-- Page Wrapper --> div idwrapper> !-- Sidebar --> ul classnavbar-nav bg-gradient-primary sidebar sidebar-dark accordion idaccordionSidebar> !-- Sidebar - Brand --> a classsidebar-brand d-flex align-items-center justify-content-center href/> div classsidebar-brand-icon rotate-n-15> i classfas fa-cogs>/i> /div> div classsidebar-brand-text mx-3>/div> /a> !-- Divider --> hr classsidebar-divider my-0> !-- Nav Item - Dashboard --> li classnav-item active> a classnav-link hrefindex.html> i classfas fa-fw fa-tachometer-alt>/i> span>Dashboard/span>/a> /li> !-- Divider --> hr classsidebar-divider> !-- Heading --> div classsidebar-heading> Tools /div> !-- Nav Item - Pages Collapse Menu --> li classnav-item> a classnav-link collapsed hrefusers.html> i classfas fa-fw fa-users>/i> span>Users/span> /a> /li> !-- Nav Item - Pages Collapse Menu --> li classnav-item> a classnav-link collapsed hrefwallets.html> i classfas fa-fw fa-wallet>/i> span>Wallets/span> /a> /li> !-- Nav Item - Utilities Collapse Menu --> li classnav-item> a classnav-link collapsed hreftransactions.html> i classfas fa-fw fa-credit-card>/i> span>Transactions/span> /a> /li> !-- Sidebar Toggler (Sidebar) --> div classtext-center d-none d-md-inline> button classrounded-circle border-0 idsidebarToggle>/button> /div> /ul> !-- End of Sidebar --> !-- Content Wrapper --> div idcontent-wrapper classd-flex flex-column> !-- Main Content --> div idcontent> !-- Topbar --> nav classnavbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow> !-- Sidebar Toggle (Topbar) --> button idsidebarToggleTop classbtn btn-link d-md-none rounded-circle mr-3> i classfa fa-bars>/i> /button> !-- Topbar Navbar --> ul classnavbar-nav ml-auto> !-- Nav Item - Search Dropdown (Visible Only XS) --> li classnav-item dropdown no-arrow d-sm-none> a classnav-link dropdown-toggle href# idsearchDropdown rolebutton data-toggledropdown aria-haspopuptrue aria-expandedfalse> i classfas fa-search fa-fw>/i> /a> !-- Dropdown - Messages --> div classdropdown-menu dropdown-menu-right p-3 shadow animated--grow-in aria-labelledbysearchDropdown> form classform-inline mr-auto w-100 navbar-search> div classinput-group> input typetext classform-control bg-light border-0 small placeholderSearch for... aria-labelSearch aria-describedbybasic-addon2> div classinput-group-append> button classbtn btn-primary typebutton> i classfas fa-search fa-sm>/i> /button> /div> /div> /form> /div> /li> div classtopbar-divider d-none d-sm-block>/div> !-- Nav Item - User Information --> li classnav-item dropdown no-arrow> a classnav-link dropdown-toggle href# iduserDropdown rolebutton data-toggledropdown aria-haspopuptrue aria-expandedfalse> span classmr-2 d-none d-lg-inline text-gray-600 small iddisplay-username>Admin Istrator/span> img classimg-profile rounded-circle srcimg/undraw_profile.svg> /a> !-- Dropdown - User Information --> div classdropdown-menu dropdown-menu-right shadow animated--grow-in aria-labelledbyuserDropdown> a classdropdown-item href#> i classfas fa-user fa-sm fa-fw mr-2 text-gray-400>/i> Profile /a> div classdropdown-divider>/div> a classdropdown-item href# data-togglemodal data-target#logout-modal> i classfas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400>/i> Logout /a> /div> /li> /ul> /nav> !-- End of Topbar --> !-- Begin Page Content --> div classcontainer-fluid> !-- Page Heading --> div classd-sm-flex align-items-center justify-content-between mb-1> h1 classh3 mb-0 text-gray-800>Dashboard/h1> div classalign-items-center justify-content-between> div idboard-minting-toggle onclickApp.updateMinting(event) classbtn btn-secondary btn-icon-split> span classicon text-white-50> i classfas fa-spinner fa-spin>/i> /span> span classtext>Loading.../span> /div> div idboard-whitelisted-toggle onclickApp.updateWhitelisting(event) classbtn btn-secondary btn-icon-split> span classicon text-white-50> i classfas fa-spinner fa-spin>/i> /span> span classtext>Loading.../span> /div> /div> /div> div classd-sm-flex align-items-center justify-content-between mb-4> h6 classh6 mb-0 text-gray-800 board-title>/h6> /div> !-- Notifications --> div idnotification-panel classtoast styleposition: absolute; top: 0; right: 7em; z-index: 1055> div classtoast-header> i idnotification-title-icon classmr-2 fas fa-fw fa-info>/i> div idnotification-title classmr-auto text-md-center text-success text-uppercase> Success /div> button typebutton classml-2 mb-1 close data-dismisstoast aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classtoast-body idnotification-message> Hello, world! This is a toast message. /div> /div> !-- Content Row --> div classrow> !-- Stage --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-success shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-success text-uppercase mb-1> Stage/div> div classh5 mb-0 font-weight-bold text-gray-800 board-stage>/div> /div> div classcol-auto> i classfas fa-anchor fa-2x text-gray-300>/i> /div> /div> /div> /div> /div> !-- Total Minted Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-primary shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-primary text-uppercase mb-1> Total Minted/div> div classh5 mb-0 font-weight-bold text-gray-800 board-total-minted>/div> /div> div classcol-auto> i classfas fa-receipt fa-2x text-gray-300>/i> /div> /div> /div> /div> /div> !-- Sold Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-info shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-info text-uppercase mb-1>Sold /div> div classrow no-gutters align-items-center> div classcol-auto> div classh5 mb-0 mr-3 font-weight-bold text-gray-800 board-sold>/div> /div> div classcol> div classprogress progress-sm mr-2> div classprogress-bar bg-info board-sold-gauge roleprogressbar stylewidth: 0% aria-valuemin0 aria-valuemax100>/div> /div> /div> /div> /div> div classcol-auto> i classfas fa-percent fa-2x text-gray-300>/i> /div> /div> /div> /div> /div> !-- Earnings Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-success shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-success text-uppercase mb-1> Earnings/div> div classh5 mb-0 font-weight-bold text-gray-800 board-earnings>/div> /div> div classcol-auto> i classfas fa-dollar-sign fa-2x text-gray-300>/i> /div> /div> /div> /div> /div> !-- Contract Balance --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-danger shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-danger text-uppercase mb-1> Contract Balance/div> div classh5 mb-0 font-weight-bold text-gray-800 board-contract-balance>/div> /div> div classcol-auto> i classfas fa-funnel-dollar fa-2x text-gray-300>/i> /div> /div> /div> /div> /div> !-- Owner Balance Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-primary shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-primary text-uppercase mb-1> Owner Balance/div> div classh5 mb-0 font-weight-bold text-gray-800 board-owner-balance>/div> /div> div classcol-auto> i classfas fa-wallet fa-2x text-gray-300>/i> /div> /div> /div> /div> /div> /div> div classrow> !-- Control Panel --> div classcol-xl-12 col-md-12 mb-4> div classcard shadow mb-4> div classcard-header py-3 d-flex flex-row align-items-center justify-content-between> h6 classm-0 font-weight-bold text-primary>Control Panel/h6> div classdropdown no-arrow only-owner> a classdropdown-toggle href# rolebutton iddropdownMenuLink data-toggledropdown aria-haspopuptrue aria-expandedfalse> i classfas fa-ellipsis-v fa-sm fa-fw text-gray-400>/i> /a> div classdropdown-menu dropdown-menu-right shadow animated--fade-in aria-labelledbydropdownMenuLink> div classdropdown-header>Additional Options:/div> a classdropdown-item href# data-togglemodal onclickApp.updateEditMultipleModal(event) data-target#edit-multiple-modal>Edit multiple/a> /div> /div> /div> div classcard-body> div classrow> !-- Holding Max Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-primary shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-primary text-uppercase mb-1> Holding Limit/div> div classh5 mb-0 font-weight-bold text-gray-800 board-holding-limit>/div> /div> div classcol-auto> div idboard-holding-limit-update data-togglemodal data-target#holding-limit-modal classbtn btn-sm btn-icon-split btn-warning only-owner> span classtext>Update/span> /div> /div> /div> /div> /div> /div> !-- Total Supply --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-danger shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-danger text-uppercase mb-1> Total Supply/div> div classh5 mb-0 font-weight-bold text-gray-800 board-total-supply>/div> /div> div classcol-auto> !-- div idboard-total-supply-update data-togglemodal data-target#total-supply-modal classbtn btn-sm btn-icon-split btn-warning only-owner> span classtext>Update/span> /div> --> /div> /div> /div> /div> /div> !-- Minting Max --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-info shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-info text-uppercase mb-1> Minting Max/div> div classh5 mb-0 font-weight-bold text-gray-800 board-minting-max>/div> /div> div classcol-auto> div idboard-minting-max data-togglemodal data-target#minting-max-modal classbtn btn-sm btn-icon-split btn-warning only-owner> span classtext>Update/span> /div> /div> /div> /div> /div> /div> !-- Token price Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-warning shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-warning text-uppercase mb-1 board-token-price-title> price/div> div classh5 mb-0 font-weight-bold text-gray-800 board-token-price>/div> /div> div classcol-auto> div idboard-minting-price data-togglemodal data-target#minting-price-modal classbtn btn-sm btn-icon-split btn-warning only-owner> span classtext>Update/span> /div> /div> /div> /div> /div> /div> !-- Mint By Owner Card --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-warning shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-warning text-uppercase mb-1 board-mint-only-owner-title> Airdrop Token/div> div classh5 mb-0 font-weight-bold text-gray-800 board-mint-only-owner>/div> /div> div classcol-auto> div idboard-mint-only-owner data-togglemodal data-target#mint-only-owner-modal classbtn btn-sm btn-icon-split btn-warning only-owner> span classtext>Airdrop/span> /div> /div> /div> /div> /div> /div> !-- Withdraw ETH withdrawETH --> div classcol-xl-3 col-md-6 mb-4> div classcard border-left-warning shadow h-100 py-2> div classcard-body> div classrow no-gutters align-items-center> div classcol mr-2> div classtext-xs font-weight-bold text-warning text-uppercase mb-1 board-mint-only-owner-title> Withdraw ETH /div> div classh5 mb-0 font-weight-bold text-gray-800 board-mint-only-owner>/div> /div> div classcol-auto> div idboard-withdraw-eth data-togglemodal data-target#withdraw-eth-modal classbtn btn-sm btn-icon-split btn-warning only-owner> span classtext>Withdraw/span> /div> /div> /div> /div> /div> /div> /div> /div> /div> /div> /div> div classrow> !-- Contract Details Card --> div classcol-xl-12 col-md-12 mb-4> div classcard shadow mb-4> div classcard-header py-3> h6 classm-0 font-weight-bold text-dark>Contract Details/h6> /div> div classcard-body> table classtable table-bordered> tr> td>Owner/td> td classboard-owner>/td> td> /td> /tr> tr> td>Base URI/td> td classboard-base-uri>/td> td> a href# data-togglemodal data-target#base-uri-modal classbtn btn-warning btn-sm only-owner> i classfas fa-edit>/i> /a> /td> /tr> !-- tr> td>Withdraw Address/td> td classboard-withdraw-address>/td> td> a href# data-togglemodal data-target#withdraw-address-modal classbtn btn-warning btn-sm only-owner> i classfas fa-edit>/i> /a> /td> /tr> --> tr> td>Signing Wallet/Private/td> td>/td> td> a href# data-togglemodal data-target#secret-key-modal classbtn btn-warning btn-sm only-owner> i classfas fa-edit>/i> /a> /td> /tr> /table> /div> /div> /div> /div> !-- Content Row --> div classrow> /div> !-- /.container-fluid --> /div> !-- End of Main Content --> !-- Footer --> footer classsticky-footer bg-white> div classcontainer my-auto> div classcopyright text-center my-auto> span>Copyright © 2021/span> /div> /div> /footer> !-- End of Footer --> /div> !-- End of Content Wrapper --> /div> !-- End of Page Wrapper --> !-- Scroll to Top Button--> a classscroll-to-top rounded href#page-top> i classfas fa-angle-up>/i> /a> !-- Logout Modal--> div classmodal fade idlogout-modal tabindex-1 roledialog aria-labelledbylogout-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idlogout-modal-title>Are you sure?/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body>Select Logout below if you are ready to end your current session./div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> a classbtn btn-primary href# onclicklogout(event)>Logout/a> /div> /div> /div> /div> !-- Holding Max Limit Modal--> div classmodal fade idholding-limit-modal tabindex-1 roledialog aria-labelledbyholding-limit-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idholding-limit-modal-title>Update the Holding Max Limit/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forholding-max-limit-input>Limit/label> input typetext nameholding-max-limit-input classform-control idholding-max-limit-input placeholderType the limit...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateHoldingMaxLimit(event) classbtn btn-primary idholding-limit-btn typebutton>Save/button> /div> /div> /div> /div> !-- Holding Total Supply Modal--> div classmodal fade idtotal-supply-modal tabindex-1 roledialog aria-labelledbytotal-supply-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idtotal-supply-modal-title>Update Total Supply/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label fortotal-supply-input>Total Supply/label> input typetext nametotal-supply-input classform-control idtotal-supply-input placeholderType the Total Supply...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateTotalSupply(event) classbtn btn-primary idtotal-supply-btn typebutton>Save/button> /div> /div> /div> /div> !-- Minting Max Modal--> div classmodal fade idminting-max-modal tabindex-1 roledialog aria-labelledbyminting-max-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idminting-max-modal-title>Update Minting Max/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label fortotal-supply-input>Minting Max/label> input typetext nameminting-max-input classform-control idminting-max-input placeholderType the Minting Max...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateMintingMax(event) classbtn btn-primary idminting-max-btn typebutton>Save/button> /div> /div> /div> /div> !-- Minting Price Modal--> div classmodal fade idminting-price-modal tabindex-1 roledialog aria-labelledbyminting-price-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idminting-price-modal-title>Update Minting Price/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forminting-price-input>Minting Price/label> input typetext nameminting-price-input classform-control idminting-price-input placeholderType the Minting Price...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateMintingPrice(event) classbtn btn-primary idminting-price-btn typebutton>Save/button> /div> /div> /div> /div> !-- Base URI Modal--> div classmodal fade idbase-uri-modal tabindex-1 roledialog aria-labelledbybase-uri-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idbase-uri-modal-title>Update Base URI/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forminting-price-input>Base URI/label> input typetext namebase-uri-input classform-control idbase-uri-input placeholderType the new Base URI...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateBaseUri(event) classbtn btn-primary idbase-uri-btn typebutton>Save/button> /div> /div> /div> /div> !-- Withdraw Address Modal--> !-- div classmodal fade idwithdraw-address-modal tabindex-1 roledialog aria-labelledbywithdraw-address-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idwithdraw-address-modal-title>Withdraw Address/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forwithdraw-address-input>Withdraw Address/label> input typetext namewithdraw-address-input classform-control idwithdraw-address-input placeholderType the new Withdraw Address...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateWithdrawAddress(event) classbtn btn-primary idwithdraw-address-btn typebutton>Save/button> /div> /div> /div> /div> --> !-- Withdraw Address Modal--> div classmodal fade idsecret-key-modal tabindex-1 roledialog aria-labelledbywithdraw-address-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idsecret-key-modal-title>Signing Wallet/Private key pair/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forwallet-address-input>Wallet address/label> input typetext namewallet-address-input classform-control idwallet-address-input placeholderType the Wallet address...> /div> div classform-group> label forprivate-key-input>Private Key/label> input typetext nameprivate-key-input classform-control idprivate-key-input placeholderType the Private Key...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateSigningKeyPair(event) classbtn btn-primary idsecret-key-btn typebutton>Save/button> /div> /div> /div> /div> !-- Multiple Modal--> div classmodal fade idedit-multiple-modal tabindex-1 roledialog aria-labelledbyedit-multiple-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idedit-multiple-modal-title>Contract Settings/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classrow> div classcol-6> div classform-group> label fortotal-supply-m-input>Total Supply:/label> div classinput-group> input typetext nametotal-supply-m-input classform-control idtotal-supply-m-input placeholderNew total supply...> span classinput-group-text>NFT/span> /div> /div> div classform-group> label forminting-price-m-input>Minting Price:/label> div classinput-group> input typetext nameminting-price-m-input classform-control idminting-price-m-input placeholderNew minting price...> span classinput-group-text>ETH/span> /div> /div> /div> div classcol-6> div classform-group> label forminting-max-m-input>Minting Max:/label> div classinput-group> input typetext nameminting-max-m-input classform-control idminting-max-m-input placeholderNew minting max...> span classinput-group-text>NFT/span> /div> /div> div classform-group> label forholding-max-m-input>Holding Max:/label> div classinput-group> input typetext nameholding-max-m-input classform-control idholding-max-m-input placeholderNew holding Max...> span classinput-group-text>NFT/span> /div> /div> /div> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.updateMultiple(event) idedit-multiple-btn classbtn btn-primary typebutton>Save/button> /div> /div> /div> /div> /div> !-- Minting By Owner Modal--> div classmodal fade idmint-only-owner-modal tabindex-1 roledialog aria-labelledbymint-only-owner-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idmint-only-owner-modal-title>Airdrop Token/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forsender-mint-only-owner-input>Sender/label> input typetext namesender-mint-only-owner-input classform-control idsender-mint-only-owner-input placeholderDeposit address...> label foramount-mint-only-owner-input>Amount of Tokens/label> input typetext nameamount-mint-only-owner-input classform-control idamount-mint-only-owner-input placeholderAmount...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.mintByOwner(event) idmint-only-owner-btn classbtn btn-primary typebutton> span idmint-only-owner-btn-loading > /span> Send /button> /div> /div> /div> /div> !-- Withdraw ETH Modal--> div classmodal fade idwithdraw-eth-modal tabindex-1 roledialog aria-labelledbywithdraw-eth-modal aria-hiddentrue> div classmodal-dialog roledocument> div classmodal-content> div classmodal-header> h5 classmodal-title idwithdraw-eth-modal-title>Withdraw ETH/h5> button classclose typebutton data-dismissmodal aria-labelClose> span aria-hiddentrue>×/span> /button> /div> div classmodal-body> form> div classform-group> label forwithdraw-eth-deposit-address-input>Deposit Address/label> input typetext namewithdraw-eth-deposit-address-input classform-control idwithdraw-eth-deposit-address-input placeholderDeposit address...> label forwithdraw-eth-amount-input>Amount/label> input typetext namewithdraw-eth-amount-input classform-control idwithdraw-eth-amount-input placeholderAmount...> /div> /form> /div> div classmodal-footer> button classbtn btn-secondary typebutton data-dismissmodal>Cancel/button> button onclickApp.withDrawEth(event) classbtn btn-primary idwithdraw-eth-btn typebutton>Withdraw/button> /div> /div> /div> /div> div iddispatcher>/div> !-- Bootstrap core JavaScript--> script srcvendor/jquery/jquery.min.js>/script> script srcvendor/bootstrap/js/bootstrap.bundle.min.js>/script> !-- Core plugin JavaScript--> script srcvendor/jquery-easing/jquery.easing.min.js>/script> !-- Custom scripts for all pages--> script srcjs/sb-admin-2.js>/script> !-- Page level plugins --> script srcvendor/chart.js/Chart.min.js>/script> !-- Page level custom scripts --> script srcjs/demo/dashboard.js>/script> !-- Page level custom scripts --> script srcjs/demo/sales-record.js>/script> script srcjs/demo/wallets-chart.js>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/web3/1.2.9/web3.min.js>/script> script srchttps://unpkg.com/@metamask/detect-provider/dist/detect-provider.min.js>/script> script srcjs/abi.js>/script> script> const name user.username0.toUpperCase() + user.username.slice(1); document.getElementById(display-username).innerHTML name var dashboardModel {} var wei 0.000000000000000001 var gasMultiplier 4 var PageModule function() { const updateView async function (model) { const { name, symbol, mintingPrice, totalSupply, totalMinted, owner, contractBalance, ownerBalance, mintingMax, holdingMax, stage, baseURI, withdrawAddress, whitelisted, secretKey, open, isOwnerSession } model const ethPrice mintingPrice * wei const tokenPrice Number(ethPrice.toFixed(6)) const earnings Number((totalMinted * ethPrice).toFixed(6)) const ethContractBalance Number((contractBalance * wei).toFixed(6)) const ethOwnerBalance Number((await driver.eth.getBalance(owner) * wei).toFixed(6)) const percentSold Number(((totalMinted / totalSupply) * 100).toFixed(2)) + % $(.board-title).html(`${name} (span>${symbol}/span>)`) $(.board-total-minted).html(`${totalMinted} ${symbol}`) $(.board-stage).html(stage) $(.board-total-supply).html(`${totalSupply} ${symbol}`) $(.board-minting-max).html(mintingMax) $(.board-earnings).html(`${earnings} ETH`) $(.board-contract-balance).html(`${ethContractBalance} ETH`) $(.board-sold).html(percentSold) $(.board-sold-gauge).css(width, percentSold) $(.board-token-price-title).html(`${symbol} price`) $(.board-token-price).html(`${tokenPrice} ETH`) $(.board-owner-balance).html(`${ethOwnerBalance} ETH`) $(.board-minting-limit).html(mintingMax) $(.board-holding-limit).html(holdingMax) $(.board-owner).html(`code>${owner}/code>`) $(.board-base-uri).html(`a href${baseURI} target_blank>code>${baseURI}/code>/a>`) //$(.board-withdraw-address).html(`code>${withdrawAddress}/code>`) dispatcher.dispatchEvent(new CustomEvent(mintingStatusUpdate, { bubbles: true, detail: { success: true, result: open } })) dispatcher.dispatchEvent(new CustomEvent(whitelistingStatusUpdate, { bubbles: true, detail: { success: true, result: whitelisted } })) if (isOwnerSession) { $(.only-owner).css(display, block) } } const populateEditMultipleModal async function (model) { const { mintingPrice, totalSupply, mintingMax, holdingMax, } model const price mintingPrice * wei $(#total-supply-m-input).val(totalSupply) $(#minting-max-m-input).val(mintingMax) $(#minting-price-m-input).val(price) $(#holding-max-m-input).val(holdingMax) } const getWhitelistingFromContract async function (model) { const { whitelisted } model return whitelisted } const checkNetwork function() { return driver.eth.net.getNetworkType().then(network > { return network allowedNetwork }) } const connectWallet async function() { let success false let result Please, install Metamask const hasMetamask typeof window.ethereum ! undefined && window.ethereum.isMetaMask if (hasMetamask) { return ethereum.request({ method: eth_requestAccounts }).then(res > { walletAddress res && res0 success true result walletAddress }).catch(err > { const errMsg `${result}: ${err.toString()}` console.log(errMsg) alert(errMsg) }).finally(() > { dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) }) } } const fetchContract async function() { const jobs contract.methods.name().call(), contract.methods.project().call(), contract.methods.symbol().call(), contract.methods.open().call(), contract.methods.mintingPrice().call(), contract.methods.mintingMax().call(), contract.methods.totalSupply().call(), contract.methods.minted().call(), contract.methods.owner().call(), contract.methods.holdingMax().call(), contract.methods.stage().call(), contract.methods.baseURI().call(), contract.methods.whitelisted().call(), //contract.methods.withdrawAddress().call(), driver.eth.getBalance(toAddress), const name, project, symbol, open, mintingPrice, mintingMax, totalSupply, totalMinted, owner, holdingMax, stage, baseURI, whitelisted, //withdrawAddress, contractBalance await Promise.all(jobs) const isOwnerSession (owner.toLowerCase() walletAddress.toLowerCase()) return { name, project, symbol, open, mintingPrice, mintingMax, totalSupply, totalMinted, owner, holdingMax, stage, baseURI, whitelisted, //withdrawAddress, contractBalance, isOwnerSession } } const getWallets async function () { return new Promise((resolve, reject) > { $.ajax({ method: post, url: `${backendBase}/wallets/list`, headers: { Authorization: user.token, requester: user.username }, success: function(data) { const { success, result } data if (success) { const { Items } result const total Items.length const buyers Items.filter(element > { const { wallet, authorize, minted, visited, trx } element return !!trx }) const minted_elements Items.filter(function (x) { return x.trx ! null }) const minted minted_elements.length; const not_minted total - minted; const confirmed buyers.length const records { buyers, total, confirmed, minted, not_minted } dispatcher.dispatchEvent(new CustomEvent(walletsLoaded, { bubbles: true, detail: { success, result: records } })) resolve(records) } else { if (result forbidden) { logout() } else { console.log(`There was an error fetching wallets: ${result}`) } } }, error: function(err) { console.log(err) if (err.status 401 || err.status 403) { logout() } } }) }) } const setMintingStatus async function() { if (!dashboardModel.isOwnerSession) { return } const originalToggleClass $(#board-minting-toggle).attr(class) const originalToggleContent $(#board-minting-toggle).html() const toggleClass btn btn-secondary btn-icon-split const toggleContent ` span classicon text-white-50> i classfas fa-spinner fa-spin>/i> /span> span classtext>Updating.../span>` $(#board-minting-toggle).attr(class, toggleClass).html(toggleContent) let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } const newOpen !dashboardModel.open contract.methods.setOpen(newOpen).send(options).then(result > { dashboardModel.open newOpen dispatcher.dispatchEvent(new CustomEvent(mintingStatusUpdate, { bubbles: true, detail: { success: true, result: newOpen } })) }).catch(err > { $(#board-minting-toggle).attr(class, originalToggleClass).html(originalToggleContent) alert(err.message ? err.message : err) console.log(err) }) } const setWhitelistingStatus async function() { if (!dashboardModel.isOwnerSession) { return } const originalToggleClass $(#board-whitelisted-toggle).attr(class) const originalToggleContent $(#board-whitelisted-toggle).html() const toggleClass btn btn-secondary btn-icon-split const toggleContent ` span classicon text-white-50> i classfas fa-spinner fa-spin>/i> /span> span classtext>Updating.../span>` $(#board-whitelisted-toggle).attr(class, toggleClass).html(toggleContent) let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } const newWhitelisted !dashboardModel.whitelisted contract.methods.setWhitelisted(newWhitelisted).send(options).then(result > { dashboardModel.whitelisted newWhitelisted dispatcher.dispatchEvent(new CustomEvent(whitelistingStatusUpdate, { bubbles: true, detail: { success: true, result: newWhitelisted } })) }).catch(err > { $(#board-whitelisted-toggle).attr(class, originalToggleClass).html(originalToggleContent) alert(err.message ? err.message : err) console.log(err) }) } const setHoldingMaxLimit async function(limit) { if (!dashboardModel.isOwnerSession) { return } try{ console.log(Limit,JSON.stringify(limit)) let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setHoldingMax(limit).send(options).then(result > { $(`#holding-limit-modal`).modal(hide); $(inputnameholding-max-limit-input).val(); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId holding-limit-btn enableActionBtn(btnId, Save) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) const btnId holding-limit-btn enableActionBtn(btnId, Save) }) }catch (e) { const message e.code + : + e.reason messageData { status: error, message: message } showNotificationMessage(messageData) console.log(Error: , JSON.stringify(e)) const btnId holding-limit-btn enableActionBtn(btnId, Save) } } const showNotificationMessage async function(options){ const titleIconCss mr-2 fas fa-fw fa-info const titleCss mr-auto text-md-center text-uppercase const notificationPanelCss toast const messageCss status optionsstatus message optionsmessage const defaultConfig { animation: true, autohide: true, delay: 500000 } $(.toast).toast(defaultConfig) switch (status) { case success: $(#notification-panel).attr(class, notificationPanelCss + alert alert-success) $(#notification-title-icon).attr(class, titleIconCss + text-success) $(#notification-title).attr(class, titleCss + text-success) $(#notification-title).text(Success) break; case error: $(#notification-panel).attr(class, notificationPanelCss + alert alert-danger) $(#notification-title-icon).attr(class, titleIconCss + text-danger) $(#notification-title).attr(class, titleCss + text-danger) $(#notification-title).text(Error) break; default: console.log(Unknown status); } $(#notification-message).text(message) $(#notification-title-icon).css(show); $(.toast).toast(show); } const setTotalSupply async function(totalSupply) { if (!dashboardModel.isOwnerSession) { return } try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setTotalSupply(totalSupply).send(options).then(result > { $(inputnametotal-sypply-input).val(); $(`#total-supply-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId total-supply-btn enableActionBtn(btnId, Save) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) const btnId total-supply-btn enableActionBtn(btnId, Save) }) }catch (e) { const message e.code + : + e.reason messageData { status: error, message: message } showNotificationMessage(messageData) console.log(Error: , JSON.stringify(e)) const btnId total-supply-btn enableActionBtn(btnId, Save) } } const setMintingMax async function(mintingMax) { if (!dashboardModel.isOwnerSession) { return } try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setMintingMax(mintingMax).send(options).then(result > { $(inputnameminting-max-input).val(); $(`#minting-max-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId minting-max-btn enableActionBtn(btnId, Save) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) const btnId minting-max-btn enableActionBtn(btnId, Save) }) }catch (e) { const message e.code + : + e.reason options { status: error, message: message } showNotificationMessage(options) console.log(Error: , JSON.stringify(e)) const btnId minting-max-btn enableActionBtn(btnId, Save) } } const setMultipleValues async function(totalSupply, mintingPrice, mintingMax, holdingMax) { if (!dashboardModel.isOwnerSession) { return } try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } const price mintingPrice * 1000000000000000000 return contract.methods.setMultiple(totalSupply, `${price}`, mintingMax, holdingMax).send(options).then(result > { $(`#edit-multiple-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId edit-multiple-btn enableActionBtn(btnId, Save) }).catch(err > { const btnId edit-multiple-btn enableActionBtn(btnId, Save) const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) }) }catch (e) { const btnId edit-multiple-btn enableActionBtn(btnId, Save) const message e.code + : + e.reason options { status: error, message: message } showNotificationMessage(options) console.log(Error: , e) } } const setMintingPrice async function(mintingPrice) { if (!dashboardModel.isOwnerSession) { return } try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setMintingPrice(mintingPrice).send(options).then(result > { $(inputnameminting-price-input).val(); $(`#minting-price-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId minting-price-btn enableActionBtn(btnId, Save) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) const btnId minting-price-btn enableActionBtn(btnId, Save) }) }catch (e) { const message e.code + : + e.reason options { status: error, message: message } showNotificationMessage(options) console.log(Error: , JSON.stringify(e)) const btnId minting-price-btn enableActionBtn(btnId, Save) } } const executeMintByOwner async function(sender, amount) { try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.mintByOwner(sender, amount).send(options).then(result > { $(inputnamesender-mint-only-owner-input).val(); $(inputnameamount-mint-only-owner-input).val(); $(`#mint-only-owner-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } const btnId mint-only-owner-btn enableActionBtn(btnId, Send) showNotificationMessage(messageData) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } const btnId mint-only-owner-btn enableActionBtn(btnId, Send) showNotificationMessage(options) console.log(err) }) }catch (e) { const message e.code + : + e.reason options { status: error, message: message } const btnId mint-only-owner-btn enableActionBtn(btnId, Send) showNotificationMessage(options) console.log(Error: , JSON.stringify(e)) } } const executeWithdrawEth async function(depositAddress, amount) { try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.withdrawETH(depositAddress, amount).send(options).then(result > { $(inputnamewithdraw-eth-deposit-address-input).val(); $(inputnamewithdraw-eth-amount-input).val(); $(`#withdraw-eth-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) }).catch(e > { const message e.message ? e.message : e options { status: error, message: message } showNotificationMessage(options) console.log(e) }) }catch (e) { const message e.code + : + e.reason options { status: error, message: message } showNotificationMessage(options) console.log(Error: , JSON.stringify(e)) } } const setBaseUri async function(baseUri) { if (!dashboardModel.isOwnerSession) { return } try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setBaseURI(baseUri).send(options).then(result > { $(inputnamebase-uri-input).val(); $(`#base-uri-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId base-uri-btn enableActionBtn(btnId, Save) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) const btnId base-uri-btn enableActionBtn(btnId, Save) }) }catch (e) { const message e.code + : + e.reason options { status: error, message: message } showNotificationMessage(options) console.log(Error: , JSON.stringify(e)) const btnId base-uri-btn enableActionBtn(btnId, Save) } } /*const setWithdrawAddress async function(withdrawAddress) { if (!dashboardModel.isOwnerSession) { return } try{ let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setWithdrawAddress(withdrawAddress).send(options).then(result > { $(inputnamewithdraw-address-input).val(); $(`#withdraw-address-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) const btnId withdraw-address-btn enableActionBtn(btnId, Save) }).catch(err > { const message err.message ? err.message : err options { status: error, message: message } showNotificationMessage(options) console.log(err) const btnId withdraw-address-btn enableActionBtn(btnId, Save) }) }catch (e) { const message e.code + : + e.reason options { status: error, message: message } showNotificationMessage(options) console.log(Error: , JSON.stringify(e)) const btnId withdraw-address-btn enableActionBtn(btnId, Save) } }*/ const setKeyPair async function(wallet, privateKey) { if (!dashboardModel.isOwnerSession) { return } let options { from: walletAddress, value: 0 }; const gasLimit await driver.eth.estimateGas(options) options { ...options, to: toAddress, gas: parseInt(gasMultiplier * gasLimit) } return contract.methods.setWhitelistedAddress(wallet).send(options).then(result > { $.ajax({ method: post, url: `${backendBase}/privateKey/update`, headers: { Authorization: user.token, requester: user.username }, data: JSON.stringify({privateKey: privateKey}), contentType: application/json, success: function(data) { const { success, result } data if (success) { const btnId secret-key-btn enableActionBtn(btnId, Save) $(inputnamewallet-address-input).val(); $(inputnameprivate-key-input).val(); $(`#secret-key-modal`).modal(hide); const success true; dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success, result } })) } else { const btnId secret-key-btn enableActionBtn(btnId, Save) if (result forbidden) { logout() } else { console.log(`There was an error updating the privateKey in the Database: ${result}`) reject(result) } } }, error: function(err) { console.log(err) const btnId secret-key-btn enableActionBtn(btnId, Save) dispatcher.dispatchEvent(new CustomEvent(walletConnected, { bubbles: true, detail: { success: true, result: whitelistingStatus } })) if (err.status 401 || err.status 403) { logout() } else { reject(err) } } }) const message Operation executed successfully. messageData { status: success, message: message } showNotificationMessage(messageData) }).catch(err > { alert(err.message ? err.message : err) console.log(err) }) } const enableActionBtn async function(btnId, label){ // $(#+btnId+-loading).addClass( fas fa-spinner fa-spin ); $(#+btnId).attr(disabled, false); $(#+btnId).text(label) } let walletAddress null let dispatcher null const driver new Web3(window.ethereum) const contract new driver.eth.Contract(abi, toAddress) return { refreshNetwork: function() { checkNetwork().then(networkIsGood > { if (networkIsGood) { this.refreshDashboard() } else { const message `Invalid Network, please switch to ${allowedNetwork} network` messageData { status: error, message: message } showNotificationMessage(messageData) // alert(`Invalid Network, please switch to ${allowedNetwork} network`) } }) }, boot: async function() { dispatcher document.getElementById(dispatcher) const hasMetamask typeof window.ethereum ! undefined && window.ethereum.isMetaMask if (!hasMetamask) { alert(Please install Metamask:\nhttps://metamask.io/download/\n\nYou need it in order to access the contract) } else { checkNetwork().then(networkIsGood > { if (!networkIsGood) { const message `Invalid Network, please switch to ${allowedNetwork} network` messageData { status: error, message: message } showNotificationMessage(messageData) // alert(`Invalid Network, please switch to ${allowedNetwork} network`) } else { connectWallet() } }) } }, refreshDashboard: async function(event) { dashboardModel await fetchContract() updateView(dashboardModel) getWallets() }, updateEditMultipleModal: async function(event) { dashboardModel await fetchContract() populateEditMultipleModal(dashboardModel) getWallets() }, updateMinting: async function(event) { event.preventDefault() const result await setMintingStatus() }, updateWhitelisting: async function(event) { event.preventDefault() dashboardModel await fetchContract() const whitelisted await getWhitelistingFromContract(dashboardModel) const result await setWhitelistingStatus(!whitelisted) }, updateHoldingMaxLimit: async function(event) { event.preventDefault() const btnId holding-limit-btn await this.disableActionBtn(btnId, Saving) const limit $(inputnameholding-max-limit-input).val() const result await setHoldingMaxLimit(limit) }, updateTotalSupply: async function(event) { event.preventDefault() const btnId total-supply-btn await this.disableActionBtn(btnId, Saving) const totalSupply $(inputnametotal-supply-input).val() const result await setTotalSupply(totalSupply) }, updateMintingMax: async function(event) { event.preventDefault() const btnId minting-max-btn await this.disableActionBtn(btnId, Saving) const mintingMax $(inputnameminting-max-input).val() const result await setMintingMax(mintingMax) }, updateMintingPrice: async function(event) { event.preventDefault() const btnId minting-price-btn await this.disableActionBtn(btnId, Saving) const mintingPrice $(inputnameminting-price-input).val() const result await setMintingPrice(mintingPrice) }, updateBaseUri: async function(event) { event.preventDefault() const btnId base-uri-btn await this.disableActionBtn(btnId, Saving) const baseUri $(inputnamebase-uri-input).val() const result await setBaseUri(baseUri) }, /*updateWithdrawAddress: async function(event) { event.preventDefault() const btnId withdraw-address-btn await this.disableActionBtn(btnId, Saving) const withdrawAddress $(inputnamewithdraw-address-input).val() const result await setWithdrawAddress(withdrawAddress) },*/ updateSigningKeyPair: async function(event) { event.preventDefault() const btnId secret-key-btn await this.disableActionBtn(btnId, Saving) const wallet $(inputnamewallet-address-input).val() const privateKey $(inputnameprivate-key-input).val() const result await setKeyPair(wallet, privateKey) }, updateMultiple: async function(event) { event.preventDefault() const btnId edit-multiple-btn await this.disableActionBtn(btnId, Saving) const _totalSupply $(inputnametotal-supply-m-input).val() const _mintingPrice $(inputnameminting-price-m-input).val() const _mintingMax $(inputnameminting-max-m-input).val() const _holdingMax $(inputnameholding-max-m-input).val() const result await setMultipleValues(_totalSupply, _mintingPrice, _mintingMax, _holdingMax) }, updateMintingButton: async function(event) { event.preventDefault() const { success, result } event && event.detail if (success) { let disabled dashboardModel.isOwnerSession ? : disabled let toggleClass `btn btn-danger btn-icon-split ${disabled}` let toggleContent ` span classicon text-white-50> i classfas fa-lock>/i> /span> span classtext>Not minting/span> ` if(result) { toggleClass `btn btn-success btn-icon-split ${disabled}` toggleContent ` span classicon text-white-50> i classfas fa-lock-open>/i> /span> span classtext>Minting/span> ` } $(#board-minting-toggle).attr(class, toggleClass).html(toggleContent) } }, updateWhitelistingButton: async function(event) { event.preventDefault() const { success, result } event && event.detail if (success) { let disabled dashboardModel.isOwnerSession ? : disabled let toggleClass `btn btn-success btn-icon-split ${disabled}` let toggleContent ` span classicon text-white-50> i classfas fa-lock-open>/i> /span> span classtext>Public/span> ` if(result) { toggleClass `btn btn-warning btn-icon-split ${disabled}` toggleContent ` span classicon text-white-50> i classfas fa-lock>/i> /span> span classtext>Whitelisted/span> ` } $(#board-whitelisted-toggle).attr(class, toggleClass).html(toggleContent) } }, mintByOwner: async function(event) { event.preventDefault() const sender $(inputnamesender-mint-only-owner-input).val() const amount $(inputnameamount-mint-only-owner-input).val() const btnId mint-only-owner-btn await this.disableActionBtn(btnId, Saving) const result await executeMintByOwner(sender, amount) }, withDrawEth: async function(event) { event.preventDefault() const depositAddress $(inputnamewithdraw-eth-deposit-address-input).val() const amount $(inputnamewithdraw-eth-amount-input).val() const result await executeWithdrawEth(depositAddress, amount) }, disableActionBtn: async function(btnId, label){ event.preventDefault() // $(#+btnId+-loading).addClass( fas fa-spinner fa-spin ); $(#+btnId).attr(disabled, true); $(#+btnId).text(label) }, } } var App PageModule() window.addEventListener(load, App.boot, false) window.addEventListener(walletConnected, App.refreshDashboard, false) window.addEventListener(mintingStatusUpdate, App.updateMintingButton, false) window.addEventListener(whitelistingStatusUpdate, App.updateWhitelistingButton, false) window.ethereum && window.ethereum.on(chainChanged, App.refreshNetwork) /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]