use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use cosmwasm_std::Binary; use cw721::Expiration; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] pub struct InstantiateMsg { /// Name of the NFT contract pub name: String, /// Symbol of the NFT contract pub symbol: String, /// The minter is the only one who can create new NFTs. /// This is designed for a base NFT that is controlled by an external program /// or contract. You will likely replace this with custom logic in custom NFTs pub minter: String, } /// This is like Cw721ExecuteMsg but we add a Mint command for an owner /// to make this stand-alone. You will likely want to remove mint and /// use other control logic in any contract that inherits this. #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] #[serde(rename_all = "snake_case")] pub enum ExecuteMsg { /// Transfer is a base message to move a token to another account without triggering actions TransferNft { recipient: String, token_id: String }, /// Send is a base message to transfer a token to a contract and trigger an action /// on the receiving contract. SendNft { contract: String, token_id: String, msg: Binary, }, /// Allows operator to transfer / send the token from the owner's account. /// If expiration is set, then this allowance has a time/height limit Approve { spender: String, token_id: String, expires: Option, }, /// Remove previously granted Approval Revoke { spender: String, token_id: String }, /// Allows operator to transfer / send any token from the owner's account. /// If expiration is set, then this allowance has a time/height limit ApproveAll { operator: String, expires: Option, }, /// Remove previously granted ApproveAll permission RevokeAll { operator: String }, /// Mint a new NFT, can only be called by the contract minter Mint(MintMsg), /// Burn an NFT the sender has access to Burn { token_id: String }, } #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] pub struct MintMsg { /// Unique ID of the NFT pub token_id: String, /// The owner of the newly minter NFT pub owner: String, /// Universal resource identifier for this NFT /// Should point to a JSON file that conforms to the ERC721 /// Metadata JSON Schema pub token_uri: Option, /// Any custom extension used by this contract pub extension: T, } #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum QueryMsg { /// Return the owner of the given token, error if token does not exist /// Return type: OwnerOfResponse OwnerOf { token_id: String, /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, }, /// Return operator that can access all of the owner's tokens. /// Return type: `ApprovalResponse` Approval { token_id: String, spender: String, include_expired: Option, }, /// Return approvals that a token has /// Return type: `ApprovalsResponse` Approvals { token_id: String, include_expired: Option, }, /// List all operators that can access all of the owner's tokens /// Return type: `OperatorsResponse` AllOperators { owner: String, /// unset or false will filter out expired items, you must set to true to see them include_expired: Option, start_after: Option, limit: Option, }, /// Total number of tokens issued NumTokens {}, /// With MetaData Extension. /// Returns top-level metadata about the contract: `ContractInfoResponse` ContractInfo {}, /// With MetaData Extension. /// Returns metadata about one particular token, based on *ERC721 Metadata JSON Schema* /// but directly from the contract: `NftInfoResponse` NftInfo { token_id: String, }, /// With MetaData Extension. /// Returns the result of both `NftInfo` and `OwnerOf` as one query as an optimization /// for clients: `AllNftInfo` AllNftInfo { token_id: String, /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, }, /// With Enumerable extension. /// Returns all tokens owned by the given address, [] if unset. /// Return type: TokensResponse. Tokens { owner: String, start_after: Option, limit: Option, }, /// With Enumerable extension. /// Requires pagination. Lists all token_ids controlled by the contract. /// Return type: TokensResponse. AllTokens { start_after: Option, limit: Option, }, // Return the minter Minter {}, } /// Shows who can mint these tokens #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)] pub struct MinterResponse { pub minter: String, }