tx · CbobkH99ae7vcVdNwXg2Rmp12nsUv8akiZH9w8zDcd9b 3MxquWQhzpqXgbqunnFqHFJXTjasEznd1tN: -0.01000000 Waves 2022.10.20 08:21 [2280286] smart account 3MxquWQhzpqXgbqunnFqHFJXTjasEznd1tN > SELF 0.00000000 Waves
{ "type": 13, "id": "CbobkH99ae7vcVdNwXg2Rmp12nsUv8akiZH9w8zDcd9b", "fee": 1000000, "feeAssetId": null, "timestamp": 1666243264165, "version": 2, "chainId": 84, "sender": "3MxquWQhzpqXgbqunnFqHFJXTjasEznd1tN", "senderPublicKey": "GDjexdefwEhShjRTvHgazn3gTrDo74eHpJCAz14cAEeh", "proofs": [ "4n8mgZy7eu9P4S7gBrJFwCCMGN3FnzHTmfmMt8CAYtaz2Zc7MKH6k1tayvjWJVJgbxvFyMSw1iR2VzSTcvLmAUNv" ], "script": "base64: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AAAAAQUAAAAFbGFiZWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAFb3duZXIFAAAAByRtYXRjaDADCQEAAAAOaXNWYWxpZEFkZHJlc3MAAAABBQAAAAVvd25lcgUAAAAFb3duZXIFAAAABHVuaXQFAAAABHVuaXQEAAAAFnBhcmVudFJlZ2lzdHJhckFkZHJlc3MEAAAAByRtYXRjaDAJAQAAAA1fZ2V0UmVnaXN0cmFyAAAAAQUAAAAFbGFiZWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAJcmVnaXN0cmFyBQAAAAckbWF0Y2gwAwkBAAAADmlzVmFsaWRBZGRyZXNzAAAAAQUAAAAJcmVnaXN0cmFyBQAAAAlyZWdpc3RyYXIFAAAABHVuaXQFAAAABHVuaXQEAAAAD3BhcmVudFJlZ2lzdHJhcgkBAAAABXZhbHVlAAAAAQkABCYAAAABCQEAAAAFdmFsdWUAAAABBQAAABZwYXJlbnRSZWdpc3RyYXJBZGRyZXNzBAAAAA5wYXJlbnRSZXNvbHZlcgkBAAAADF9nZXRSZXNvbHZlcgAAAAEFAAAABWxhYmVsBAAAAA1wYXJlbnRDcmVhdGVkCQEAAAANX2dldENyZWF0ZWRBdAAAAAEFAAAABWxhYmVsBAAAAAVvd25lcgQAAAAHJG1hdGNoMAkBAAAAF19jYWxsU3VwcG9ydGVkSW50ZXJmYWNlAAAAAwUAAAAPcGFyZW50UmVnaXN0cmFyAgAAAAVvd25lcgUAAAAKcmVzdExhYmVscwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAVvd25lcgUAAAAHJG1hdGNoMAMJAQAAAA5pc1ZhbGlkQWRkcmVzcwAAAAEFAAAABW93bmVyBQAAAAVvd25lcgUAAAAEdW5pdAUAAAAEdW5pdAQAAAAJcmVnaXN0cmFyBAAAAAckbWF0Y2gwCQEAAAAXX2NhbGxTdXBwb3J0ZWRJbnRlcmZhY2UAAAADBQAAAA9wYXJlbnRSZWdpc3RyYXICAAAACXJlZ2lzdHJhcgUAAAAKcmVzdExhYmVscwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAlyZWdpc3RyYXIFAAAAByRtYXRjaDADCQEAAAAOaXNWYWxpZEFkZHJlc3MAAAABBQAAAAlyZWdpc3RyYXIFAAAACXJlZ2lzdHJhcgUAAAAEdW5pdAUAAAAEdW5pdAQAAAAIcmVzb2x2ZXIEAAAAByRtYXRjaDAJAQAAABdfY2FsbFN1cHBvcnRlZEludGVyZmFjZQAAAAMFAAAAD3BhcmVudFJlZ2lzdHJhcgIAAAAIcmVzb2x2ZXIFAAAACnJlc3RMYWJlbHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAIcmVzb2x2ZXIFAAAAByRtYXRjaDADCQEAAAAOaXNWYWxpZEFkZHJlc3MAAAABBQAAAAhyZXNvbHZlcgUAAAAIcmVzb2x2ZXIFAAAABHVuaXQFAAAABHVuaXQEAAAAC25hbWVDcmVhdGVkBAAAAAckbWF0Y2gwCQEAAAAXX2NhbGxTdXBwb3J0ZWRJbnRlcmZhY2UAAAADBQAAAA9wYXJlbnRSZWdpc3RyYXICAAAAC25hbWVDcmVhdGVkBQAAAApyZXN0TGFiZWxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAC25hbWVDcmVhdGVkBQAAAAckbWF0Y2gwAwMJAABmAAAAAgUAAAALbmFtZUNyZWF0ZWQAAAAAAAAAAAAJAABmAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAAC25hbWVDcmVhdGVkBwUAAAALbmFtZUNyZWF0ZWQFAAAABHVuaXQFAAAABHVuaXQEAAAAC25hbWVFeHBpcmVzBAAAAAckbWF0Y2gwCQEAAAAXX2NhbGxTdXBwb3J0ZWRJbnRlcmZhY2UAAAADBQAAAA9wYXJlbnRSZWdpc3RyYXICAAAAC25hbWVFeHBpcmVzBQAAAApyZXN0TGFiZWxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAC25hbWVFeHBpcmVzBQAAAAckbWF0Y2gwAwkAAGYAAAACBQAAAAtuYW1lRXhwaXJlcwAAAAAAAAAAAAUAAAALbmFtZUV4cGlyZXMFAAAABHVuaXQFAAAABHVuaXQEAAAACmlzUm9vdE5hbWUDCQAAZgAAAAIJAAExAAAAAQUAAAAFbGFiZWwAAAAAAAAAAAAJAAAAAAAAAgkAATEAAAABBQAAAApyZXN0TGFiZWxzAAAAAAAAAAAABwMDBQAAAAppc1Jvb3ROYW1lBgkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAWcGFyZW50UmVnaXN0cmFyQWRkcmVzcwkABRQAAAACBQAAAANuaWwJAAUXAAAABQUAAAAWcGFyZW50UmVnaXN0cmFyQWRkcmVzcwUAAAAScGFyZW50T3duZXJBZGRyZXNzBQAAAA5wYXJlbnRSZXNvbHZlcgUAAAANcGFyZW50Q3JlYXRlZAUAAAAEdW5pdAkABRQAAAACBQAAAANuaWwJAAUXAAAABQQAAAAHJG1hdGNoMAUAAAAFb3duZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAFb3duZXIFAAAAByRtYXRjaDAFAAAABW93bmVyBQAAABJwYXJlbnRPd25lckFkZHJlc3MFAAAACXJlZ2lzdHJhcgUAAAAIcmVzb2x2ZXIFAAAAC25hbWVDcmVhdGVkBQAAAAtuYW1lRXhwaXJlcwAAAABvqRIL", "height": 2280286, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5g4Y256RrdeFguyvE9Xbsky6tDk74ynjrJZCBWEwx36h Next: 2QG8r1ieF2eKvUXT467wyJyZHis3y9AZC5VE9VXJjQva Diff:
Old | New | Differences | |
---|---|---|---|
28 | 28 | func _setOwner (node,owner) = [StringEntry(key_Name_owner(node), owner)] | |
29 | 29 | ||
30 | 30 | ||
31 | + | func _getRegistrar (node) = getString(this, key_Name_owner(node)) | |
32 | + | ||
33 | + | ||
31 | 34 | func _getResolver (node) = getString(this, key_Name_resolver(node)) | |
32 | 35 | ||
33 | 36 | ||
49 | 52 | func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress)) | |
50 | 53 | ||
51 | 54 | ||
52 | - | func _ | |
55 | + | func _splitTLD (name) = { | |
53 | 56 | let labels = split(name, ".") | |
54 | 57 | let lastIndex = (size(labels) - 1) | |
55 | 58 | let lastLabel = labels[lastIndex] | |
58 | 61 | } | |
59 | 62 | ||
60 | 63 | ||
61 | - | func _ | |
64 | + | func _callSupportedInterface (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) { | |
62 | 65 | case supportsInterface: Boolean => | |
63 | 66 | if (!(supportsInterface)) | |
64 | 67 | then unit | |
65 | 68 | else match invoke(value(registrant), interfaceId, [restLabels], nil) { | |
66 | - | case mayBeString: String => | |
67 | - | mayBeString | |
68 | - | case _ => | |
69 | - | unit | |
70 | - | } | |
71 | - | case _ => | |
72 | - | unit | |
73 | - | } | |
74 | - | ||
75 | - | ||
76 | - | func _supportedInterfaceAsInt (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) { | |
77 | - | case supportsInterface: Boolean => | |
78 | - | if (!(supportsInterface)) | |
79 | - | then unit | |
80 | - | else match invoke(value(registrant), interfaceId, [restLabels], nil) { | |
81 | - | case mayBeInt: Int => | |
82 | - | mayBeInt | |
69 | + | case maybeString: String => | |
70 | + | maybeString | |
71 | + | case maybeInt: Int => | |
72 | + | maybeInt | |
83 | 73 | case _ => | |
84 | 74 | unit | |
85 | 75 | } | |
104 | 94 | ||
105 | 95 | ||
106 | 96 | @Callable(inv) | |
97 | + | func owner (node) = $Tuple2(nil, _getOwner(node)) | |
98 | + | ||
99 | + | ||
100 | + | ||
101 | + | @Callable(inv) | |
107 | 102 | func setOwner (node,owner) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(owner)) | |
108 | 103 | then unit | |
109 | 104 | else throw("Owner must be a valid address")]), _setOwner(node, owner)) | |
111 | 106 | ||
112 | 107 | ||
113 | 108 | @Callable(inv) | |
114 | - | func | |
109 | + | func registrar (node) = $Tuple2(nil, _getRegistrar(node)) | |
115 | 110 | ||
116 | 111 | ||
117 | 112 | ||
141 | 136 | func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0)) | |
142 | 137 | then unit | |
143 | 138 | else throw("Name cannot be empty")]), { | |
144 | - | let $t047164767 = _splitLastLabel(name) | |
145 | - | let lastLabel = $t047164767._1 | |
146 | - | let restLabels = $t047164767._2 | |
147 | - | let registrantAddress = _getOwner(lastLabel) | |
148 | - | let registrant = match registrantAddress { | |
139 | + | let $t044844525 = _splitTLD(name) | |
140 | + | let label = $t044844525._1 | |
141 | + | let restLabels = $t044844525._2 | |
142 | + | let parentOwnerAddress = match _getOwner(label) { | |
149 | 143 | case owner: String => | |
150 | - | addressFromString(owner) | |
144 | + | if (isValidAddress(owner)) | |
145 | + | then owner | |
146 | + | else unit | |
151 | 147 | case _ => | |
152 | 148 | unit | |
153 | 149 | } | |
154 | - | let parentResolver = _getResolver(lastLabel) | |
155 | - | let parentCreated = _getCreatedAt(lastLabel) | |
156 | - | let owner = _supportedInterfaceAsString(value(registrant), "owner", restLabels) | |
157 | - | let resolver = _supportedInterfaceAsString(value(registrant), "resolver", restLabels) | |
158 | - | let nameCreated = _supportedInterfaceAsInt(value(registrant), "nameCreated", restLabels) | |
159 | - | let nameExpires = _supportedInterfaceAsInt(value(registrant), "nameExpires", restLabels) | |
160 | - | let isRootName = if ((size(lastLabel) > 0)) | |
150 | + | let parentRegistrarAddress = match _getRegistrar(label) { | |
151 | + | case registrar: String => | |
152 | + | if (isValidAddress(registrar)) | |
153 | + | then registrar | |
154 | + | else unit | |
155 | + | case _ => | |
156 | + | unit | |
157 | + | } | |
158 | + | let parentRegistrar = value(addressFromString(value(parentRegistrarAddress))) | |
159 | + | let parentResolver = _getResolver(label) | |
160 | + | let parentCreated = _getCreatedAt(label) | |
161 | + | let owner = match _callSupportedInterface(parentRegistrar, "owner", restLabels) { | |
162 | + | case owner: String => | |
163 | + | if (isValidAddress(owner)) | |
164 | + | then owner | |
165 | + | else unit | |
166 | + | case _ => | |
167 | + | unit | |
168 | + | } | |
169 | + | let registrar = match _callSupportedInterface(parentRegistrar, "registrar", restLabels) { | |
170 | + | case registrar: String => | |
171 | + | if (isValidAddress(registrar)) | |
172 | + | then registrar | |
173 | + | else unit | |
174 | + | case _ => | |
175 | + | unit | |
176 | + | } | |
177 | + | let resolver = match _callSupportedInterface(parentRegistrar, "resolver", restLabels) { | |
178 | + | case resolver: String => | |
179 | + | if (isValidAddress(resolver)) | |
180 | + | then resolver | |
181 | + | else unit | |
182 | + | case _ => | |
183 | + | unit | |
184 | + | } | |
185 | + | let nameCreated = match _callSupportedInterface(parentRegistrar, "nameCreated", restLabels) { | |
186 | + | case nameCreated: Int => | |
187 | + | if (if ((nameCreated > 0)) | |
188 | + | then (lastBlock.timestamp > nameCreated) | |
189 | + | else false) | |
190 | + | then nameCreated | |
191 | + | else unit | |
192 | + | case _ => | |
193 | + | unit | |
194 | + | } | |
195 | + | let nameExpires = match _callSupportedInterface(parentRegistrar, "nameExpires", restLabels) { | |
196 | + | case nameExpires: Int => | |
197 | + | if ((nameExpires > 0)) | |
198 | + | then nameExpires | |
199 | + | else unit | |
200 | + | case _ => | |
201 | + | unit | |
202 | + | } | |
203 | + | let isRootName = if ((size(label) > 0)) | |
161 | 204 | then (size(restLabels) == 0) | |
162 | 205 | else false | |
163 | 206 | if (if (isRootName) | |
164 | 207 | then true | |
165 | - | else !(isDefined( | |
166 | - | then $Tuple2(nil, $ | |
167 | - | else $Tuple2(nil, $ | |
208 | + | else !(isDefined(parentRegistrarAddress))) | |
209 | + | then $Tuple2(nil, $Tuple5(parentRegistrarAddress, parentOwnerAddress, parentResolver, parentCreated, unit)) | |
210 | + | else $Tuple2(nil, $Tuple5( match owner { | |
168 | 211 | case owner: String => | |
169 | 212 | owner | |
170 | 213 | case _ => | |
171 | - | registrantAddress | |
172 | - | }, match resolver { | |
173 | - | case resolver: String => | |
174 | - | resolver | |
175 | - | case _ => | |
176 | - | parentResolver | |
177 | - | }, match nameCreated { | |
178 | - | case nameCreated: Int => | |
179 | - | nameCreated | |
180 | - | case _ => | |
181 | - | parentCreated | |
182 | - | }, nameExpires)) | |
214 | + | parentOwnerAddress | |
215 | + | }, registrar, resolver, nameCreated, nameExpires)) | |
183 | 216 | }) | |
184 | 217 | ||
185 | 218 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address))) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address))) | |
8 | 8 | ||
9 | 9 | ||
10 | 10 | func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'")) | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property) | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func key_Name_owner (node) = key_entity("Name", node, "owner") | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func key_Name_resolver (node) = key_entity("Name", node, "resolver") | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func key_Name_createdAt (node) = key_entity("Name", node, "createdAt") | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | func _getOwner (node) = getString(this, key_Name_owner(node)) | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func _setOwner (node,owner) = [StringEntry(key_Name_owner(node), owner)] | |
29 | 29 | ||
30 | 30 | ||
31 | + | func _getRegistrar (node) = getString(this, key_Name_owner(node)) | |
32 | + | ||
33 | + | ||
31 | 34 | func _getResolver (node) = getString(this, key_Name_resolver(node)) | |
32 | 35 | ||
33 | 36 | ||
34 | 37 | func _setResolver (node,resolver) = [StringEntry(key_Name_resolver(node), resolver)] | |
35 | 38 | ||
36 | 39 | ||
37 | 40 | func _getCreatedAt (node) = getInteger(this, key_Name_createdAt(node)) | |
38 | 41 | ||
39 | 42 | ||
40 | 43 | func _setCreatedAt (node,createdAt) = [IntegerEntry(key_Name_createdAt(node), createdAt)] | |
41 | 44 | ||
42 | 45 | ||
43 | 46 | func isAdmin (inv) = (inv.caller == this) | |
44 | 47 | ||
45 | 48 | ||
46 | 49 | func isOwner (inv,node) = (toString(inv.caller) == valueOrElse(_getOwner(node), "")) | |
47 | 50 | ||
48 | 51 | ||
49 | 52 | func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress)) | |
50 | 53 | ||
51 | 54 | ||
52 | - | func _ | |
55 | + | func _splitTLD (name) = { | |
53 | 56 | let labels = split(name, ".") | |
54 | 57 | let lastIndex = (size(labels) - 1) | |
55 | 58 | let lastLabel = labels[lastIndex] | |
56 | 59 | let restLabels = makeString(removeByIndex(labels, lastIndex), ".") | |
57 | 60 | $Tuple2(lastLabel, restLabels) | |
58 | 61 | } | |
59 | 62 | ||
60 | 63 | ||
61 | - | func _ | |
64 | + | func _callSupportedInterface (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) { | |
62 | 65 | case supportsInterface: Boolean => | |
63 | 66 | if (!(supportsInterface)) | |
64 | 67 | then unit | |
65 | 68 | else match invoke(value(registrant), interfaceId, [restLabels], nil) { | |
66 | - | case mayBeString: String => | |
67 | - | mayBeString | |
68 | - | case _ => | |
69 | - | unit | |
70 | - | } | |
71 | - | case _ => | |
72 | - | unit | |
73 | - | } | |
74 | - | ||
75 | - | ||
76 | - | func _supportedInterfaceAsInt (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) { | |
77 | - | case supportsInterface: Boolean => | |
78 | - | if (!(supportsInterface)) | |
79 | - | then unit | |
80 | - | else match invoke(value(registrant), interfaceId, [restLabels], nil) { | |
81 | - | case mayBeInt: Int => | |
82 | - | mayBeInt | |
69 | + | case maybeString: String => | |
70 | + | maybeString | |
71 | + | case maybeInt: Int => | |
72 | + | maybeInt | |
83 | 73 | case _ => | |
84 | 74 | unit | |
85 | 75 | } | |
86 | 76 | case _ => | |
87 | 77 | unit | |
88 | 78 | } | |
89 | 79 | ||
90 | 80 | ||
91 | 81 | func modifiers (validations) = unit | |
92 | 82 | ||
93 | 83 | ||
94 | 84 | func onlyAdmin (inv) = if (isAdmin(inv)) | |
95 | 85 | then unit | |
96 | 86 | else throw("Permission denied") | |
97 | 87 | ||
98 | 88 | ||
99 | 89 | func onlyOwner (inv,node) = if (if (isAdmin(inv)) | |
100 | 90 | then true | |
101 | 91 | else isOwner(inv, node)) | |
102 | 92 | then unit | |
103 | 93 | else throw("Permission denied") | |
104 | 94 | ||
105 | 95 | ||
106 | 96 | @Callable(inv) | |
97 | + | func owner (node) = $Tuple2(nil, _getOwner(node)) | |
98 | + | ||
99 | + | ||
100 | + | ||
101 | + | @Callable(inv) | |
107 | 102 | func setOwner (node,owner) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(owner)) | |
108 | 103 | then unit | |
109 | 104 | else throw("Owner must be a valid address")]), _setOwner(node, owner)) | |
110 | 105 | ||
111 | 106 | ||
112 | 107 | ||
113 | 108 | @Callable(inv) | |
114 | - | func | |
109 | + | func registrar (node) = $Tuple2(nil, _getRegistrar(node)) | |
115 | 110 | ||
116 | 111 | ||
117 | 112 | ||
118 | 113 | @Callable(inv) | |
119 | 114 | func resolver (node) = $Tuple2(nil, _getResolver(node)) | |
120 | 115 | ||
121 | 116 | ||
122 | 117 | ||
123 | 118 | @Callable(inv) | |
124 | 119 | func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver)) | |
125 | 120 | then unit | |
126 | 121 | else throw("Resolver must be a valid contract address")]), _setResolver(node, resolver)) | |
127 | 122 | ||
128 | 123 | ||
129 | 124 | ||
130 | 125 | @Callable(inv) | |
131 | 126 | func nameCreated (node) = $Tuple2(nil, _getCreatedAt(node)) | |
132 | 127 | ||
133 | 128 | ||
134 | 129 | ||
135 | 130 | @Callable(inv) | |
136 | 131 | func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv)]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp))) | |
137 | 132 | ||
138 | 133 | ||
139 | 134 | ||
140 | 135 | @Callable(inv) | |
141 | 136 | func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0)) | |
142 | 137 | then unit | |
143 | 138 | else throw("Name cannot be empty")]), { | |
144 | - | let $t047164767 = _splitLastLabel(name) | |
145 | - | let lastLabel = $t047164767._1 | |
146 | - | let restLabels = $t047164767._2 | |
147 | - | let registrantAddress = _getOwner(lastLabel) | |
148 | - | let registrant = match registrantAddress { | |
139 | + | let $t044844525 = _splitTLD(name) | |
140 | + | let label = $t044844525._1 | |
141 | + | let restLabels = $t044844525._2 | |
142 | + | let parentOwnerAddress = match _getOwner(label) { | |
149 | 143 | case owner: String => | |
150 | - | addressFromString(owner) | |
144 | + | if (isValidAddress(owner)) | |
145 | + | then owner | |
146 | + | else unit | |
151 | 147 | case _ => | |
152 | 148 | unit | |
153 | 149 | } | |
154 | - | let parentResolver = _getResolver(lastLabel) | |
155 | - | let parentCreated = _getCreatedAt(lastLabel) | |
156 | - | let owner = _supportedInterfaceAsString(value(registrant), "owner", restLabels) | |
157 | - | let resolver = _supportedInterfaceAsString(value(registrant), "resolver", restLabels) | |
158 | - | let nameCreated = _supportedInterfaceAsInt(value(registrant), "nameCreated", restLabels) | |
159 | - | let nameExpires = _supportedInterfaceAsInt(value(registrant), "nameExpires", restLabels) | |
160 | - | let isRootName = if ((size(lastLabel) > 0)) | |
150 | + | let parentRegistrarAddress = match _getRegistrar(label) { | |
151 | + | case registrar: String => | |
152 | + | if (isValidAddress(registrar)) | |
153 | + | then registrar | |
154 | + | else unit | |
155 | + | case _ => | |
156 | + | unit | |
157 | + | } | |
158 | + | let parentRegistrar = value(addressFromString(value(parentRegistrarAddress))) | |
159 | + | let parentResolver = _getResolver(label) | |
160 | + | let parentCreated = _getCreatedAt(label) | |
161 | + | let owner = match _callSupportedInterface(parentRegistrar, "owner", restLabels) { | |
162 | + | case owner: String => | |
163 | + | if (isValidAddress(owner)) | |
164 | + | then owner | |
165 | + | else unit | |
166 | + | case _ => | |
167 | + | unit | |
168 | + | } | |
169 | + | let registrar = match _callSupportedInterface(parentRegistrar, "registrar", restLabels) { | |
170 | + | case registrar: String => | |
171 | + | if (isValidAddress(registrar)) | |
172 | + | then registrar | |
173 | + | else unit | |
174 | + | case _ => | |
175 | + | unit | |
176 | + | } | |
177 | + | let resolver = match _callSupportedInterface(parentRegistrar, "resolver", restLabels) { | |
178 | + | case resolver: String => | |
179 | + | if (isValidAddress(resolver)) | |
180 | + | then resolver | |
181 | + | else unit | |
182 | + | case _ => | |
183 | + | unit | |
184 | + | } | |
185 | + | let nameCreated = match _callSupportedInterface(parentRegistrar, "nameCreated", restLabels) { | |
186 | + | case nameCreated: Int => | |
187 | + | if (if ((nameCreated > 0)) | |
188 | + | then (lastBlock.timestamp > nameCreated) | |
189 | + | else false) | |
190 | + | then nameCreated | |
191 | + | else unit | |
192 | + | case _ => | |
193 | + | unit | |
194 | + | } | |
195 | + | let nameExpires = match _callSupportedInterface(parentRegistrar, "nameExpires", restLabels) { | |
196 | + | case nameExpires: Int => | |
197 | + | if ((nameExpires > 0)) | |
198 | + | then nameExpires | |
199 | + | else unit | |
200 | + | case _ => | |
201 | + | unit | |
202 | + | } | |
203 | + | let isRootName = if ((size(label) > 0)) | |
161 | 204 | then (size(restLabels) == 0) | |
162 | 205 | else false | |
163 | 206 | if (if (isRootName) | |
164 | 207 | then true | |
165 | - | else !(isDefined( | |
166 | - | then $Tuple2(nil, $ | |
167 | - | else $Tuple2(nil, $ | |
208 | + | else !(isDefined(parentRegistrarAddress))) | |
209 | + | then $Tuple2(nil, $Tuple5(parentRegistrarAddress, parentOwnerAddress, parentResolver, parentCreated, unit)) | |
210 | + | else $Tuple2(nil, $Tuple5( match owner { | |
168 | 211 | case owner: String => | |
169 | 212 | owner | |
170 | 213 | case _ => | |
171 | - | registrantAddress | |
172 | - | }, match resolver { | |
173 | - | case resolver: String => | |
174 | - | resolver | |
175 | - | case _ => | |
176 | - | parentResolver | |
177 | - | }, match nameCreated { | |
178 | - | case nameCreated: Int => | |
179 | - | nameCreated | |
180 | - | case _ => | |
181 | - | parentCreated | |
182 | - | }, nameExpires)) | |
214 | + | parentOwnerAddress | |
215 | + | }, registrar, resolver, nameCreated, nameExpires)) | |
183 | 216 | }) | |
184 | 217 | ||
185 | 218 |
github/deemru/w8io/169f3d6 121.41 ms ◑![]()