Smart Contract

ProfileCache

A.097bafa4e0b48eef.ProfileCache

Deployed

2d ago
Feb 26, 2026, 03:12:51 AM UTC

Dependents

0 imports
1import Clock from 0x097bafa4e0b48eef
2
3access(all) contract ProfileCache {
4
5	// If there is no findName, the string is set to "". 
6	access(contract) let addressLeaseName : {Address : LeaseCache}
7	access(contract) let nameAddress : {String : LeaseCache}
8
9	access(contract) let profileWalletIndex : {Address : {Type : Int}}
10
11	// Find Leases
12	access(all) struct LeaseCache {
13		access(all) let address : Address?
14		access(all) let leaseName : String 
15		access(all) let validUntil : UFix64 
16
17		init(leaseName: String, validUntil: UFix64, address: Address?) {
18			self.leaseName=leaseName 
19			self.validUntil=validUntil
20			self.address=address
21		}
22	}
23
24	access(account) fun setAddressLeaseNameCache(address: Address, leaseName: String?, validUntil: UFix64) {
25		if self.addressLeaseName[address] == nil {
26			if leaseName == nil {
27				self.addressLeaseName[address] = LeaseCache(leaseName: "", validUntil: validUntil, address: address)
28				return
29			}
30			self.addressLeaseName[address] = LeaseCache(leaseName: leaseName!, validUntil: validUntil, address: address)
31			return
32		} 
33		// panic("There is already a cache for this address. Address : ".concat(address.toString()))
34		// We cannot panic here, because imagine someone has expired lease. 
35 	}
36
37	access(all) fun getAddressLeaseName(_ address: Address) : String? {
38		if self.addressLeaseName[address] == nil {
39			return nil
40		}
41		if self.addressLeaseName[address]!.validUntil >= Clock.time() {
42			return self.addressLeaseName[address]!.leaseName
43		}
44		return nil
45	}
46
47	access(account) fun setNameAddressCache(address: Address?, leaseName: String, validUntil: UFix64) {
48		if self.nameAddress[leaseName] == nil {
49			self.nameAddress[leaseName] = LeaseCache(leaseName: leaseName, validUntil: validUntil, address: address)
50			return
51		} 
52		panic("There is already a cache for this name. Name : ".concat(leaseName))
53 	}
54
55	access(all) fun getNameAddress(_ name: String) : LeaseCache? {
56		if self.nameAddress[name]!.validUntil >= Clock.time() {
57			return self.nameAddress[name]
58		}
59		return nil
60	}
61
62	access(account) fun resetLeaseCache(address: Address, leaseName: String) {
63		self.addressLeaseName.remove(key: address)
64		self.nameAddress.remove(key: leaseName)
65	}
66
67	access(account) fun setWalletIndexCache(address: Address, walletType: Type, index: Int) {
68		if self.profileWalletIndex[address] == nil {
69			self.profileWalletIndex[address] = {}
70			self.profileWalletIndex[address]!.insert(key: walletType, index)
71			return
72		} else if self.profileWalletIndex[address]![walletType] == nil{
73			self.profileWalletIndex[address]!.insert(key: walletType, index)
74			return
75		}
76		panic("There is already a cache for this wallet. User : ".concat(address.toString()).concat(". Wallet : ").concat(walletType.identifier))
77 	}
78
79	access(all) fun getWalletIndex(address: Address, walletType: Type) : Int? {
80		if self.profileWalletIndex[address] == nil {
81			return nil
82		}
83		return self.profileWalletIndex[address]![walletType]
84	}
85
86	access(account) fun resetWalletIndexCache(address: Address) {
87		self.profileWalletIndex.remove(key: address)
88	}
89
90	init() {
91		self.addressLeaseName = {}
92		self.nameAddress = {}
93		self.profileWalletIndex = {}
94	}
95}
96