Smart Contract

OpenEditionTemplate

A.befbaccb5032a457.OpenEditionTemplate

Deployed

1h ago
Feb 28, 2026, 09:42:23 PM UTC

Dependents

0 imports
1import ContractFactoryTemplate from 0xbefbaccb5032a457
2import MetadataViews from 0x1d7e57aa55817448
3import NFTMetadata from 0xbefbaccb5032a457
4
5access(all) contract OpenEditionTemplate: ContractFactoryTemplate {
6    access(all) fun createContract(acct: auth(Contracts) &Account, name: String, params: {String: AnyStruct}, initializeIdentifier: String) {
7        let code = self.generateImports(names: [
8            "NonFungibleToken",
9            "FlowtyDrops",
10            "BaseNFT",
11            "NFTMetadata",
12            "UniversalCollection",
13            "ContractBorrower",
14            "BaseCollection",
15            "ViewResolver"
16        ]).concat("\n\n")
17        .concat("access(all) contract ").concat(name).concat(": BaseCollection, ViewResolver {\n")
18        .concat("    access(all) var MetadataCap: Capability<&NFTMetadata.Container>\n")
19        .concat("    access(all) var totalSupply: UInt64\n")
20        .concat("\n\n")
21        .concat("    access(all) resource NFT: BaseNFT.NFT {\n")
22        .concat("        access(all) let id: UInt64\n")
23        .concat("        access(all) let metadataID: UInt64\n")
24        .concat("\n\n")
25        .concat("        init() {\n")
26        .concat("            ").concat(name).concat(".totalSupply = ").concat(name).concat(".totalSupply + 1\n")
27        .concat("            self.id = ").concat(name).concat(".totalSupply\n")
28        .concat("            self.metadataID = 0\n")
29        .concat("        }\n")
30        .concat("    }\n")
31        .concat("    access(all) resource NFTMinter: FlowtyDrops.Minter {\n")
32        .concat("        access(contract) fun createNextNFT(): @{NonFungibleToken.NFT} {\n")
33        .concat("            return <- create NFT()\n")
34        .concat("        }\n")
35        .concat("    }\n")
36        .concat("\n")
37        .concat("    access(all) fun createEmptyCollection(nftType: Type): @{NonFungibleToken.Collection} {\n")
38        .concat("        return <- UniversalCollection.createCollection(nftType: Type<@NFT>())\n")
39        .concat("    }\n")
40        .concat("\n")
41        .concat("    init(params: {String: AnyStruct}, initializeIdentifier: String) {\n")
42        .concat("        self.totalSupply = 0\n")
43        .concat("        let minter <- create NFTMinter()\n")
44        .concat("        self.account.storage.save(<-minter, to: FlowtyDrops.getMinterStoragePath(type: self.getType()))\n")
45        .concat("        params[\"minterController\"] = self.account.capabilities.storage.issue<&{FlowtyDrops.Minter}>(FlowtyDrops.getMinterStoragePath(type: self.getType()))\n")
46        .concat("        params[\"type\"] = Type<@NFT>()\n")
47        .concat("\n\n")
48        .concat("        self.MetadataCap = ContractBorrower.borrowInitializer(typeIdentifier: initializeIdentifier).initialize(contractAcct: self.account, params: params).pubCap\n")
49        .concat("    }\n")
50        .concat("}\n")
51
52        acct.contracts.add(name: name, code: code.utf8, params, initializeIdentifier)
53    }
54}
55