Help
RSS
API
Feed
Maltego
Contact
Domain > admin.bullsandapesproject.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2022-05-14
13.226.17.89
(
ClassC
)
2022-06-01
108.159.227.96
(
ClassC
)
2022-10-04
13.226.22.10
(
ClassC
)
2022-10-04
13.226.22.24
(
ClassC
)
2025-11-17
3.175.34.49
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Mon, 17 Nov 2025 01:50:46 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://admin.bullsandapesproject.com/X-Cache: Redirect from cloudfrontVia: 1.1 c705ee033a363383cd13caf9803ae766.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P3Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: gnSt4lOoWQkJFBXybbEmuK98z5dTRQXOnH7b5Ptp8mdrUAgQX6QZnQ 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: 74317Connection: keep-aliveDate: Mon, 17 Nov 2025 01:50:47 GMTLast-Modified: Tue, 21 Jun 2022 00:36:10 GMTETag: d321b220524438fea2c58069400fee8bx-amz-version-id: nullAccept-Ranges: bytesServer: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 188e4222daf42f54b9492a395b60fb00.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P3Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: NBN7ZbaC9-R4sdFYA7AV6odSYnOzt6Hfnws0kN9Q1rHnQ2SpJTtb9g !DOCTYPE html>html langen> head> script> 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 nameviewport contentwidthdevice-width,initial-scale1.0 /> title>Bulls&Apes Project | Dashboard/title> meta namedescription contentBulls&Apes Project | Dashboard created by JDMLabs and published on Themeforest /> meta nameauthor contentJDMLabs /> meta namerobots contentnoindex, nofollow /> !-- Open Graph Meta --> meta propertyog:title contentBulls&Apes Project | Dashboard /> meta propertyog:site_name contentOneUI /> meta propertyog:description contentBulls&Apes Project | Dashboard created by JDMLabs and published on Themeforest /> meta propertyog:type contentwebsite /> meta propertyog:url content /> meta propertyog:image content /> !-- Icons --> !-- The following icons can be replaced with your own, they are used by desktop and mobile browsers --> link relshortcut icon hrefassets/media/favicons/favicon.png /> !-- END Icons --> !-- Stylesheets --> !-- Fonts and OneUI framework --> link relstylesheet hrefhttps://fonts.googleapis.com/css2?familyInter:wght@300;400;500;600;700&displayswap /> link relstylesheet idcss-main hrefassets/css/oneui.min.css /> link relstylesheet idcss-custom hrefassets/css/custom.css /> !-- You can include a specific file from css/themes/ folder to alter the default color theme of the template. eg: --> !-- link relstylesheet idcss-theme hrefassets/css/themes/amethyst.min.css> --> !-- END Stylesheets --> /head> body> div idpage-container classsidebar-o sidebar-dark enable-page-overlay side-scroll page-header-fixed main-content-narrow > !-- Side Overlay--> aside idside-overlay> !-- Side Header --> div classcontent-header border-bottom> !-- User Avatar --> a classimg-link me-1 hrefjavascript:void(0)> img classimg-avatar img-avatar32 srcassets/media/avatars/avatar10.jpg alt /> /a> !-- END User Avatar --> !-- User Info --> div classms-2> a classtext-dark fw-semibold fs-sm hrefjavascript:void(0) iddisplay-username-button-2 >Admin Istrator/a > /div> !-- END User Info --> /div> !-- END Side Header --> /aside> nav idsidebar aria-labelMain Navigation> !-- Side Header --> div classcontent-header> !-- Logo --> a classfw-semibold text-dual hrefindex.html> span classsmini-visible> i classfab fab-vaadin text-primary>/i> /span> span classsmini-hide fs-5 tracking-wider >Bulls&Apesspan classfw-normal>Project/span>/span > /a> !-- END Logo --> /div> div classjs-sidebar-scroll> div classcontent-side> ul classnav-main> li classnav-main-item> a classnav-main-link active href/> i classnav-main-link-icon si si-speedometer>/i> span classnav-main-link-name>Dashboard/span> /a> /li> li classnav-main-heading>Players/li> li classnav-main-item> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/minters.html> i classnav-main-link-icon si si-wallet>/i> span classnav-main-link-name>Wallets/span> /a> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/transactions.html> i classnav-main-link-icon si si-graph>/i> span classnav-main-link-name>Transactions/span> /a> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/tokens.html > i classnav-main-link-icon si si-graph>/i> span classnav-main-link-name>OG Bulls Tokens/span> /a> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/categories.html > i classnav-main-link-icon si si-graph>/i> span classnav-main-link-name>OG Bulls Categories/span> /a> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/rarities.html > i classnav-main-link-icon si si-graph>/i> span classnav-main-link-name>OG Bulls Rarities/span> /a> /li> li classnav-main-heading>Collection/li> li classnav-main-item> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/genesis.html> i classnav-main-link-icon fab fa-vaadin>/i> span classnav-main-link-name>OG Bulls/span> /a> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/teens.html> i classnav-main-link-icon fab fa-vaadin>/i> span classnav-main-link-name>Teen Bulls/span> /a> a classnav-main-link nav-main-link-submenu aria-haspopuptrue href/methane.html> i classnav-main-link-icon fab fa-vaadin>/i> span classnav-main-link-name>Methane /span> /a> /li> /ul> /div> !-- END Side Navigation --> /div> /nav> !-- END Sidebar --> !-- Header --> header idpage-header> !-- Header Content --> div classcontent-header> !-- Left Section --> div classd-flex align-items-center> !-- Toggle Sidebar --> !-- Layout API, functionality initialized in Template._uiApiLayout()--> button typebutton classbtn btn-sm btn-alt-secondary me-2 d-lg-none data-togglelayout data-actionsidebar_toggle > i classfa fa-fw fa-bars>/i> /button> !-- END Toggle Sidebar --> !-- Toggle Mini Sidebar --> !-- Layout API, functionality initialized in Template._uiApiLayout()--> button typebutton classbtn btn-sm btn-alt-secondary me-2 d-none d-lg-inline-block data-togglelayout data-actionsidebar_mini_toggle > i classfa fa-fw fa-ellipsis-v>/i> /button> !-- END Toggle Mini Sidebar --> /div> !-- END Left Section --> !-- Right Section --> div classd-flex align-items-center> !-- User Dropdown --> div classdropdown d-inline-block ms-2> button typebutton classbtn btn-sm btn-alt-secondary d-flex align-items-center idpage-header-user-dropdown data-bs-toggledropdown aria-haspopuptrue aria-expandedfalse > img classrounded-circle srcassets/media/avatars/avatar10.jpg altHeader Avatar stylewidth: 21px /> span classd-none d-sm-inline-block ms-2 iddisplay-username-button >Admin Istrator/span > i classfa fa-fw fa-angle-down d-none d-sm-inline-block opacity-50 ms-1 mt-1 >/i> /button> div classdropdown-menu dropdown-menu-md dropdown-menu-end p-0 border-0 aria-labelledbypage-header-user-dropdown > div classp-3 text-center bg-body-light border-bottom rounded-top > img classimg-avatar img-avatar48 img-avatar-thumb srcassets/media/avatars/avatar10.jpg alt /> p classmt-2 mb-0 fw-medium iddisplay-username> Admin Istrator /p> /div> div classp-2> a classdropdown-item d-flex align-items-center justify-content-between hrefbe_pages_generic_profile.html > span classfs-sm fw-medium>Profile/span> /a> /div> div roleseparator classdropdown-divider m-0>/div> div classp-2> a classdropdown-item d-flex align-items-center justify-content-between href# onclicklogout(event) > span classfs-sm fw-medium>Log Out/span> /a> /div> /div> /div> !-- END User Dropdown --> /div> !-- END Right Section --> /div> !-- END Header Content --> !-- Header Loader --> !-- Please check out the Loaders page under Components category to see examples of showing/hiding it --> div idpage-header-loader classoverlay-header bg-body-extra-light> div classcontent-header> div classw-100 text-center> i classfa fa-fw fa-circle-notch fa-spin>/i> /div> /div> /div> !-- END Header Loader --> /header> !-- END Header --> !-- Main Container --> main idmain-container> !-- Hero --> div classcontent> div classd-flex flex-column flex-md-row justify-content-md-between align-items-md-center py-2 text-center text-md-start > div classflex-grow-1 mb-1 mb-md-0> h1 classh3 fw-bold mb-2>Dashboard/h1> /div> div classmt-3 mt-md-0 ms-md-3 space-x-1>/div> /div> /div> !-- END Hero --> !-- Page Content --> div classcontent> !-- Overview --> div classrow items-push> div classcol-sm-6 col-xxl-3> !-- Pending Orders --> div classblock block-rounded d-flex flex-column h-100 mb-0> div classblock-content block-content-full flex-grow-1 d-flex justify-content-between align-items-center > dl classmb-0> dt classfs-3 fw-bold>32/dt> dd classfs-sm fw-medium fs-sm fw-medium text-muted mb-0> Pending Orders /dd> /dl> div classitem item-rounded-lg bg-body-light> i classfar fa-gem fs-3 text-primary>/i> /div> /div> div classbg-body-light rounded-bottom> a classblock-content block-content-full block-content-sm fs-sm fw-medium d-flex align-items-center justify-content-between hrefjavascript:void(0) > span>View all orders/span> i classfa fa-arrow-alt-circle-right ms-1 opacity-25 fs-base >/i> /a> /div> /div> !-- END Pending Orders --> /div> div classcol-sm-6 col-xxl-3> !-- New Customers --> div classblock block-rounded d-flex flex-column h-100 mb-0> div classblock-content block-content-full flex-grow-1 d-flex justify-content-between align-items-center > dl classmb-0> dt classfs-3 fw-bold>124/dt> dd classfs-sm fw-medium fs-sm fw-medium text-muted mb-0> New Customers /dd> /dl> div classitem item-rounded-lg bg-body-light> i classfar fa-user-circle fs-3 text-primary>/i> /div> /div> div classbg-body-light rounded-bottom> a classblock-content block-content-full block-content-sm fs-sm fw-medium d-flex align-items-center justify-content-between hrefjavascript:void(0) > span>View all customers/span> i classfa fa-arrow-alt-circle-right ms-1 opacity-25 fs-base >/i> /a> /div> /div> !-- END New Customers --> /div> div classcol-sm-6 col-xxl-3> !-- Messages --> div classblock block-rounded d-flex flex-column h-100 mb-0> div classblock-content block-content-full flex-grow-1 d-flex justify-content-between align-items-center > dl classmb-0> dt classfs-3 fw-bold>45/dt> dd classfs-sm fw-medium fs-sm fw-medium text-muted mb-0> Messages /dd> /dl> div classitem item-rounded-lg bg-body-light> i classfar fa-paper-plane fs-3 text-primary>/i> /div> /div> div classbg-body-light rounded-bottom> a classblock-content block-content-full block-content-sm fs-sm fw-medium d-flex align-items-center justify-content-between hrefjavascript:void(0) > span>View all messages/span> i classfa fa-arrow-alt-circle-right ms-1 opacity-25 fs-base >/i> /a> /div> /div> !-- END Messages --> /div> div classcol-sm-6 col-xxl-3> !-- Conversion Rate --> div classblock block-rounded d-flex flex-column h-100 mb-0> div classblock-content block-content-full flex-grow-1 d-flex justify-content-between align-items-center > dl classmb-0> dt classfs-3 fw-bold>4.5%/dt> dd classfs-sm fw-medium fs-sm fw-medium text-muted mb-0> Conversion Rate /dd> /dl> div classitem item-rounded-lg bg-body-light> i classfa fa-chart-bar fs-3 text-primary>/i> /div> /div> div classbg-body-light rounded-bottom> a classblock-content block-content-full block-content-sm fs-sm fw-medium d-flex align-items-center justify-content-between hrefjavascript:void(0) > span>View statistics/span> i classfa fa-arrow-alt-circle-right ms-1 opacity-25 fs-base >/i> /a> /div> /div> !-- END Conversion Rate--> /div> /div> !-- END Overview --> !-- Statistics --> div classrow> div classcol-xl-8 col-xxl-9 d-flex flex-column> !-- Earnings Summary --> div classblock block-rounded flex-grow-1 d-flex flex-column> div classblock-header block-header-default> h3 classblock-title>Earnings Summary/h3> div classblock-options> button typebutton classbtn-block-option data-toggleblock-option data-actionstate_toggle data-action-modedemo > i classsi si-refresh>/i> /button> button typebutton classbtn-block-option> i classsi si-settings>/i> /button> /div> /div> div classblock-content block-content-full flex-grow-1 d-flex align-items-center > !-- Earnings Chart Container --> !-- Chart.js Chart is initialized in js/pages/be_pages_dashboard.min.js which was auto compiled from _js/pages/be_pages_dashboard.js --> !-- For more info and examples you can check out http://www.chartjs.org/docs/ --> canvas idjs-chartjs-earnings>/canvas> /div> div classblock-content bg-body-light> div classrow items-push text-center w-100> div classcol-sm-4> dl classmb-0> dt classfs-3 fw-bold d-inline-flex align-items-center space-x-2 > i classfa fa-caret-up fs-base text-success>/i> span>2.5%/span> /dt> dd classfs-sm fw-medium text-muted mb-0> Customer Growth /dd> /dl> /div> div classcol-sm-4> dl classmb-0> dt classfs-3 fw-bold d-inline-flex align-items-center space-x-2 > i classfa fa-caret-up fs-base text-success>/i> span>3.8%/span> /dt> dd classfs-sm fw-medium text-muted mb-0> Page Views /dd> /dl> /div> div classcol-sm-4> dl classmb-0> dt classfs-3 fw-bold d-inline-flex align-items-center space-x-2 > i classfa fa-caret-down fs-base text-danger>/i> span>1.7%/span> /dt> dd classfs-sm fw-medium text-muted mb-0> New Products /dd> /dl> /div> /div> /div> /div> !-- END Earnings Summary --> /div> div classcol-xl-4 col-xxl-3 d-flex flex-column> !-- Last 2 Weeks --> !-- Chart.js Charts is initialized in js/pages/be_pages_dashboard.min.js which was auto compiled from _js/pages/be_pages_dashboard.js --> !-- For more info and examples you can check out http://www.chartjs.org/docs/ --> div classrow items-push flex-grow-1> div classcol-md-6 col-xl-12> div classblock block-rounded d-flex flex-column h-100 mb-0 > div classblock-content flex-grow-1 d-flex justify-content-between > dl classmb-0> dt classfs-3 fw-bold>570/dt> dd classfs-sm fw-medium text-muted mb-0> Total Orders /dd> /dl> div> div classd-inline-block px-2 py-1 rounded-3 fs-xs fw-semibold text-danger bg-danger-light > i classfa fa-caret-down me-1>/i> 2.2% /div> /div> /div> div classblock-content p-1 text-center overflow-hidden> !-- Total Orders Chart Container --> canvas idjs-chartjs-total-orders styleheight: 90px >/canvas> /div> /div> /div> div classcol-md-6 col-xl-12> div classblock block-rounded d-flex flex-column h-100 mb-0 > div classblock-content flex-grow-1 d-flex justify-content-between > dl classmb-0> dt classfs-3 fw-bold>$5,234.21/dt> dd classfs-sm fw-medium text-muted mb-0> Total Earnings /dd> /dl> div> div classd-inline-block px-2 py-1 rounded-3 fs-xs fw-semibold text-success bg-success-light > i classfa fa-caret-up me-1>/i> 4.2% /div> /div> /div> div classblock-content p-1 text-center overflow-hidden> !-- Total Earnings Chart Container --> canvas idjs-chartjs-total-earnings styleheight: 90px >/canvas> /div> /div> /div> div classcol-xl-12> div classblock block-rounded d-flex flex-column h-100 mb-0 > div classblock-content flex-grow-1 d-flex justify-content-between > dl classmb-0> dt classfs-3 fw-bold>264/dt> dd classfs-sm fw-medium text-muted mb-0> New Customers /dd> /dl> div> div classd-inline-block px-2 py-1 rounded-3 fs-xs fw-semibold text-success bg-success-light > i classfa fa-caret-up me-1>/i> 9.3% /div> /div> /div> div classblock-content p-1 text-center overflow-hidden> !-- New Customers Chart Container --> canvas idjs-chartjs-new-customers styleheight: 90px >/canvas> /div> /div> /div> /div> !-- END Last 2 Weeks --> /div> /div> !-- END Statistics --> /div> !-- END Page Content --> /main> !-- END Main Container --> !-- Footer --> footer idpage-footer classbg-body-light> div classcontent py-3> div classrow fs-sm> div classcol-sm-6 order-sm-2 py-1 text-center text-sm-end> Powered with i classfa fa-heart text-danger>/i> by a classfw-semibold hrefhttps://www.jdmlabs.io target_blank >JDMLabs/a > /div> /div> /div> /footer> !-- END Footer --> /div> !-- END Page Container --> !-- OneUI JS Core libraries and functionality webpack is putting everything together at assets/_js/main/app.js --> script srcassets/js/jdmlabs/loader.js>/script> script srcassets/js/oneui.app.min.js>/script> !-- Page JS Plugins --> script srcassets/js/plugins/chart.js/chart.min.js>/script> !-- Page JS Code --> script srcassets/js/pages/be_pages_dashboard.min.js>/script> script> const name user.username0.toUpperCase() + user.username.slice(1); document.getElementById(display-username-button).innerHTML name; document.getElementById(display-username).innerHTML name; var dashboardModel {}; var wei 0.000000000000000001; var gasMultiplier 4; let walletAddress null; let dispatcher null; const driver new Web3(window.ethereum); const contract new driver.eth.Contract(abi, toAddress); 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); }; 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
]