-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(taikoon): migrate Taikoon NFT smart contracts here (#16849)
- Loading branch information
Showing
23 changed files
with
2,203 additions
and
66 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,9 +24,7 @@ jobs: | |
submodules: recursive | ||
|
||
- name: Install Foundry | ||
uses: foundry-rs/foundry-toolchain@v1 | ||
with: | ||
version: nightly-2cb875799419c907cc3709e586ece2559e6b340e | ||
uses: foundry-rs/[email protected] | ||
|
||
- name: Install pnpm dependencies | ||
uses: ./.github/actions/install-pnpm-dependencies | ||
|
@@ -35,6 +33,10 @@ jobs: | |
working-directory: ./packages/taikoon | ||
run: forge fmt --check | ||
|
||
- name: Solidity compilation | ||
working-directory: ./packages/taikoon | ||
run: pnpm compile | ||
|
||
- name: Unit Tests | ||
working-directory: ./packages/taikoon | ||
run: pnpm clean && pnpm test | ||
run: pnpm test |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
LOCALHOST_PRIVATE_KEY= | ||
LOCALHOST_ADDRESS= | ||
HOLESKY_PRIVATE_KEY= | ||
HOLESKY_ADDRESS= | ||
DEVNET_PRIVATE_KEY= | ||
DEVNET_ADDRESS= | ||
SEPOLIA_PRIVATE_KEY= | ||
SEPOLIA_ADDRESS= | ||
KATLA_PRIVATE_KEY= | ||
KATLA_ADDRESS= | ||
IPFS_BASE_URI= |
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity 0.8.24; | ||
|
||
import { MerkleProof } from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; | ||
import { ContextUpgradeable } from | ||
"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; | ||
|
||
/// @title MerkleWhitelist | ||
/// @dev Merkle Tree Whitelist | ||
/// @custom:security-contact [email protected] | ||
contract MerkleWhitelist is ContextUpgradeable { | ||
event RootUpdated(bytes32 _root); | ||
event MintConsumed(address _minter, uint256 _mintAmount); | ||
|
||
error MINTS_EXCEEDED(); | ||
error INVALID_PROOF(); | ||
error INVALID_TOKEN_AMOUNT(); | ||
|
||
/// @notice Merkle Tree Root | ||
bytes32 public root; | ||
/// @notice Tracker for minted leaves | ||
mapping(bytes32 leaf => bool hasMinted) public minted; | ||
|
||
uint256[48] private __gap; | ||
|
||
/// @custom:oz-upgrades-unsafe-allow constructor | ||
constructor() { | ||
_disableInitializers(); | ||
} | ||
|
||
/// @notice Contract initializer | ||
/// @param _root Merkle Tree root | ||
function initialize(bytes32 _root) external initializer { | ||
__Context_init(); | ||
root = _root; | ||
} | ||
|
||
/// @notice Check if a wallet can free mint | ||
/// @param _minter Address of the minter | ||
/// @param _maxMints Max amount of free mints | ||
/// @return Whether the wallet can mint | ||
function canMint(address _minter, uint256 _maxMints) public view returns (bool) { | ||
bytes32 _leaf = leaf(_minter, _maxMints); | ||
return !minted[_leaf]; | ||
} | ||
|
||
/// @notice Generate a leaf from the minter and mint counts | ||
/// @param _minter Address of the minter | ||
/// @param _maxMints Max amount of free mints | ||
/// @return The leaf hash | ||
function leaf(address _minter, uint256 _maxMints) public pure returns (bytes32) { | ||
return keccak256(bytes.concat(keccak256(abi.encode(_minter, _maxMints)))); | ||
} | ||
|
||
/// @notice Internal initializer | ||
/// @param _root Merkle Tree root | ||
function __MerkleWhitelist_init(bytes32 _root) internal initializer { | ||
__Context_init(); | ||
root = _root; | ||
} | ||
|
||
/// @notice Update the merkle tree's root | ||
/// @param _root The new root | ||
function _updateRoot(bytes32 _root) internal { | ||
root = _root; | ||
emit RootUpdated(_root); | ||
} | ||
|
||
/// @notice Permanently consume mints from the minter | ||
/// @param _proof Merkle proof | ||
/// @param _maxMints Max amount of free mints | ||
function _consumeMint(bytes32[] calldata _proof, uint256 _maxMints) internal { | ||
if (!canMint(_msgSender(), _maxMints)) revert MINTS_EXCEEDED(); | ||
bytes32 _leaf = leaf(_msgSender(), _maxMints); | ||
if (!MerkleProof.verify(_proof, root, _leaf)) revert INVALID_PROOF(); | ||
minted[_leaf] = true; | ||
emit MintConsumed(_msgSender(), _maxMints); | ||
} | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,118 @@ | ||
// SPDX-License-Identifier: GPL-3.0 | ||
pragma solidity ^0.8.24; | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity 0.8.24; | ||
|
||
contract TaikoonToken { } | ||
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; | ||
import { Ownable2StepUpgradeable } from | ||
"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; | ||
import { ERC721EnumerableUpgradeable } from | ||
"@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol"; | ||
import { UUPSUpgradeable } from | ||
"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; | ||
|
||
import { MerkleWhitelist } from "./MerkleWhitelist.sol"; | ||
|
||
/// @title TaikoonToken | ||
/// @dev The Taikoons ERC-721 token | ||
/// @custom:security-contact [email protected] | ||
contract TaikoonToken is | ||
ERC721EnumerableUpgradeable, | ||
UUPSUpgradeable, | ||
Ownable2StepUpgradeable, | ||
MerkleWhitelist | ||
{ | ||
/// @notice The current supply | ||
uint256 private _totalSupply; | ||
// Base URI required to interact with IPFS | ||
string private _baseURIExtended; | ||
|
||
uint256[48] private __gap; | ||
|
||
error MAX_MINTS_EXCEEDED(); | ||
error MAX_SUPPLY_REACHED(); | ||
error MINTER_NOT_WHITELISTED(); | ||
error TOKEN_NOT_MINTED(); | ||
|
||
/// @notice Contract initializer | ||
/// @param _rootURI Base URI for the token metadata | ||
/// @param _merkleRoot Merkle tree root for the whitelist | ||
function initialize(string memory _rootURI, bytes32 _merkleRoot) external initializer { | ||
__ERC721_init("Taikoon", "TKOON"); | ||
__Ownable_init(_msgSender()); | ||
__MerkleWhitelist_init(_merkleRoot); | ||
_baseURIExtended = _rootURI; | ||
} | ||
|
||
/// @notice Update the whitelist's merkle root | ||
/// @param _root New merkle root | ||
function updateRoot(bytes32 _root) external onlyOwner { | ||
_updateRoot(_root); | ||
} | ||
|
||
/// @notice Mint a token, handling the free vs paid internally | ||
/// @param _proof Merkle proof validating the minter | ||
/// @param _maxMints The amount of tokens to mint | ||
/// @return tokenIds The minted token ids | ||
function mint( | ||
bytes32[] calldata _proof, | ||
uint256 _maxMints | ||
) | ||
external | ||
returns (uint256[] memory) | ||
{ | ||
if (!canMint(_msgSender(), _maxMints)) revert MINTER_NOT_WHITELISTED(); | ||
|
||
_consumeMint(_proof, _maxMints); | ||
return _batchMint(_msgSender(), _maxMints); | ||
} | ||
|
||
/// @notice Mint method for the owner | ||
/// @param _to The address to mint to | ||
/// @param _amount The amount of tokens to mint | ||
/// @return tokenIds The minted token ids | ||
function mint(address _to, uint256 _amount) external onlyOwner returns (uint256[] memory) { | ||
return _batchMint(_to, _amount); | ||
} | ||
|
||
/// @notice Get the tokenURI of a particular tokenId | ||
/// @param _tokenId The token ID | ||
/// @return The token URI | ||
function tokenURI(uint256 _tokenId) public view override returns (string memory) { | ||
if (_tokenId > _totalSupply) revert TOKEN_NOT_MINTED(); | ||
return string.concat(_baseURI(), "/", Strings.toString(_tokenId), ".json"); | ||
} | ||
|
||
/// @notice Get the current total supply | ||
/// @return The total supply | ||
function totalSupply() public view override returns (uint256) { | ||
return _totalSupply; | ||
} | ||
|
||
/// @notice Get the max supply of Taikoons | ||
/// @return The max supply | ||
function maxSupply() public pure returns (uint256) { | ||
return 888; | ||
} | ||
/// @notice Calculate the amount of free and paid mints | ||
/// @return The base URI for the token metadata | ||
|
||
function _baseURI() internal view override returns (string memory) { | ||
return _baseURIExtended; | ||
} | ||
|
||
/// @notice Internal method to authorize an upgrade | ||
function _authorizeUpgrade(address) internal virtual override onlyOwner { } | ||
|
||
/// @notice Internal method to batch mint tokens | ||
/// @param _to The address to mint to | ||
/// @param _amount The amount of tokens to mint | ||
/// @return tokenIds The minted token ids | ||
function _batchMint(address _to, uint256 _amount) private returns (uint256[] memory tokenIds) { | ||
if (_totalSupply + _amount > maxSupply()) revert MAX_SUPPLY_REACHED(); | ||
tokenIds = new uint256[](_amount); | ||
|
||
for (uint256 i; i < _amount; ++i) { | ||
tokenIds[i] = ++_totalSupply; | ||
_mint(_to, tokenIds[i]); | ||
} | ||
} | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
{ | ||
"blobs": [ | ||
"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" | ||
] | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
freeMints,address | ||
100,0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 | ||
100,0x70997970C51812dc3A010C7d01b50e0d17dc79C8 | ||
100,0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC | ||
100,0x90F79bf6EB2c4f870365E785982E1f101E93b906 | ||
100,0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
{ | ||
"format": "standard-v1", | ||
"tree": [ | ||
"0x1c3b504b4d5640d26ad1aa3b57a9df9ec034f19239768e734b849c306d10b110", | ||
"0x4cf915673e85b4e9ccf29a222e38d5bf700e621f8d1fa1b9dc32c5eb518e3ee9", | ||
"0xf81b4a0419e54333847754d4d8f75b5debd786bc934fcd9a75e6a84324fcd262", | ||
"0xb96d191e2b17e998f580dda00f309f35a73c7aa7de560cbf9512536c3bec5400", | ||
"0xfa31eb8d65ff2307b7026df667a06a19aade0151ed701ed2307295ae4fa48364", | ||
"0xd564c879701263dc95ed8b12a3ccc0068725c20abe9b3f974d37039d3502004a", | ||
"0xcfa52795847379e100e5fe363a62abec587da5ae587614c82afb0af917d037c6", | ||
"0x6a9ce9822687cfc256f353882a96be5fe95f4de311b84f737ad8a5e184a0dd4f", | ||
"0x216e60a5ff1ea005e332f4ff55613abd29e314ea5de98b3c27162aad1428f5f4" | ||
], | ||
"values": [ | ||
{ | ||
"value": ["0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "100"], | ||
"treeIndex": 8 | ||
}, | ||
{ | ||
"value": ["0x70997970C51812dc3A010C7d01b50e0d17dc79C8", "100"], | ||
"treeIndex": 7 | ||
}, | ||
{ | ||
"value": ["0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", "100"], | ||
"treeIndex": 4 | ||
}, | ||
{ | ||
"value": ["0x90F79bf6EB2c4f870365E785982E1f101E93b906", "100"], | ||
"treeIndex": 6 | ||
}, | ||
{ | ||
"value": ["0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", "100"], | ||
"treeIndex": 5 | ||
} | ||
], | ||
"leafEncoding": ["address", "uint256"], | ||
"root": "0x1c3b504b4d5640d26ad1aa3b57a9df9ec034f19239768e734b849c306d10b110" | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
freeMints,address | ||
10,0x8f63e3cD0D14cAef993E59B4e01e3D404cF3c1B7 | ||
10,0x2E2989015f5818A256EB967940454EfE8a0B4b5d | ||
10,0x927a146e18294efb36edCacC99D9aCEA6aB16b95 | ||
10,0x4757D97449acA795510b9f3152C6a9019A3545c3 | ||
10,0x424bFb32f78731252a6BCeDc828E38e2701DAAEf | ||
10,0xC66fAdfFeb6DA3b9A7FA3C71130F881e3a9B13fb |
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
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
Oops, something went wrong.