Skip to main content

Creating a Contract

All 1155 contracts created from Zora are deployed by calling a central factory contract. When calling this factory it will deploy a minimal proxy contract that is upgradeable. All upgrades are opt-in and must be done manually on a per contract basis by the user.

Calling the Factory Contract#

The createContract function on the factory is responsible for deploying a new 1155 contract. The setupActions parameter allows for multiple actions to be called when deploying the contract. Such as creating a token and sale in the same transaction as deploying the contract.

  • contractURI: The URI for the contract metadata
  • name: The name of the contract
  • defaultRoyaltyConfiguration: The default royalty configuration for the contract
  • defaultAdmin: The default admin for the contract
  • setupActions: The actions to perform on the new contract upon initialization (optional)
function createContract(    string calldata newContractURI,    string calldata name,    ICreatorRoyaltiesControl.RoyaltyConfiguration memory defaultRoyaltyConfiguration,    address payable defaultAdmin,    bytes[] calldata setupActions) external returns (address)

The contract supports multicall so multiple functions can be called to set up the contract in a single transaction.

Contract URI#

The Contract URI contains contract specific details. This metadata is stored in a JSON file on IPFS. The uri is retrieved via the contractURI() call on the contract.

type CollectionMetadata = {  name?: string  description?: string  image?: string  imageURI?: string  animation_url?: string  animationURI?: string  seller_fee_basis_points?: string  seller_fee_recipient?: string  storefront?: {    theme?: StorefrontTheme  }}

Setup Actions#

An optional param that is encoded function data that can be passed in and can call a separate function within the contract. This allows creating a token and setting permissions in the same transaction of creating the contract. Actions that can be called:

  • Creating a token
  • Setting the salesConfig
  • Granting permissions/minter role
  • Admin minting tokens