-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathpropose_nft_to_catalog.cdc
91 lines (77 loc) · 3.61 KB
/
propose_nft_to_catalog.cdc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import "MetadataViews"
import "NFTCatalog"
transaction(
collectionIdentifier : String,
contractName: String,
contractAddress: Address,
nftTypeIdentifer: String,
storagePathIdentifier: String,
publicPathIdentifier: String,
publicLinkedTypeIdentifier : String,
collectionName : String,
collectionDescription: String,
externalURL : String,
squareImageMediaURL : String,
squareImageMediaType : String,
bannerImageMediaURL : String,
bannerImageMediaType : String,
socials: {String : String},
message: String
) {
let nftCatalogProposalResourceRef : auth(NFTCatalog.ProposalActionOwner) &NFTCatalog.NFTCatalogProposalManager
prepare(acct: auth(BorrowValue, IssueStorageCapabilityController, PublishCapability, SaveValue) &Account) {
if acct.storage.borrow<&NFTCatalog.NFTCatalogProposalManager>(from: NFTCatalog.ProposalManagerStoragePath) == nil {
let proposalManager <- NFTCatalog.createNFTCatalogProposalManager()
acct.storage.save(<-proposalManager, to: NFTCatalog.ProposalManagerStoragePath)
let proposalManagerCap = acct.capabilities.storage.issue<&NFTCatalog.NFTCatalogProposalManager>(
NFTCatalog.ProposalManagerStoragePath
)
acct.capabilities.publish(
proposalManagerCap,
at: NFTCatalog.ProposalManagerPublicPath
)
}
self.nftCatalogProposalResourceRef = acct.storage.borrow<auth(NFTCatalog.ProposalActionOwner) &NFTCatalog.NFTCatalogProposalManager>(from: NFTCatalog.ProposalManagerStoragePath)!
}
execute {
let collectionData = NFTCatalog.NFTCollectionData(
storagePath: StoragePath(identifier: storagePathIdentifier)!,
publicPath: PublicPath(identifier : publicPathIdentifier)!,
publicLinkedType : CompositeType(publicLinkedTypeIdentifier)!,
)
let squareMedia = MetadataViews.Media(
file: MetadataViews.HTTPFile(
url: squareImageMediaURL
),
mediaType: squareImageMediaType
)
let bannerMedia = MetadataViews.Media(
file: MetadataViews.HTTPFile(
url: bannerImageMediaURL
),
mediaType: bannerImageMediaType
)
let socialsStruct : {String : MetadataViews.ExternalURL} = {}
for key in socials.keys {
socialsStruct[key] = MetadataViews.ExternalURL(socials[key]!)
}
let collectionDisplay = MetadataViews.NFTCollectionDisplay(
name: collectionName,
description: collectionDescription,
externalURL: MetadataViews.ExternalURL(externalURL),
squareImage: squareMedia,
bannerImage: bannerMedia,
socials: socialsStruct
)
let catalogData = NFTCatalog.NFTCatalogMetadata(
contractName: contractName,
contractAddress: contractAddress,
nftType: CompositeType(nftTypeIdentifer)!,
collectionData: collectionData,
collectionDisplay : collectionDisplay
)
self.nftCatalogProposalResourceRef.setCurrentProposalEntry(identifier : collectionIdentifier)
NFTCatalog.proposeNFTMetadata(collectionIdentifier : collectionIdentifier, metadata : catalogData, message: message, proposer: self.nftCatalogProposalResourceRef.owner!.address)
self.nftCatalogProposalResourceRef.setCurrentProposalEntry(identifier : nil)
}
}