Last active
July 6, 2022 11:03
-
-
Save lalalune/f85637ba899cdcd0ad5e570b7b030d83 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
// ______ _____ ______ ______ _____ _____ _____ ______ | |
// | ____| __ \| ____| ____|/ ____|/ ____| /\ | __ \| ____| | |
// | |__ | |__) | |__ | |__ | (___ | | / \ | |__) | |__ | |
// | __| | _ /| __| | __| \___ \| | / /\ \ | ___/| __| | |
// | | | | \ \| |____| |____ ____) | |____ / ____ \| | | |____ | |
// |_| |_| \_\______|______|_____/ \_____/_/ __\_\_| |______| | |
// / ____/ __ \ \ / / _ \ / __ \ \ / / ____| | |
// | | | | | \ \ /\ / /| |_) | | | \ \_/ / (___ | |
// | | | | | |\ \/ \/ / | _ <| | | |\ / \___ \ | |
// | |___| |__| | \ /\ / | |_) | |__| | | | ____) | | |
// \_____\____/ \/ \/ |____/ \____/ |_| |_____/ | |
// | |
// BY CRYPTYDE INC. | |
// Contract By: moon & supernftier .;"I[o4C#4\ | |
// .10HNBBMBMMMMMBi | |
// .eBMMMMBBBMMMMMM+ | |
// lRRBR&SZCCCC%g&R2\ | |
// .:LHGE&gw#ggS#AwgON$I* | |
// .1pOBM@@@@@@@@@@@@@@@@@@@MDk" | |
// For Terms & Conditions, please visit: .sM@@@@@@@@@@@@@@@@@@@@@@@@@@@@Bx: | |
// freescape.io/terms-of-service \M@@@@@@@@@@@MMBNBBMM@@@@@@@@@@@@B? | |
// ,N@@@@@@@MBBBBDmk7k#BBBBBM@@@@@@@@w. | |
// jM@@@@@MRD&D#000okUORDDHRB@@@MBmc' | |
// ;hEBMBHS5sXGDgwEENBMMBBB&Cot_. | |
// .f&N&Ch0xqRE$&DBMMMBB[ | |
// ~mR$ewqqZRN0BBMMMBg_ | |
// .fEBBB$5wBBMMMMMB1 | |
// .-_rkBMBNNBBMMMMMC` | |
// _1yFERRMMMB&BBMMMMMMD~ | |
// .~]kCBBBMMBRGGNWpHDBMMMMMBCsv_ | |
// .^p&RBBBBBBMMMMBBDO$EWBM@@@MBRNW2l. | |
// l&MMMMMMBBBBBBBBBMMBBN&$HM@MB&DBMMM&?, | |
// 1MMBBBMMMMBBBBBBBBBBBBBBBN&GWNBBBMMMMD+: | |
// ,oBBBBBBMBBBBBMMMBBBRBBBBBBBBRBBBMMMMMME_ | |
// i$BBBBBBBMMBBBBBMBDCSNBBBRBBBBBBMMMBBMMMMG_ | |
// +DBBBBBBBMMMBBBBBBE2v1]#RBBBBBRBMMMMBBMMMMMw, | |
// fNBBBBBBBBMMMBBBBBNgz1+ty#O&NBBMMMMMMMBMMMMMMa | |
// .7RBBBBBBBBMMMMMBBBBOqfj++}sUGRBMMMMMMMMMBBMMMMM* | |
// `oBBBBBBBMMMMMMMBBBMB$F?}v?}zSBBMMMMMMMMMMMMBMMMMe | |
// `hBBBBBBBMMMMMMMMBBBMB$k1ff1foSBMMMBBBBMMMMMMMMMMMB+ | |
// `kBBBBBBBMMMMMMMMMBBMBDg]t11tc2HEHA%R&EWRBMMMMMMMBMMMe; | |
// aBBBBBBBMMMMMMMMMMMMMB$h>1f=xCH0yyoXDSHg$DRBMMMMMMBMMMBe_ | |
// rBBBBBBMMMMM@@@MMMMMMMRSxjtLh#Xo77ssHRSm%wH&RMMM@MMMMMMMMBs` | |
// ;HBBBBBMMMMM@MRMMMMMMMMRHn1ow&w[x]ns4DNSgUm#$NBMMMMMM@MMMMMM#; | |
// [BBBBBBMMMMMM7.LMMM@MMBDAc=}0wsv7c[o%G&HgXUgONBMMMM@@@@MMMMMM$; | |
// `ZBBBBBBMMMMMq. _BBM@MMREq>tv??1fvLzFX&EHZCXHERMBMM@@@@@@MMMMMMH; | |
// ^BBBBBBBMMMMR' sMBM@@MN&2vv}?f>}}xnoX&&gUXZgEBMBMBhzR@@@MMMMMMMm` | |
// oBBBBBBBMMMM] _BMM@@@MD$ovvvtf[[f?zLkw&SwmAHGBMBBMC,`hM@@MMMMMMMs | |
// -EBBBBBMMMMMR: hMM@@@@MNHx1}v=tv?c7zsa$HggmZ$DBMBBMBL _UM@MMMMMMB~ | |
// oBBBBBMMMMMMh ~BM@@@@@MNHovv1fvvf?}7oUNS#HwgONMMBBBBw iN@MMMBMMD* | |
// \DBBBBMMMMMMM+ .oM@@@@@MBN$5[v?c}vf}czkHD#w$gmERMMBBBBS -XMMMBBBM$; | |
// ,XBBBBBMMMMMMD: 1BM@@@@@MBREgovfv}ff}LypS#wUSHg$RMBBBBBH .7MMMBBBMH_ | |
// }BBBBBBMMMMMM} |BM@@@@@@MBREH2v1vvtf]LkFpHG%SHSHBMBBBBBH !BMMMMMMN; | |
// .UBBBBBBBMMMB?.rBM@@@@@@@@MMBN$C5XgH$OSHS&RBG&G&RMMBBBBB$. ~SMMMMB1. | |
// ;DBBBBBBM@@Br lBM@@@@@@@M@MMMMRNRBBGGBBBRBMBMMMBM@MBBBMMBl ZBMMD}. | |
// !BBBBBBM@@@v IBMM@@@@@@@M@@@MBRRBBBNNMMMBMMBMMMBMMMBBBBBBC kBBBBNo | |
// ,zBNCRMBRME'cMM@@@@@@@@@M@@MBHgggH$O&&GDNDRBRRNNRBMBBBBBBB` .oRNMMm\ | |
// IWDS2$BENR#MMM@@@@@@@@MMM@BOg#wwgSHHSHHO&WDNNRNNBMMBBBBMMl -oRBMC; | |
// vRBN]hf.IgBM@@@@@@@@@@MMMM&Sg##w#w##g$E&DDNDNNNNNBMBBBBBMo .mGRU\ | |
// ;SEUss-:XMMM@@@@@@@@@MMMMRHSgwmUZg$E&GWDDDNNNDGWNBMBBBMBBZ .oUEC, | |
// .pB&B&cwMMM@@@@@@@@@@BBMBESg#Aw#S$EE$EGDDNNDDDGGDBMBBBMBB&` 'oH[ | |
// ;UBMMMMMM@@@@@@@@@@MBBBB&gwZU%Z#gSHENBBRRNWDG&GWRBMMMBBB&, . | |
// :qBMMMM@@@@@@@@@@@MM@B$HggSgg#wwHRBBBBNNNGGEEE&NBBMBBBB%. | |
// '%BMM@@@@@@@@@@@@MMMG$$O$S#ZAHNBBBBBBBRDW&O$E&DBBMBBBBo | |
// ~EBBM@@@@@@M@@@@@MM@MN$$HSSHERBBBBBMMMMRD&E$EE&DBMBBBBBc | |
// IGBBM@@@@@@M@@@@@@M@MB&HHH$EWDDWNRBM@@MBEEE&&&WRBBMBBBBB} | |
// .?RBBM@@@@@@MM@@@@@@@@MEHH$E&&&&&DBBM@@MMB&$E&GGWRBMMBBBBBv ...`:;_____;'`. | |
// `oBBBM@@@@@@@M@@@M@@@@@BHH$OOOEE&RBBBM@@MMBNEE&&DNRBMMBBBBB^ ..,;_""""""""*_;'`. | |
// '0BBBM@@@@@@@MM@@MMM@@@@B$H$$$OEDBBBBM@@@@MBW&GGDRRBBMMBBBBB_ ..`:;;__""""""*__;;-,.. | |
// _UBBBM@@@@@@@MM@@MMMM@@@MRGHH$E&RBRRRM@@@@@MBDWDDDRRBMMBBBBBB. .`'__""""""""""*""*;,. | |
// *SBBBM@@@@@@@MM@@MMMM@@@MR&EEO&&DDWNBM@@@@@@MMBGGDDDNRMMBBBBBB .`:;_*"""""""""""""""*_:. | |
// lDBBM@@@@@@@@MMMMMMMMM@@@M&HH$EEEWDNRBM@@@@@@MMBGOEEE&RMMBBBBBB: ..:-__*"""""""""""""""""*_;:. | |
// iDBBM@@@@@@@@MMMMMMMMM@@@@B&OHH$E&WNBBM@@@@@@@@MR$$EGRBMMMBBBBBM" .,;_*""""""""""""""""""""""_'. | |
// _$BBM@@@@@@@@MMMMMMMMMM@@@MGHH$$$E&DBMM@@@@@@@@@BW$NRBRBMMMBBBBBMi . ........... . ..'_*""""""""""""""""""""""""*_-` | |
// .2BM@@@@@@@@@MMMMMMMMMM@@@@ME$SSH$EDBMM@@@@@@@@@@R&RRD&&RBMMBBBBMM? .... .....................................:;_"~~~~~~"""""""""""""""""""_-. | |
// ;kBM@@@@@@@@MMMMMMMMMMM@@@@@MOHHHH$&RBMM@@@@@@@@@@NG&$HHHODBBBBBBMMe...........................................,;_"~~~~~~~~~~~~~~""""~~"""*_""_;,. | |
// IEBM@@@@@@@@@MMMMMMMMMM@@@@@@BHHSHH$&RBBM@@@@@@@@@@BDO$$HH$&BBBBBBMM#`......................................`:;_~~~~~~~~~~~~~~~~~~~~~~~"*;,..`.. | |
// .\RBM@@@@@@@@@MMMMMMMMMMM@@@@@@BSSgggSENBM@@@@@@@@@@@MMBBBBBBMMMBBBBMMR;................................`:-;_"~~~~~~~~~~~~~~~~~~~~~~~~~"_'`. | |
// \&BBM@@@@@@@@MMMMMMMMMMM@@@@@MMMBDG&&WRBMM@@@@@@@@@@@@MMMMMMM@MBBBBMMMB_.........................`,';__"~\\\\\\\\~~\~~~~~~~~~~~~~~~~"_-`... . | |
// ...\DBBBM@@@@@@@@MMMMMMMMM@@@@@@M@MMMMBBBMM@@@@@@@@@@@@@@@MMBRBBMMMBBBBM@MBi................``,';__"~\\ii\\\\\\\\\\\\\\\~~~~~~~~~~~~~_;,................ | |
// .. ....-wBBBBM@@@@@@@@MMMMMMMM@@@@@@@B@MMBMMMMM@@@@@@@@@@@@@@@@MMMBMMMMMBBBBM@MMI```````````,';__"~\iiiiiiiiiiiii\\\\\\\\\\\\\\\~\~~~~~_;,.................... | |
// .......;0BBBBBM@@@@@@@MMMMMMMM@@@@@MM@MMMMBBBRMMM@@M@@@@@@@@@@@@@MMMMMM@MBBBBM@MBi```,';__*~\iiiiiiiiiiiiiiiiiiiiiiiiiiii\\\\\\\\\\\"_-,........................ | |
//...........~SBBBBBBM@@@@@@@MMMMMMM@@@@MMMMMMMMMBMMBMMMMMB@@@@@@@@@@@@@MMMMMMMMBBBBMMMBr*~\i!!!!!!!!!!!!!!!!!!!!!iiiiiiiiiiiiiiiiiii\\\~*-`............................ | |
//........`lFNBBBBBBBB@@@@@@MMMMMMMM@@MMMMMMM@MMMMMMMMM@@MM@@@@@@@@MDRMMMMMMMMMBBBBMMMMN|^rrr^^^^^^^^^^^^^^^!!!!!!!!!iiiiiiiiiiiiiiii~_;,`............................. | |
//........,]DBBBBBBBBBM@@@@@MMMMMM@@@MMMMMMMMMMBMBMBBM@@@B@@@@@@@@@U:^HBMMMMMMMBBBBMMMMwlllllllllllllrrrrrrrr^^^^^!!!!!!!!iiiiiiii~_;,`................................ . | |
//..........*$BBBBBBBBM@@@@@MMMMMM@MMMMMMMMMMMMMMBMMMM@@MB@@@@@@MB&]*~+&MMMMMMBBBBBMMMMpIIIIIIIlllllllllllllllrrr^^^^^^!!!!!!ii~_-,``..`............................... . | |
//...........fHBBBBBBRMMMMMMMMMMMMMMMMMMMMMMMMRRMBMBMM@MRBBNS4[|l|+++>jpMMMBBMBBBBBMMMMHj|||||I|IIIIIIIIIIIIllllllrrr^^^^!!i*;:````````............................... | |
//..........``,rkDBBE~~c2$BMMMMMMMMMMMMMMMMMMM&NMBBBMM@Mn_~|tttt1t>t]X1?BMMMMBBBBBMMM%s1jjj++++++++++|||Ir!!lIIllllllrr^i*;:,`````````................................ | |
//..........`````;v#j,,,,,'*i|>+I^!i\i^+v[L7]coDMBRBMMMB>_\j11}h%0so%NC[RMMBBBBBBBShFx==jI^!Ittt>>>jjj|^~~\ilIIIIIllli"_',,,``````````.............................. | |
//..........```````,,,,,,,,::::::''''---;;;;;;|NMBBBMM@Bl__i+>cHBBBBNBBDMMBRDBBBBBXvft|ll|t1111111=tl!!^I+++|||IIli";'::,,,,,`````````............................. | |
//..........````````,,,,,,:::::::'''---;;;;;;;rXBBBDBMMB1l+t=IlkRB&k]nwRMMMBGEWRBBE7?fv??}vvvfff11|~_!+jj+++||li*;':::::,,,,`````````............................. .. | |
//..........````````,,,,,,::::::'''---;;;;;;___jBBE$WMMM5]?c]xzo2gaxzzoDBBMMB&A&BMM&&$U][c??}vvf>r__;;_"ilI!~_;''::::::,,,,````````........................... . | |
//..........`````````,,,,,:::::'''----;;;;;____nMN00gRBMCl^rtsokkooossoEBBRSBBDNBMMMBBNzL][??}vfl~__;;;;;;;-''''::::,,,,,`````````.......................... | |
//...........```````,,,,,,:::::''--;;;;;;____"~2MBEHNBMMX|1[okkkkkkkookSMBBGWBBRBBMMMMB&0zLc?}vfi_;;;;;;;--'''::::,,,,,`````````.......................... | |
//.............```````,,,,,,::::'--;;;;;____*"|$MBBBMMMMBCFFFF4FF444Faos$BMMMEOMMBBBMMMBBRmo7[}f1i_;;;;;-''::::,,,,````````........................... | |
//................`````,,,,::::''--;;;;____*~~sGMMMMMMM@M$5500qpp2aaaFo]f?zoke#BMMMBDNBMMBBR$kL?f=l_;--'':::,,,,`````````........................... | |
// ............`````,,,:::::'--;;;;;___*"~iwMMMMMMMMMMR#A%XC5qp2ak}jjjtt=1v?oSBMMMRHORBMMBNhxcf=";-'::,,,,,```````............................. | |
// ..........```````,,::::''--;;;;;____*"~ieMBMMMMMMMMBOS#UX5q2Fkc|IIIIIIII|j=caEBMB&ggERBBDo7?|_;-::,,,````````................................ | |
// ............`````,,,,:::''--;;;;;;____*"~i^oMBMMMMMMMMMN$gUC024kx|l^!!iiii!!!^lI|vkmRBBBRBBMg7I_;-'::,,``````................................... . .. | |
//...........`````,,,,:::''--;;;;;_____"""~~i^kMMBMMMMMMMMBOwX5peks1^iii\\~~~~~~~\\\iiirtLkCHRBBXl;-'':::,,,,`````.................................. | |
//........``````,,,:::'---;;;;;;______""*"~~\ifNMBBBBMMMMMM&ACpek[Iii\\~~~""""""""""""*______*\l\;-''''::::,,,,``````................................. | |
//...``````,,,,,:::''-;;;;;;__________""*""~~\i]BMBRDRBMMMM$XpkcIi\~~~""""""____________;;;;;;;----''''::::::,,,,````````.............................. | |
//```````,,,,:::'''--;;;;;____________""*"""~~\izOBBNgEBMMDCovl\~~"""""*______________;;;;;;;;-----'''':::::::,,,,,````````.............................. | |
//``````,,,,::::'''-;;;;;;____________""""""*"""~ivF&BBMMBo+i~""""""_______________;;;;;;;;;;;----''''':::::::,,,,,,,`````````............................... . | |
//````,,,,,::::'''--;;;;;;;_______________""""""""*"\oOD&h^"""__________________;;;;;;;;;;;;;-----'''''::::::::,,,,,,,,,````````............................... .. | |
//``,,,,,,,:::::''---;;;;;;;;;________________________*"*_____________________;;;;;;;;;;;;;;------'''''::::::::,,,,,,,,,````````````.............................. | |
//``,,,,,,,:::::'''-----;;;;;;;;_______________________________________;;;;;;;;;;;;;;;;;;;;;-----'''''':::::::::,,,,,,,,``````````````............................ .. | |
pragma solidity ^0.8.0; | |
import '@openzeppelin/contracts/token/ERC721/ERC721.sol'; | |
import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; | |
import '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol'; | |
import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol'; | |
import '@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol'; | |
import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol'; | |
import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol'; | |
import '@openzeppelin/contracts/utils/Address.sol'; | |
import '@openzeppelin/contracts/utils/Strings.sol'; | |
import '@openzeppelin/contracts/access/Ownable.sol'; | |
import '@openzeppelin/contracts/utils/introspection/ERC165.sol'; | |
import '@openzeppelin/contracts/token/common/ERC2981.sol'; | |
contract Cowboy is ERC721, ERC721Enumerable, Ownable, ERC2981 { | |
using Address for address; | |
using Strings for uint256; | |
using ECDSA for bytes32; | |
string private _notRevealedUri = ""; | |
string private _baseURIextended= ""; | |
string private _contractUri = ""; | |
string private _termsUrl = "https://freescape.io/terms-of-service"; | |
uint256 private _maxSupply = 10000; | |
uint private _whitelistPrice = 0.05 ether; | |
uint private _basePrice = 0.088 ether; | |
uint96 private _royaltyFeesInBips = 750; | |
address _treasuryAddress = 0xB565D3A7Bcf568f231726585e0b84f9E2a3722dB; | |
bool public mintIsOpen = false; | |
bool public revealed = false; | |
constructor() ERC721("Space Cowboys", "COWBOYS") { | |
setRoyalty(_treasuryAddress, _royaltyFeesInBips); | |
} | |
// OpenSea Metadata | |
// Comes in this form: | |
// { | |
// "name": "Cowboys", | |
// "description": "Cryptyde Cowboys Collection", | |
// "image": "external-link-url/{imageCID}.png", | |
// "animation_url": "external-link-url/{modelCID}.glb", | |
// "external_link": "https://freescape.io/example-link.png", | |
// "seller_fee_basis_points": 500, # Indicates a 5% seller fee. | |
// "fee_recipient": "0x..." # Where seller fees will be paid to. | |
// } | |
function contractURI() public view returns (string memory) { | |
return _contractUri; | |
} | |
function setContractUri(string memory contractUri) public onlyOwner { | |
_contractUri = contractUri; | |
} | |
function setBasePrice(uint basePrice) public onlyOwner { | |
_basePrice = basePrice; | |
} | |
function setWhitelistPrice(uint whitelistPrice) public onlyOwner { | |
_whitelistPrice = whitelistPrice; | |
} | |
function setRoyalty(address receiver, uint96 royaltyFeesInBips) public onlyOwner { | |
_setDefaultRoyalty(receiver, royaltyFeesInBips); | |
} | |
function setTreasuryAddres(address treasuryAddress) public onlyOwner { | |
_treasuryAddress = treasuryAddress; | |
} | |
function setRevealed(bool reveal) public onlyOwner { | |
revealed = reveal; | |
} | |
function setNotRevealedUri(string memory notRevealedURI) public onlyOwner { | |
_notRevealedUri = notRevealedURI; | |
} | |
function notRevealedUri() public view returns (string memory) { | |
return _notRevealedUri; | |
} | |
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { | |
super._beforeTokenTransfer(from, to, tokenId); | |
} | |
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981, ERC721Enumerable) returns (bool) { | |
return super.supportsInterface(interfaceId); | |
} | |
function setMintOpen(bool open) public onlyOwner { | |
mintIsOpen = open; | |
} | |
function setBaseURI(string memory baseURI_) external onlyOwner { | |
_baseURIextended = baseURI_; | |
} | |
function _baseURI() internal view virtual override returns (string memory) { | |
return _baseURIextended; | |
} | |
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) | |
{ | |
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); | |
if(revealed == false) { | |
return _notRevealedUri; | |
} | |
string memory currentBaseURI = _baseURI(); | |
return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, (tokenId + 1).toString(), ".json")) : ""; | |
} | |
function _mintToken(address to, bool whitelisted) internal { | |
require(owner() == msg.sender || mintIsOpen, 'Minting is currently closed'); // Don't allow anyone to mint if the mint is closed | |
require(to != address(0), 'Cannot send to 0x0'); // mint to the 0x0 address | |
require(totalSupply() + 1 <= _maxSupply, 'Not enough tokens left to buy!'); // cannot mint more than maxIndex tokens | |
require(owner() == msg.sender || msg.value >= ( whitelisted ? _whitelistPrice : _basePrice ), "Insufficient funds!"); | |
uint _mintIndex = totalSupply(); | |
_safeMint(msg.sender, _mintIndex); | |
} | |
function mintWhiteList(bytes memory signature) public payable { | |
bytes32 messagehash = keccak256(abi.encodePacked(address(this), owner(), msg.sender)); | |
address signer = messagehash.toEthSignedMessageHash().recover(signature); | |
if(owner() == signer) { | |
_mintToken(msg.sender, true); // whitelisted = true | |
} else { | |
_mintToken(msg.sender, false); | |
} | |
withdraw(); | |
} | |
function mint() public payable { | |
_mintToken(msg.sender, false); // whitelisted = false | |
withdraw(); | |
} | |
function withdraw() public payable onlyOwner { | |
uint256 balance = address(this).balance; | |
payable(_treasuryAddress).transfer(balance); | |
} | |
function setTermsAndConditions(string memory url) public onlyOwner { | |
_termsUrl = url; | |
} | |
function termsAndConditions() public view returns (string memory) { | |
return _termsUrl; | |
} | |
function aMessageFromPresidentChampion() public pure returns (string memory) { | |
return "If you are not first, you are last. While we are building the future, why are you still in the past?"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment