sound-protocol
sound-protocol copied to clipboard
A permissionless, open-source, modular smart contract framework for efficient creation of digital collectibles by musicians, artists, and creators.
Sound Protocol
Sound Protocol is a generalized platform for flexible and efficient creation of NFT drops.
Table of Contents
- Sound Protocol
- Table of Contents
- Deployments
- Contracts
- Documentation
- Development
- Deploying
- Bug Bounty
- License
Deployments
The following contracts have been deployed on Mainnet, Optimism, Goerli, Optimism-Goerli, and Sepolia.
Latest deployments
| Contract | Address |
|---|---|
SoundEditionV2_1 |
0x000000000053C8B49473BDa4b8d1DC47CAb411CC |
SoundCreatorV2 |
0x0000000000aec84F5BFc2af15EAfb943bf4e3522 |
SuperMinterV2 |
0x000000000001A36777f9930aAEFf623771b13e70 |
SoundOnChainMetadata |
0x0000000000724868d80283B098Ffa809B2181692 |
SoundMetadata |
0x0000000000f5A96Dc85959cAeb0Cfe680f108FB5 |
Older deployments
| Contract | Address |
|---|---|
SoundEditionV2 |
0x0000000000c78FEE168002D89D141517b8E6E0FE |
SuperMinter |
0x0000000000CF4558c36229ac0026ee16D3aE35Cd |
Architecture
The latest Sound Protocol comprises of several components:
-
SoundEditionV2_1The NFT contract.
An ERC721A contract deployed via the minimal proxy clone pattern.
The
mintfunction allows authorized minter contracts or administrators to batch mint NFTs
(authorization is granted via theMINTER_ROLEorADMIN_ROLE). -
SoundCreatorV2A factory that allows for a single transaction setup that:
- Clones and initializes a
SoundEdition. - Forwards calldata to an array of target contracts. These calldata can be used to set up the required authorizations and mint schedules.
- Clones and initializes a
-
SuperMinterV2A generalized singleton minter contract that can mint on
SoundEditions.Technically, any contract can be authorized to mint on a
SoundEditionas long as they are granted theMINTER_ROLE. -
SoundMetadataA contract which is called by the
SoundEditionin thetokenURIfunction for customizable metadata logic. The on-chain JSON variant is calledSoundOnChainMetadata.
Contracts
The smart contracts are stored under the contracts directory.
These are the contracts currently used.
The actual directories may contain some older contracts not on the list ─ they are left there for backwards compatibility.
contracts
├── core
│ ├── SoundCreatorV2.sol ─ "Factory"
│ ├── SoundEditionV2_1.sol ─ "NFT implementation"
│ ├── interfaces
│ │ ├── ISoundCreatorV2.sol
│ │ └── ISoundEditionV2_1.sol
│ └── utils
│ ├── MintRandomnessLib.sol ─ "Library for on-chain 1-of-1 raffle"
│ ├── LibOps.sol ─ "Library for common operations"
│ └── ArweaveURILib.sol ─ "For efficient storage of Arweave URIs"
└── modules
├── SuperMinterV2.sol ─ "Generalized minter"
├── SoundMetadata.sol ─ "Metadata module for SoundEdition"
├── SoundOnChainMetadata.sol ─ "On-chain variant of SoundMetadata"
├── interfaces
│ ├── ISuperMinterV2.sol
│ ├── ISoundMetadata.sol
│ └── ISoundOnChainMetadata.sol
└── utils
├── DelegateCashLib.sol ─ "Library for querying DelegateCash"
└── SoundOnChainMetadataLib.sol ─ "Library for SoundOnChainMetadata"
Documentation
The documentation for the latest contracts is under construction.
For now, you can refer to the Natspec.
Development
This is a foundry based project.
However, some of the directories differ from the defaults.
- The contracts are under
contracts. - The tests are under
tests.
Deploying
The contracts have already been deployed to their canonical addresses.
If you need them on any other EVM based chain, please look into build_create2_deployments.sh.
Bug Bounty
Up to 10 ETH for any critical bugs that could result in loss of funds. Rewards will be given for smaller bugs or ideas.
License
MIT Copyright 2023 Sound.xyz