--- tags: peach drop, nft --- # Peach Drop Spec ## NFT contract ERC721 4/25 ERC721('PeachDrop', 'PEACHDROP') mint - allow more than one, but have a max? - transfer to safe or use a withdraw function later? price options - fixed eth - start with this - admin function to change in case of emergency? - usdc - floating price with chainlink lookup tokenUri - don't use base uri, but have one for unredeemed and 1 for redeemed - override this function to look at redeemed flag and return baseuri on this redeem - admin role only - functions to revoke/change this admin - batches tokenIds - loops and adds adds to mapping - args: tokenIds []uint256 - could not mess with tokenUri much and just do this on redeem?: _setTokenURI(uint256 tokenId, string _tokenURI) 4/20 Init - Mint deadline - Redeem deadline - DAO address - Extras - tokenID to redeemed flag mapping - view function to see if redeemed - view canMint? - view canRedeem? URI - generated images - artwork tbd - some random attributes - redeemed/unredeemed version toggled on redeemed flag - other meta - name/description? - any attributes? - set up for future years/products - traits from images Mint - Limit to 1000 tokens - Mint deadline - Mint fund routing - % to DAO - % to operating cost/team fund Redeem - eatPeach function - arg: tokenId - msg.sender must hold nft - must be before redeem deadline - must not be redeemed - calls mintShares on DAO - batch redeem? ## Website Web app - connect wallet - a few content pages - about, roadmap, claim+redeem?, what else? - states - in mint window - in redeem window - post redeem/tease next drop Mint flow - check available nfts - check mint deadline - display cost, deadline countdown and current mint count - eth or do we need to use stable to ensure price action doesn't mess up cost? - mint function/tx/success/error Redeem flow - check nfts held and check if unredeemed - display nfts held and redeem status - redeem function/tx/success/error - before or after the redeem we need to capture the order data - shipping details - box amount - eth address - could have a backend service that does the redeem and forwards tx/address/tokenID and connects to shopify contact - maybe the redeem is owner only Shopify integration - Part of redeem flow - Create an 'Order' in shopify w/out charging cc - might need api/lambda [Shopify docs](https://shopify.dev/docs/api) https://shopify.dev/docs/api/blockchain/components/tokengate Subgraph for the nft contract might be helpful? - but might add complexity and cost if on mainnet ## DAO Name: The Peach Pit Shares token: - Bites/BITE Loot token: - Juice/JUICE - We likely won't use the loot token Voting: 2 days Grace: 3 days - start with hours here until we get the shaman added Quorum: 0 Min Retention: 66 Sponsor Threshold: 1 New offering: 0 Starting members: Team/Farmers How many shares for team? Post summon: Need to setShaman with nft contract once that is launched ## Reference [SBT example](https://github.com/mouseless-eth/SoulBound-Profile/blob/c9663738dd29b9109677b8a791d36bced231a798/src/SoulBound.sol) [daogroni shaman](https://blockscout.com/xdai/mainnet/address/0x1d0f5D1f5E1FB74a86c19309368D434E9f7BB608/contracts#address-tabs) ### 4/21 notes cancellation number along those lines the complexity of a chainlink call + option to pay in usdc // fixed cost options 1. usdc + eth at fixed price (chainlink) - most complex - gameable for people to wait on eth dropping - we still need to convert at right time if not enough usdc to cover costs - do nft buyers use usdc? 2. just usdc - simple - safest from a cost perspective, but no eth exposure - do nft buyers use usdc? 3. just eth at fixed price w/ chain link - gameable for people to wait on eth dropping? - maybe we still need to convert at right time for costs? 4. fixed eth and we adjust the dao cut based on eth price - all mint funds go to one spot - surplus of cost goes to dao after redeem window - simplest implementation - less splits/gas cost - con is the dao funds are not in the dao at day one - could shorten mint window to create less risk - upside if eth moons // SBT - thinking we don't bother with this - dao shares are what give benefits after peach box/tshirt - keeps secondary market open for redeemed peaches // Secondary sales royalties? // What if we allow minting over the 1000, but cap redeem at 1000 - might increase pressure to redeem - redeem next year? // Redeem issues 1. Gas cost - could be rough for user 2. Connecting redeem with shopify order if user has to make tx, then submit the order - could redeem on etherscan options: 1. track msg.sender in redeem mapping - logic in ui to stop shopify order form submission if tokenID not redeemed by address - user still pays gas 2. server to handle redeem - redeem is by a pk we control - takes the tokenID and PII - makes the order in shopify - we redeem (gas hit) - needs a signature - lambda checks signature address owns tokenID 3. 2 + we can batch redeem function to save gas - could cause some disconnect 4. remove redeem step / all nfts are redeemed after a date / or make is time based and shopify order just checks sig and ownership 5. Redeem is offline shopify order - takes tokenID and signature to verify ownership - we batch redeem when gas is low - part of costs