Address
0x5f1cbe84d44e292fe3eae51b87f34bbdc8f04fc8Current Holdings
$0.00
TXs sent
not counted
First Active
2025-02-20
block 22,760,334
Last Active
574 days ago
block 22,760,334
Funded By
not identified
Net worth historyi
No net-worth snapshots recorded yet
partial matchBBYCsolc 0.8.7+commit.e28d00a7runtime partial · creation partial
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.6;
import "@openzeppelin/contracts/access/Ownable.sol";
import "./erc721a/contracts/ERC721A.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
contract BBYC is ERC721A, Ownable {
uint public price = 0.03 ether;
uint public maxSupply = 10000;
uint public maxTx = 20;
bytes32 public merkleRoot;
bool private mintOpen = false;
bool private presaleOpen = false;
string internal baseTokenURI = '';
constructor() ERC721A("Bored Bits Yacht Club", "BBYC") {}
function toggleMint() external onlyOwner {
mintOpen = !mintOpen;
}
function togglePresale() external onlyOwner {
presaleOpen = !presaleOpen;
}
function setPrice(uint newPrice) external onlyOwner {
price = newPrice;
}
function setBaseTokenURI(string calldata _uri) external onlyOwner {
baseTokenURI = _uri;
}
function setMerkleRoot(bytes32 root) external onlyOwner {
merkleRoot = root;
}
function setMaxSupply(uint newSupply) external onlyOwner {
maxSupply = newSupply;
}
function setMaxTx(uint newMax) external onlyOwner {
maxTx = newMax;
}
function _baseURI() internal override view returns (string memory) {
return baseTokenURI;
}
function buyTo(address to, uint qty) external onlyOwner {
_mintTo(to, qty);
}
function buy(uint qty, bytes32[] memory proof) external payable {
require(presaleOpen, "store closed");
require(verify(proof), "address not in whitelist");
_buy(qty);
}
function buy(uint qty) external payable {
require(mintOpen, "store closed");
_buy(qty);
}
function _buy(uint qty) internal {
require(qty <= maxTx && qty > 0, "TRANSACTION: qty of mints not alowed");
uint free = balanceOf(_msgSender()) == 0 ? 1 : 0;
require(msg.value >= price * (qty - free), "PAYMENT: invalid value");
_mintTo(_msgSender(), qty);
}
function mint(uint qty) external payable {
require(qty <= maxTx && qty > 0, "TRANSACTION: qty of mints not alowed");
require(msg.value >= price * qty, "PAYMENT: invalid value");
_mintTo(_msgSender(), qty);
}
function _mintTo(address to, uint qty) internal {
require(qty + totalSupply() <= maxSupply, "SUPPLY: Value exceeds totalSupply");
_mint(to, qty);
}
function withdraw() external onlyOwner {
payable(_msgSender()).transfer(address(this).balance);
}
function verify(bytes32[] memory proof) internal view returns (bool) {
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
return MerkleProof.verify(proof, merkleRoot, leaf);
}
}