Overview
Document and implement the cornerstone system - premium set stones available exclusively to show hosts, venues, and promoters as a booking fee mechanism.
What is a Cornerstone?
Definition (captured from Justin, Dec 3 2025):
Cornerstones are a much more expensive set stone that are only available to the show host / venue / event / promoter. It's basically a way of paying a booking fee to a band, and getting merch in return.
Key Characteristics
- Premium pricing: Significantly more expensive than regular set stones
- Restricted access: Only venue/promoter can mint
- Booking fee mechanism: Payment goes to band as booking guarantee
- Collectible value: Venue gets unique NFT as receipt/merch
Current State
What Exists
- Set Stone contract deployed on Arbitrum
- Regular set stone minting works
- No explicit cornerstone logic found in codebase (searched "cornerstone" - zero results)
What's Missing
- No price tier differentiation in contract
- No access control for cornerstone minting
- No documentation anywhere
- No UI for cornerstone purchase flow
Design Questions
Contract Level
- Is cornerstone a separate token type or same contract with different params?
- How is venue/promoter verified for minting?
- What's the price structure? (Fixed? Per-show? Negotiated?)
- Does venue need to be whitelisted, or is it honor system?
Metadata Level
- How do cornerstones visually differ from regular stones?
- Different shape?
- Different color palette?
- Special border/frame?
- "Cornerstone" trait in attributes?
Business Level
- When is cornerstone purchased? (Before booking? Day of show?)
- Who initiates? (Venue requests, band offers, automated?)
- What happens if show is cancelled?
Proposed Implementation
Option A: Contract Modification
Add to existing SetStone contract (if upgradeable):
mapping(bytes32 => uint256) public cornerstonePriceByShow;
mapping(bytes32 => address) public authorizedCornerstoneMinter;
function setCornerstonePrice(uint16 artistId, uint64 blockHeight, uint256 price, address minter) external onlyOwner;
function mintCornerstone(...) external payable;
Option B: Separate Cornerstone Contract
New contract specifically for cornerstones with:
- Higher price floor
- Venue verification
- Different metadata schema
- Links to associated show
Option C: Off-chain Coordination
- Regular SetStone contract used for minting
- Cornerstone status tracked off-chain
- UI restricts who can mint corners
- Metadata includes "cornerstone: true" attribute
UI/UX Flow
Venue Side
- Venue visits show page
- Sees "Purchase Cornerstone" option (if authorized)
- Connects wallet, pays cornerstone price
- Receives cornerstone NFT
- Band receives funds as booking fee
Band Side
- When creating show, set cornerstone price
- Optionally whitelist venue address
- Monitor cornerstone purchases
- Funds go to band wallet
Files to Create/Modify
Documentation
Contract (if needed)
Frontend
Backend
Acceptance Criteria
Labels
`enhancement`, `nft`, `documentation`, `lone-star-release`
Overview
Document and implement the cornerstone system - premium set stones available exclusively to show hosts, venues, and promoters as a booking fee mechanism.
What is a Cornerstone?
Definition (captured from Justin, Dec 3 2025):
Key Characteristics
Current State
What Exists
What's Missing
Design Questions
Contract Level
Metadata Level
Business Level
Proposed Implementation
Option A: Contract Modification
Add to existing SetStone contract (if upgradeable):
Option B: Separate Cornerstone Contract
New contract specifically for cornerstones with:
Option C: Off-chain Coordination
UI/UX Flow
Venue Side
Band Side
Files to Create/Modify
Documentation
docs/CORNERSTONES.md- Full explanation of systemContract (if needed)
contracts/SetStoneCornerstone.solor modify existingFrontend
Backend
Acceptance Criteria
Labels
`enhancement`, `nft`, `documentation`, `lone-star-release`