Skip to content

Instantly share code, notes, and snippets.

@lalalune
Last active July 6, 2022 11:03
Show Gist options
  • Save lalalune/f85637ba899cdcd0ad5e570b7b030d83 to your computer and use it in GitHub Desktop.
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=
// 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