Skip to main content

Contract Architecture

Understanding how AceSteps smart contracts interact.

Contract Diagram

┌─────────────────────────────────────────────────────────────┐
│ USER │
└─────────────────────────────────────────────────────────────┘
│ │
│ mint() │ enableTrading()
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ SongNFT │───────▶│ SongVault │
│ (ERC-721) │ │ (NFT Locking) │
└─────────────────────┘ └─────────────────────┘

│ deploys

┌─────────────────────┐
│ SongToken │
│ (ERC-20) │
└─────────────────────┘

│ creates pool

┌─────────────────────────────────────────────────────────────┐
│ UNISWAP V4 │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ PoolManager │◀──────▶│ RevenueHook │ │
│ │ │ │ │ │
│ └─────────────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Contract Responsibilities

SongNFT

  • Mint new songs with signature verification
  • Track publishing status
  • Store metadata URI and audio hash
  • Link to deployed token address

SongVault

  • Lock NFTs permanently
  • Deploy ERC-20 tokens
  • Create Uniswap pools
  • Distribute tokens

SongToken

  • Standard ERC-20 implementation
  • Fixed 100,000 supply
  • Reference to parent NFT

RevenueHook

  • Uniswap V4 hook
  • Revenue distribution via donate()
  • Swap event tracking

Interaction Flows

Minting

User → SongNFT.mint(metadataURI, audioHash, signature)
→ Verify signature
→ Mint NFT to user
→ Emit SongMinted event

Enable Trading

User → SongVault.enableTrading(tokenId)
→ Transfer NFT to vault
→ Deploy SongToken
→ Create Uniswap pool
→ Distribute tokens (80/20)
→ Emit TradingEnabled event

Revenue Distribution

Platform → RevenueHook.distributeRevenue(tokenId)
→ Calculate shares (80/20)
→ Call donate() on pool
→ Transfer platform share
→ Emit RevenueDistributed event