Sound Protocol is a generalized platform for flexible and efficient creation of NFT drops.
The following contracts have been deployed on Mainnet, Optimism, Goerli, Optimism-Goerli, and Sepolia.
Contract | Address |
---|---|
SoundEditionV2_1 |
0x000000000053C8B49473BDa4b8d1DC47CAb411CC |
SoundCreatorV2 |
0x0000000000aec84F5BFc2af15EAfb943bf4e3522 |
SuperMinterV2 |
0x000000000001A36777f9930aAEFf623771b13e70 |
SoundOnChainMetadata |
0x0000000000724868d80283B098Ffa809B2181692 |
SoundMetadata |
0x0000000000f5A96Dc85959cAeb0Cfe680f108FB5 |
Contract | Address |
---|---|
SoundEditionV2 |
0x0000000000c78FEE168002D89D141517b8E6E0FE |
SuperMinter |
0x0000000000CF4558c36229ac0026ee16D3aE35Cd |
The latest Sound Protocol comprises of several components:
-
SoundEditionV2_1
The NFT contract.
An ERC721A contract deployed via the minimal proxy clone pattern.
The
mint
function allows authorized minter contracts or administrators to batch mint NFTs
(authorization is granted via theMINTER_ROLE
orADMIN_ROLE
). -
SoundCreatorV2
A 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
-
SuperMinterV2
A generalized singleton minter contract that can mint on
SoundEdition
s.Technically, any contract can be authorized to mint on a
SoundEdition
as long as they are granted theMINTER_ROLE
. -
SoundMetadata
A contract which is called by the
SoundEdition
in thetokenURI
function for customizable metadata logic. The on-chain JSON variant is calledSoundOnChainMetadata
.
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"
The documentation for the latest contracts is under construction.
For now, you can refer to the Natspec.
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
.
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
.
Up to 10 ETH for any critical bugs that could result in loss of funds. Rewards will be given for smaller bugs or ideas.
MIT Copyright 2023 Sound.xyz