Smart Contract
OpenEditionTemplate
A.befbaccb5032a457.OpenEditionTemplate
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