# Bluwhale NFT License

### Bluwhale NFT License

* Non-transferable ERC-721 for first year (can be updated with governance).
* Only syndicate funds can transfer NFT once and redistribute to their community.
* A maximum of 100,000 tokens can be minted, with token IDs incrementing automatically.
* Upon redemption, the token ID is permanently destroyed, and any unclaimed veBluwhale reverts to the foundation.
* To redeem the NFT License, transfer the NFT to our predefined address. Redemption will be available 6 months after the TGE.

Function Definitions & Explanations

Copy

// SPDX-License-Identifier: GPL-3.0

<br>

pragma solidity ^0.8.20;

\
\ <br>

interface IBluwhaleNft {

<br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice This struct represents meta information bound to TokenID,

<br>

&#x20;   \*

<br>

&#x20;   \* \`code\`: code of this token entered by buyer

<br>

&#x20;   \* \`price\`: price of this token paid by buyer

<br>

&#x20;   \* \`tier\`: tier of this token

<br>

&#x20;   \*/

<br>

&#x20;  struct MetaData {

<br>

&#x20;      string code;

<br>

&#x20;      uint64 price;

<br>

&#x20;      uint8 tier;

<br>

&#x20;  }

\
\ <br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice mint {count} nft to {receiver}.

<br>

&#x20;   \* @notice totalSupply 100,000

<br>

&#x20;   \*

<br>

&#x20;   \* @dev Auth: Only Owner.

<br>

&#x20;   \*

<br>

&#x20;   \* @param receiver: nft receiver

<br>

&#x20;   \* @param count: how many nft to be minted to receiver

<br>

&#x20;   \* @param meta: \`MetaData\` of this tokenID

<br>

&#x20;   \*/

<br>

&#x20;  function mint(address receiver, uint256 count, MetaData calldata meta) external;

\
\ <br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice mint {counts} nft to {receivers}.

<br>

&#x20;   \* @notice call \`mint\`

<br>

&#x20;   \*

<br>

&#x20;   \* @dev Auth: Only Owner.

<br>

&#x20;   \*

<br>

&#x20;   \* @param receivers: array of receivers

<br>

&#x20;   \* @param counts: array of counts

<br>

&#x20;   \* @param metas: array of meta

<br>

&#x20;   \*/

<br>

&#x20;  function mintBatch(address\[] calldata receivers, uint256\[] calldata counts, MetaData\[] calldata metas) external;

\
\ <br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice Set BaseURI of all the tokens

<br>

&#x20;   \*

<br>

&#x20;   \* @dev Auth: Only Owner.

<br>

&#x20;   \*

<br>

&#x20;   \* @param newBaseURI: newBaseURI

<br>

&#x20;   \*/

<br>

&#x20;  function setBaseURI(string memory newBaseURI) external;

\
\ <br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice Set TransferProhibitedUntil

<br>

&#x20;   \* @notice When the time has not reached the \`TransferProhibitedUntil\`, ordinary tokens cannot be transferred.

<br>

&#x20;   \*

<br>

&#x20;   \* @dev Auth: Only Owner.

<br>

&#x20;   \*

<br>

&#x20;   \* @param newTransferProhibitedUntil: newTransferProhibitedUntil

<br>

&#x20;   \*/

<br>

&#x20;  function setTransferProhibitedUntil(uint256 newTransferProhibitedUntil) external;

\
\ <br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice Set RedeemAddress

<br>

&#x20;   \* @notice When \`transfer.to\` is RedeemAddress, the token can be transferred under any circumstances

<br>

&#x20;   \*

<br>

&#x20;   \* @dev Auth: Only Owner.

<br>

&#x20;   \*

<br>

&#x20;   \* @param newRedeemAddress: newRedeemAddress

<br>

&#x20;   \*/

<br>

&#x20;  function setRedeemAddress(address newRedeemAddress) external;

\
\ <br>

&#x20;  /\*\*

<br>

&#x20;   \* @notice Set TransferOnceWhitelist

<br>

&#x20;   \* @notice Addresses in the whitelist can transfer tokens once before \`TransferProhibitedUntil\`

<br>

&#x20;   \*

<br>

&#x20;   \* @dev Auth: Only Owner.

<br>

&#x20;   \*

<br>

&#x20;   \* @param whitelist: whitelist

<br>

&#x20;   \*/

<br>

&#x20;  function setTransferOnceWhitelist(address\[] calldata whitelist) external;

<br>

}

<br>
