Smart Contract

ViewResolvers

A.15a918087ab12d86.ViewResolvers

Valid From

86,036,485

Deployed

3d ago
Feb 24, 2026, 11:57:46 PM UTC

Dependents

0 imports
1/**
2> Author: Fixes Lab <https://github.com/fixes-world/>
3
4# Token List - A on-chain list of Flow Standard Fungible Tokens (FTs).
5
6This is the view resolver utilties contract of the Token List.
7
8*/
9import ViewResolver from 0x1d7e57aa55817448
10
11access(all) contract ViewResolvers {
12
13    /* --- Contract View Resolver --- */
14
15    /// The contract view resolver
16    ///
17    access(all) resource ContractViewResolver: ViewResolver.Resolver {
18        /// The address of the contract
19        access(all) let address: Address
20        /// The name of the contract
21        access(all) let contractName: String
22
23        init(
24            address: Address,
25            contractName: String
26        ) {
27            self.address = address
28            self.contractName = contractName
29
30            // Ensure the contract view resolver is valid
31            self.borrowContractViewResolver()
32        }
33
34        // ---- Implementing the Resolver ----
35
36        access(all)
37        view fun getViews(): [Type] {
38            let viewResolver = self.borrowContractViewResolver()
39            return viewResolver.getContractViews(resourceType: nil)
40        }
41
42        access(all)
43        fun resolveView(_ view: Type): AnyStruct? {
44            let viewResolver = self.borrowContractViewResolver()
45            return viewResolver.resolveContractView(resourceType: nil, viewType: view)
46        }
47
48        // ---- Local Methods ----
49
50        access(self)
51        view fun borrowContractViewResolver(): &{ViewResolver} {
52            return ViewResolvers.borrowContractViewResolver(self.address, self.contractName)
53                ?? panic("Contract view resolver not found")
54        }
55    }
56
57    /// Create a contract view resolver
58    ///
59    access(all)
60    fun createContractViewResolver(
61        address: Address,
62        contractName: String
63    ): @ContractViewResolver {
64        return <- create ContractViewResolver(address: address, contractName: contractName)
65    }
66
67    /// Borrow a contract view resolver
68    ///
69    access(all)
70    view fun borrowContractViewResolver(_ addr: Address, _ name: String): &{ViewResolver}? {
71        let viewResolver: &{ViewResolver}? = getAccount(addr).contracts.borrow<&{ViewResolver}>(name: name)
72        return viewResolver
73    }
74
75    /* --- Collection Resolver --- */
76
77    /// The collection view resolver
78    ///
79    access(all) resource CollectionViewResolver: ViewResolver.Resolver {
80        // FTView Resolver Collection Capability
81        access(self)
82        let cap: Capability<&{ViewResolver.ResolverCollection}>
83        // FTView Id
84        access(self)
85        let id: UInt64
86
87        init(
88            _ cap: Capability<&{ViewResolver.ResolverCollection}>,
89            id: UInt64
90        ) {
91            pre {
92                cap.check(): "Collection view resolver capability is invalid"
93            }
94            post {
95                self.borrowViewResolver() != nil: "Collection view resolver is invalid"
96            }
97            self.cap = cap
98            self.id = id
99            // Ensure the collection view resolver is valid
100            self.borrowViewResolver()
101        }
102
103        // ---- Implementing the Resolver ----
104
105        access(all)
106        view fun getViews(): [Type] {
107            let viewResolver = self.borrowViewResolver()
108            return viewResolver?.getViews() ?? []
109        }
110
111        access(all)
112        fun resolveView(_ view: Type): AnyStruct? {
113            let viewResolver = self.borrowViewResolver()
114            return viewResolver?.resolveView(view)
115        }
116
117        // ---- Local Methods ----
118
119        access(self) view
120        fun borrowViewResolver(): &{ViewResolver.Resolver}? {
121            let ref = self.cap.borrow()
122                ?? panic("Collection view resolver not found")
123            return ref.borrowViewResolver(id: self.id)
124        }
125    }
126
127    /// Create a collection view resolver
128    ///
129    access(all)
130    fun createCollectionViewResolver(
131        _ cap: Capability<&{ViewResolver.ResolverCollection}>,
132        id: UInt64
133    ): @CollectionViewResolver {
134        return <- create CollectionViewResolver(cap, id: id)
135    }
136}
137