Smart Contract
MFLOffersResolver
A.8ebcbfd516b1da27.MFLOffersResolver
1import NonFungibleToken from 0x1d7e57aa55817448
2import MetadataViews from 0x1d7e57aa55817448
3import Resolver from 0xb8ea91944fd51c43
4import ViewResolver from 0x1d7e57aa55817448
5
6access(all) contract MFLOffersResolver {
7 access(all) let PublicPath: PublicPath
8 access(all) let StoragePath: StoragePath
9
10 access(all) enum ResolverType: UInt8 {
11 access(all) case NFT
12 access(all) case Global
13 }
14
15 access(all) resource OfferResolver: Resolver.ResolverPublic {
16 access(all) fun checkOfferResolver(
17 item: &{NonFungibleToken.NFT, ViewResolver.Resolver},
18 offerParamsString: {String:String},
19 offerParamsUInt64: {String:UInt64},
20 offerParamsUFix64: {String:UFix64}
21 ): Bool {
22 if let expiry = offerParamsUInt64["expiry"] {
23 assert(expiry > UInt64(getCurrentBlock().timestamp), message: "offer is expired")
24 }
25 switch offerParamsString["resolver"]! {
26 case ResolverType.NFT.rawValue.toString():
27 assert(item.id.toString() == offerParamsString["nftId"], message: "item NFT does not have specified ID")
28 return true
29 case ResolverType.Global.rawValue.toString():
30 assert(item.getType().identifier == offerParamsString["nftType"], message: "item NFT does not have specified type")
31 return true
32 default:
33 panic("Invalid Resolver on Offer: ".concat(offerParamsString["resolver"] ?? "unknown"))
34 }
35 }
36
37 }
38
39 access(all) fun createResolver(): @OfferResolver {
40 return <-create OfferResolver()
41 }
42
43 access(all) fun getResolverCap(): Capability<&{Resolver.ResolverPublic}> {
44 return self.account.capabilities.get<&{Resolver.ResolverPublic}>(MFLOffersResolver.PublicPath)
45 }
46
47 init() {
48 let p = "OffersResolver".concat(self.account.address.toString())
49
50 self.PublicPath = PublicPath(identifier: p)!
51 self.StoragePath = StoragePath(identifier: p)!
52
53 let resolver <- create OfferResolver()
54 self.account.storage.save(<-resolver, to: self.StoragePath)
55 self.account.capabilities.publish(
56 self.account.capabilities.storage.issue<&{Resolver.ResolverPublic}>(self.StoragePath),
57 at: self.PublicPath
58 )
59 }
60}
61