Smart Contract

MFLOffersResolver

A.8ebcbfd516b1da27.MFLOffersResolver

Valid From

116,806,127

Deployed

1w ago
Feb 19, 2026, 09:40:23 PM UTC

Dependents

6 imports
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