As the name suggests, the Crowdfund ADO is a smart contract that allows users to start a crowdfund for their projects by selling NFTs.
The owner of the contract can start the crowdfund by executing StartSale. Before starting the sale, they can use the contract to mint the tokens from the specified token_address in the InstantiateMsg. In order to be eligible for the sale, the NFT needs to be minted and owned by the crowdfund ADO.
We allow for owners other than the contract, incase the creator wants to set aside a few tokens for some other use, say airdrop, team allocation, etc., but only those which have the contract as the owner will be available to sell.
Every sale sets a min_tokens_sold which specifies the minimum number of tokens that need to be sold in order for the sale to be considered successful. This acts as an insurance for the buyers by allowing them to get a refund in case this goal was not achieved.
The contract supports modules to extend its functionality.
Optional address to specify as the owner of the ADO being created. Defaults to the sender if not specified.
Mints a new token to be sold in a future sale. The message fields are defined and sent to the corresponding token contract defined as the token_address in the instantiation to mint. We use a vector of MintMsg to facilitate bulk minting for projects.
We allow for owners to be other than the contract incase the creator wants to set aside a few tokens for some other use, say airdrop, team allocation, etc... Only the tokens minted with the contract as the owner will be available to sell in the sale.
Only the contract owner can execute Mint.
Minting is only allowed before a sale starts.
The limit for the number of MintMsg is 100.
Unlike other mint messages, the crowdfund mint allows users to keep the owner field empty defaulting the owner to the crowdfund ADO, making it eligible for a sale.
The recipient of the funds if the sale met the min_tokens_sold.
Purchases tokens based on the specified limit or amount of funds sent.
A sale needs to be in progress in order to purchase tokens.
If number_of_tokens is not specified, the maximum number of tokens are purchased based on the funds allocated (Unless we reach the maximum allowed).
An optional limit to the number of tokens to purchase. If not specified, the maximum number of tokens are purchased based on the funds allocated (Unless we reach the maximum allowed).
Purchases a token with the specified token_id.
The token Id of the NFT to purchase.
If the minimum number of tokens to be sold was not reached. The user can claim their own refund. Refunding will return the funds to the buyer and burn the token.
Ends the sale. In the case that the minimum number of tokens to be sold is not achieved, refunds are sent to the buyers and tokens are burnt. If the minimum amount of tokens sold was achieved, the tokens are sent to the buyers and the funds to the recipient.
The sale can only be ended if the expiration of the sale has been reached or all the tokens have been sold.
The EndSale message needs to be called twice. Once for distribution of NFTs and another for distribution of funds.
An optional limit on the number of transferred tokens in case the sale was a success, or the number of refunds to issue in case the sale did not succeed (min amount not reached).
Uses the modules feature.
The rest of the execute messages can be found in the ADO Base section.
Queries the state of the sale. State is only available once a sale has started.