---
# System prepended metadata

title: Peach Drop Spec
tags: [peach drop, ' nft']

---

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


