---
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