tx · 8qKNsXv23YySz8ZmQwUjZwCc1fRHedbs5AHDs1DpJWwR

3P24S1EVZadwzmfKSNWUZyLjjqp5DcHY4hE:  -0.00600000 Waves

2022.11.25 22:21 [3398497] smart account 3P24S1EVZadwzmfKSNWUZyLjjqp5DcHY4hE > SELF 0.00000000 Waves

{ "type": 13, "id": "8qKNsXv23YySz8ZmQwUjZwCc1fRHedbs5AHDs1DpJWwR", "fee": 600000, "feeAssetId": null, "timestamp": 1669404137030, "version": 2, "chainId": 87, "sender": "3P24S1EVZadwzmfKSNWUZyLjjqp5DcHY4hE", "senderPublicKey": "AQwX2ceR4UZa1x7FCpCMBWUnvw71p91YptLtXdV9F1vG", "proofs": [ "2PfSn9kK5rmpSPgAhMkY4Vzztd65MfDzGLn5CavcLVinZwqpCagnmJfFXMvB2vXyKyMBeWQi9jsN3a4peVZ8cJ4N" ], "script": "base64:AAIFAAAAAAAAACEIAhIECgIICBIECgIICBIFCgMICAgSBQoDCAgfEgMKAQgAAAASAQAAAAprZXlfZW50aXR5AAAAAwAAAARuYW1lAAAAAnBrAAAACHByb3BlcnR5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABG5hbWUCAAAAAV8FAAAAAnBrAgAAAAFfBQAAAAhwcm9wZXJ0eQEAAAAOa2V5X05hbWVfb3duZXIAAAABAAAABG5vZGUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbm9kZQIAAAAFb3duZXIBAAAAEWtleV9OYW1lX3Jlc29sdmVyAAAAAQAAAARub2RlCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5vZGUCAAAACHJlc29sdmVyAQAAABJrZXlfTmFtZV9jcmVhdGVkQXQAAAABAAAABG5vZGUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbm9kZQIAAAAJY3JlYXRlZEF0AQAAAAlfZ2V0T3duZXIAAAABAAAABG5vZGUJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbm9kZQEAAAAJX3NldE93bmVyAAAAAgAAAARub2RlAAAABW93bmVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlfTmFtZV9vd25lcgAAAAEFAAAABG5vZGUFAAAABW93bmVyBQAAAANuaWwBAAAADF9nZXRSZXNvbHZlcgAAAAEAAAAEbm9kZQkABB0AAAACBQAAAAR0aGlzCQEAAAARa2V5X05hbWVfcmVzb2x2ZXIAAAABBQAAAARub2RlAQAAAAxfc2V0UmVzb2x2ZXIAAAACAAAABG5vZGUAAAAIcmVzb2x2ZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleV9OYW1lX3Jlc29sdmVyAAAAAQUAAAAEbm9kZQUAAAAIcmVzb2x2ZXIFAAAAA25pbAEAAAANX2dldENyZWF0ZWRBdAAAAAEAAAAEbm9kZQkABBoAAAACBQAAAAR0aGlzCQEAAAASa2V5X05hbWVfY3JlYXRlZEF0AAAAAQUAAAAEbm9kZQEAAAANX3NldENyZWF0ZWRBdAAAAAIAAAAEbm9kZQAAAAljcmVhdGVkQXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJrZXlfTmFtZV9jcmVhdGVkQXQAAAABBQAAAARub2RlBQAAAAljcmVhdGVkQXQFAAAAA25pbAEAAAAHaXNBZG1pbgAAAAEAAAADaW52CQAAAAAAAAIIBQAAAANpbnYAAAAGY2FsbGVyBQAAAAR0aGlzAQAAAAdpc093bmVyAAAAAgAAAANpbnYAAAAEbm9kZQkAAAAAAAACCQAEJQAAAAEIBQAAAANpbnYAAAAGY2FsbGVyCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAJX2dldE93bmVyAAAAAQUAAAAEbm9kZQIAAAAAAQAAAA5pc1ZhbGlkQWRkcmVzcwAAAAEAAAAMbWF5YmVBZGRyZXNzCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAAAxtYXliZUFkZHJlc3MBAAAACW1vZGlmaWVycwAAAAEAAAALdmFsaWRhdGlvbnMFAAAABHVuaXQBAAAACW9ubHlBZG1pbgAAAAEAAAADaW52AwkBAAAAB2lzQWRtaW4AAAABBQAAAANpbnYFAAAABHVuaXQJAAACAAAAAQIAAAARUGVybWlzc2lvbiBkZW5pZWQBAAAACW9ubHlPd25lcgAAAAIAAAADaW52AAAABG5vZGUDAwkBAAAAB2lzQWRtaW4AAAABBQAAAANpbnYGCQEAAAAHaXNPd25lcgAAAAIFAAAAA2ludgUAAAAEbm9kZQUAAAAEdW5pdAkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAEAAAAPX3NwbGl0TGFzdExhYmVsAAAAAQAAAARuYW1lBAAAAAZsYWJlbHMJAAS1AAAAAgUAAAAEbmFtZQIAAAABLgQAAAAJbGFzdEluZGV4CQAAZQAAAAIJAAGQAAAAAQUAAAAGbGFiZWxzAAAAAAAAAAABBAAAAAlsYXN0TGFiZWwJAAGRAAAAAgUAAAAGbGFiZWxzBQAAAAlsYXN0SW5kZXgEAAAACnJlc3RMYWJlbHMJAAS5AAAAAgkABFEAAAACBQAAAAZsYWJlbHMFAAAACWxhc3RJbmRleAIAAAABLgkABRQAAAACBQAAAAlsYXN0TGFiZWwFAAAACnJlc3RMYWJlbHMBAAAACF9yZXNvbHZlAAAAAwAAAARuYW1lAAAAC2ludGVyZmFjZUlkAAAABGFyZ3MEAAAACyR0MDIxNDgyMTk1CQEAAAAPX3NwbGl0TGFzdExhYmVsAAAAAQUAAAAEbmFtZQQAAAAFbGFiZWwIBQAAAAskdDAyMTQ4MjE5NQAAAAJfMQQAAAAKcmVzdExhYmVscwgFAAAACyR0MDIxNDgyMTk1AAAAAl8yBAAAAAtyZXNvbHZlclJhdwkABCYAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAMX2dldFJlc29sdmVyAAAAAQUAAAAFbGFiZWwCAAAAAAQAAAAIcmVzb2x2ZXIJAQAAAAV2YWx1ZQAAAAEFAAAAC3Jlc29sdmVyUmF3BAAAAAxjYWxsYmFja0RhdGEJAAP8AAAABAUAAAAIcmVzb2x2ZXICAAAAB3Jlc29sdmUJAARMAAAAAgUAAAAKcmVzdExhYmVscwkABEwAAAACBQAAAAtpbnRlcmZhY2VJZAkABEwAAAACBQAAAARhcmdzBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgkAATEAAAABBQAAAAVsYWJlbAAAAAAAAAAAAAUAAAAEdW5pdAMJAAAAAAAAAgkAATEAAAABBQAAAApyZXN0TGFiZWxzAAAAAAAAAAAABAAAAAckbWF0Y2gwBQAAAAtpbnRlcmZhY2VJZAMJAAAAAAAAAgIAAAAFb3duZXIFAAAAByRtYXRjaDAJAQAAAAlfZ2V0T3duZXIAAAABBQAAAAVsYWJlbAMJAAAAAAAAAgIAAAAIcmVzb2x2ZXIFAAAAByRtYXRjaDAJAQAAAAxfZ2V0UmVzb2x2ZXIAAAABBQAAAAVsYWJlbAMJAAAAAAAAAgIAAAAJY3JlYXRlZEF0BQAAAAckbWF0Y2gwCQEAAAANX2dldENyZWF0ZWRBdAAAAAEFAAAABWxhYmVsBQAAAAR1bml0AwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAALcmVzb2x2ZXJSYXcFAAAABHVuaXQEAAAAByRtYXRjaDAJAAUUAAAAAgUAAAALaW50ZXJmYWNlSWQFAAAADGNhbGxiYWNrRGF0YQMDAwkAAAAAAAACAgAAAAVvd25lcggFAAAAByRtYXRjaDAAAAACXzEJAAABAAAAAggFAAAAByRtYXRjaDAAAAACXzICAAAABlN0cmluZwcJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQKFN0cmluZywgU3RyaW5nKQcEAAAACm1heWJlT3duZXIIBQAAAAckbWF0Y2gwAAAAAl8yAwkBAAAADmlzVmFsaWRBZGRyZXNzAAAAAQUAAAAKbWF5YmVPd25lcgUAAAAKbWF5YmVPd25lcgUAAAAEdW5pdAMDAwkAAAAAAAACAgAAAAhyZXNvbHZlcggFAAAAByRtYXRjaDAAAAACXzEJAAABAAAAAggFAAAAByRtYXRjaDAAAAACXzICAAAABlN0cmluZwcJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQKFN0cmluZywgU3RyaW5nKQcEAAAADW1heWJlUmVzb2x2ZXIIBQAAAAckbWF0Y2gwAAAAAl8yAwkBAAAADmlzVmFsaWRBZGRyZXNzAAAAAQUAAAANbWF5YmVSZXNvbHZlcgUAAAANbWF5YmVSZXNvbHZlcgUAAAAEdW5pdAMDAwkAAAAAAAACAgAAAAljcmVhdGVkQXQIBQAAAAckbWF0Y2gwAAAAAl8xCQAAAQAAAAIIBQAAAAckbWF0Y2gwAAAAAl8yAgAAAANJbnQHCQAAAQAAAAIFAAAAByRtYXRjaDACAAAADShTdHJpbmcsIEludCkHBAAAAAtuYW1lQ3JlYXRlZAgFAAAAByRtYXRjaDAAAAACXzIDAwkAAGYAAAACBQAAAAtuYW1lQ3JlYXRlZAAAAAAAAAAAAAkAAGcAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAALbmFtZUNyZWF0ZWQHBQAAAAtuYW1lQ3JlYXRlZAUAAAAEdW5pdAMDAwkAAAAAAAACAgAAAAlleHBpcmVzQXQIBQAAAAckbWF0Y2gwAAAAAl8xCQAAAQAAAAIIBQAAAAckbWF0Y2gwAAAAAl8yAgAAAANJbnQHCQAAAQAAAAIFAAAAByRtYXRjaDACAAAADShTdHJpbmcsIEludCkHBAAAAAtuYW1lRXhwaXJlcwgFAAAAByRtYXRjaDAAAAACXzIDCQAAZgAAAAIFAAAAC25hbWVFeHBpcmVzAAAAAAAAAAAABQAAAAtuYW1lRXhwaXJlcwUAAAAEdW5pdAMDAwkAAAAAAAACAgAAAAd0b2tlbklkCAUAAAAHJG1hdGNoMAAAAAJfMQkAAAEAAAACCAUAAAAHJG1hdGNoMAAAAAJfMgIAAAAGU3RyaW5nBwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABAoU3RyaW5nLCBTdHJpbmcpBwQAAAAHdG9rZW5JZAgFAAAAByRtYXRjaDAAAAACXzIFAAAAB3Rva2VuSWQFAAAABHVuaXQAAAAFAAAAA2ludgEAAAAIc2V0T3duZXIAAAACAAAABG5vZGUAAAAFb3duZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAltb2RpZmllcnMAAAABCQAETAAAAAIJAQAAAAlvbmx5T3duZXIAAAACBQAAAANpbnYFAAAABG5vZGUJAARMAAAAAgMJAQAAAA5pc1ZhbGlkQWRkcmVzcwAAAAEFAAAABW93bmVyBQAAAAR1bml0CQAAAgAAAAECAAAAHU93bmVyIG11c3QgYmUgYSB2YWxpZCBhZGRyZXNzBQAAAANuaWwJAQAAAAlfc2V0T3duZXIAAAACBQAAAARub2RlBQAAAAVvd25lcgAAAANpbnYBAAAAC3NldFJlc29sdmVyAAAAAgAAAARub2RlAAAACHJlc29sdmVyCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAJbW9kaWZpZXJzAAAAAQkABEwAAAACCQEAAAAJb25seU93bmVyAAAAAgUAAAADaW52BQAAAARub2RlCQAETAAAAAIDCQEAAAAOaXNWYWxpZEFkZHJlc3MAAAABBQAAAAhyZXNvbHZlcgUAAAAEdW5pdAkAAAIAAAABAgAAACBSZXNvbHZlciBtdXN0IGJlIGEgdmFsaWQgYWRkcmVzcwUAAAADbmlsCQEAAAAMX3NldFJlc29sdmVyAAAAAgUAAAAEbm9kZQUAAAAIcmVzb2x2ZXIAAAADaW52AQAAAAlzZXRSZWNvcmQAAAADAAAABG5vZGUAAAAFb3duZXIAAAAIcmVzb2x2ZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAltb2RpZmllcnMAAAABCQAETAAAAAIJAQAAAAlvbmx5QWRtaW4AAAABBQAAAANpbnYJAARMAAAAAgMJAQAAAA5pc1ZhbGlkQWRkcmVzcwAAAAEFAAAABW93bmVyBQAAAAR1bml0CQAAAgAAAAECAAAAHU93bmVyIG11c3QgYmUgYSB2YWxpZCBhZGRyZXNzCQAETAAAAAIDCQEAAAAOaXNWYWxpZEFkZHJlc3MAAAABBQAAAAhyZXNvbHZlcgUAAAAEdW5pdAkAAAIAAAABAgAAAClSZXNvbHZlciBtdXN0IGJlIGEgdmFsaWQgY29udHJhY3QgYWRkcmVzcwUAAAADbmlsCQAETgAAAAIJAAROAAAAAgkBAAAACV9zZXRPd25lcgAAAAIFAAAABG5vZGUFAAAABW93bmVyCQEAAAAMX3NldFJlc29sdmVyAAAAAgUAAAAEbm9kZQUAAAAIcmVzb2x2ZXIJAQAAAA1fc2V0Q3JlYXRlZEF0AAAAAgUAAAAEbm9kZQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAADaW52AQAAAAdyZXNvbHZlAAAAAwAAAARuYW1lAAAAC2ludGVyZmFjZUlkAAAABGFyZ3MJAAUUAAAAAgUAAAADbmlsCQEAAAAIX3Jlc29sdmUAAAADBQAAAARuYW1lBQAAAAtpbnRlcmZhY2VJZAUAAAAEYXJncwAAAANpbnYBAAAABXdob0lzAAAAAQAAAARuYW1lCQAFFAAAAAIFAAAAA25pbAkABRcAAAAFCQEAAAAIX3Jlc29sdmUAAAADBQAAAARuYW1lAgAAAAVvd25lcgUAAAADbmlsCQEAAAAIX3Jlc29sdmUAAAADBQAAAARuYW1lAgAAAAhyZXNvbHZlcgUAAAADbmlsCQEAAAAIX3Jlc29sdmUAAAADBQAAAARuYW1lAgAAAAljcmVhdGVkQXQFAAAAA25pbAkBAAAACF9yZXNvbHZlAAAAAwUAAAAEbmFtZQIAAAAJZXhwaXJlc0F0BQAAAANuaWwJAQAAAAhfcmVzb2x2ZQAAAAMFAAAABG5hbWUCAAAAB3Rva2VuSWQFAAAAA25pbAAAAADg/4/C", "height": 3398497, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: q77QhRx6WRDfRxjNqWdmVFMMiZ1rYrzYq2SMbuB9ZLc Next: 4KMS4UxZWsMgbbjfm4f2ESPfKPARXA9Rk9xn6xLpgVkR Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
5-
6-
7-func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
8-
9-
10-func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
11-
12-
134 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
145
156
4940 func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress))
5041
5142
52-func _splitLastLabel (name) = {
53- let labels = split(name, ".")
54- let lastIndex = (size(labels) - 1)
55- let lastLabel = labels[lastIndex]
56- let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
57- $Tuple2(lastLabel, restLabels)
58- }
59-
60-
61-func _callSupportedInterface (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) {
62- case supportsInterface: Boolean =>
63- if (!(supportsInterface))
64- then unit
65- else match invoke(value(registrant), interfaceId, [restLabels], nil) {
66- case maybeString: String =>
67- maybeString
68- case maybeInt: Int =>
69- maybeInt
70- case _ =>
71- unit
72- }
73- case _ =>
74- unit
75-}
76-
77-
7843 func modifiers (validations) = unit
7944
8045
9055 else throw("Permission denied")
9156
9257
93-@Callable(inv)
94-func getOwner (node) = $Tuple2(nil, _getOwner(node))
58+func _splitLastLabel (name) = {
59+ let labels = split(name, ".")
60+ let lastIndex = (size(labels) - 1)
61+ let lastLabel = labels[lastIndex]
62+ let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
63+ $Tuple2(lastLabel, restLabels)
64+ }
9565
66+
67+func _resolve (name,interfaceId,args) = {
68+ let $t021482195 = _splitLastLabel(name)
69+ let label = $t021482195._1
70+ let restLabels = $t021482195._2
71+ let resolverRaw = addressFromString(valueOrElse(_getResolver(label), ""))
72+ let resolver = value(resolverRaw)
73+ let callbackData = invoke(resolver, "resolve", [restLabels, interfaceId, args], nil)
74+ if ((size(label) == 0))
75+ then unit
76+ else if ((size(restLabels) == 0))
77+ then match interfaceId {
78+ case _ =>
79+ if (("owner" == $match0))
80+ then _getOwner(label)
81+ else if (("resolver" == $match0))
82+ then _getResolver(label)
83+ else if (("createdAt" == $match0))
84+ then _getCreatedAt(label)
85+ else unit
86+ }
87+ else if (!(isDefined(resolverRaw)))
88+ then unit
89+ else match $Tuple2(interfaceId, callbackData) {
90+ case _ =>
91+ if (if (if (("owner" == $match0._1))
92+ then $isInstanceOf($match0._2, "String")
93+ else false)
94+ then $isInstanceOf($match0, "(String, String)")
95+ else false)
96+ then {
97+ let maybeOwner = $match0._2
98+ if (isValidAddress(maybeOwner))
99+ then maybeOwner
100+ else unit
101+ }
102+ else if (if (if (("resolver" == $match0._1))
103+ then $isInstanceOf($match0._2, "String")
104+ else false)
105+ then $isInstanceOf($match0, "(String, String)")
106+ else false)
107+ then {
108+ let maybeResolver = $match0._2
109+ if (isValidAddress(maybeResolver))
110+ then maybeResolver
111+ else unit
112+ }
113+ else if (if (if (("createdAt" == $match0._1))
114+ then $isInstanceOf($match0._2, "Int")
115+ else false)
116+ then $isInstanceOf($match0, "(String, Int)")
117+ else false)
118+ then {
119+ let nameCreated = $match0._2
120+ if (if ((nameCreated > 0))
121+ then (lastBlock.timestamp >= nameCreated)
122+ else false)
123+ then nameCreated
124+ else unit
125+ }
126+ else if (if (if (("expiresAt" == $match0._1))
127+ then $isInstanceOf($match0._2, "Int")
128+ else false)
129+ then $isInstanceOf($match0, "(String, Int)")
130+ else false)
131+ then {
132+ let nameExpires = $match0._2
133+ if ((nameExpires > 0))
134+ then nameExpires
135+ else unit
136+ }
137+ else if (if (if (("tokenId" == $match0._1))
138+ then $isInstanceOf($match0._2, "String")
139+ else false)
140+ then $isInstanceOf($match0, "(String, String)")
141+ else false)
142+ then {
143+ let tokenId = $match0._2
144+ tokenId
145+ }
146+ else unit
147+ }
148+ }
96149
97150
98151 @Callable(inv)
103156
104157
105158 @Callable(inv)
106-func getResolver (node) = $Tuple2(nil, _getResolver(node))
107-
108-
109-
110-@Callable(inv)
111159 func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
112160 then unit
113161 else throw("Resolver must be a valid address")]), _setResolver(node, resolver))
114-
115-
116-
117-@Callable(inv)
118-func getNameCreated (node) = $Tuple2(nil, _getCreatedAt(node))
119162
120163
121164
129172
130173
131174 @Callable(inv)
132-func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0))
133- then unit
134- else throw("Name cannot be empty")]), {
135- let $t046974748 = _splitLastLabel(name)
136- let lastLabel = $t046974748._1
137- let restLabels = $t046974748._2
138- let registrantAddress = _getOwner(lastLabel)
139- let maybeRegistrant = match registrantAddress {
140- case owner: String =>
141- addressFromString(owner)
142- case _ =>
143- unit
144- }
145- let registrant = value(maybeRegistrant)
146- let parentResolver = _getResolver(lastLabel)
147- let parentCreated = _getCreatedAt(lastLabel)
148- let owner = match _callSupportedInterface(registrant, "getOwner", restLabels) {
149- case owner: String =>
150- if (isValidAddress(owner))
151- then owner
152- else unit
153- case _ =>
154- unit
155- }
156- let resolver = match _callSupportedInterface(registrant, "getResolver", restLabels) {
157- case resolver: String =>
158- if (isValidAddress(resolver))
159- then resolver
160- else unit
161- case _ =>
162- unit
163- }
164- let nameCreated = match _callSupportedInterface(registrant, "getNameCreated", restLabels) {
165- case nameCreated: Int =>
166- if (if ((nameCreated > 0))
167- then (lastBlock.timestamp >= nameCreated)
168- else false)
169- then nameCreated
170- else unit
171- case _ =>
172- unit
173- }
174- let nameExpires = match _callSupportedInterface(registrant, "getNameExpires", restLabels) {
175- case nameExpires: Int =>
176- if ((nameExpires > 0))
177- then nameExpires
178- else unit
179- case _ =>
180- unit
181- }
182- let nameToken = match _callSupportedInterface(registrant, "getNameToken", restLabels) {
183- case nameToken: String =>
184- nameToken
185- case _ =>
186- unit
187- }
188- let isRootName = if ((size(lastLabel) > 0))
189- then (size(restLabels) == 0)
190- else false
191- if (if (isRootName)
192- then true
193- else !(isDefined(maybeRegistrant)))
194- then $Tuple2(nil, $Tuple5(registrantAddress, parentResolver, parentCreated, unit, unit))
195- else $Tuple2(nil, $Tuple5(owner, resolver, nameCreated, nameExpires, nameToken))
196- })
175+func resolve (name,interfaceId,args) = $Tuple2(nil, _resolve(name, interfaceId, args))
176+
177+
178+
179+@Callable(inv)
180+func whoIs (name) = $Tuple2(nil, $Tuple5(_resolve(name, "owner", nil), _resolve(name, "resolver", nil), _resolve(name, "createdAt", nil), _resolve(name, "expiresAt", nil), _resolve(name, "tokenId", nil)))
197181
198182
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
5-
6-
7-func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
8-
9-
10-func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
11-
12-
134 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
145
156
167 func key_Name_owner (node) = key_entity("Name", node, "owner")
178
189
1910 func key_Name_resolver (node) = key_entity("Name", node, "resolver")
2011
2112
2213 func key_Name_createdAt (node) = key_entity("Name", node, "createdAt")
2314
2415
2516 func _getOwner (node) = getString(this, key_Name_owner(node))
2617
2718
2819 func _setOwner (node,owner) = [StringEntry(key_Name_owner(node), owner)]
2920
3021
3122 func _getResolver (node) = getString(this, key_Name_resolver(node))
3223
3324
3425 func _setResolver (node,resolver) = [StringEntry(key_Name_resolver(node), resolver)]
3526
3627
3728 func _getCreatedAt (node) = getInteger(this, key_Name_createdAt(node))
3829
3930
4031 func _setCreatedAt (node,createdAt) = [IntegerEntry(key_Name_createdAt(node), createdAt)]
4132
4233
4334 func isAdmin (inv) = (inv.caller == this)
4435
4536
4637 func isOwner (inv,node) = (toString(inv.caller) == valueOrElse(_getOwner(node), ""))
4738
4839
4940 func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress))
5041
5142
52-func _splitLastLabel (name) = {
53- let labels = split(name, ".")
54- let lastIndex = (size(labels) - 1)
55- let lastLabel = labels[lastIndex]
56- let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
57- $Tuple2(lastLabel, restLabels)
58- }
59-
60-
61-func _callSupportedInterface (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) {
62- case supportsInterface: Boolean =>
63- if (!(supportsInterface))
64- then unit
65- else match invoke(value(registrant), interfaceId, [restLabels], nil) {
66- case maybeString: String =>
67- maybeString
68- case maybeInt: Int =>
69- maybeInt
70- case _ =>
71- unit
72- }
73- case _ =>
74- unit
75-}
76-
77-
7843 func modifiers (validations) = unit
7944
8045
8146 func onlyAdmin (inv) = if (isAdmin(inv))
8247 then unit
8348 else throw("Permission denied")
8449
8550
8651 func onlyOwner (inv,node) = if (if (isAdmin(inv))
8752 then true
8853 else isOwner(inv, node))
8954 then unit
9055 else throw("Permission denied")
9156
9257
93-@Callable(inv)
94-func getOwner (node) = $Tuple2(nil, _getOwner(node))
58+func _splitLastLabel (name) = {
59+ let labels = split(name, ".")
60+ let lastIndex = (size(labels) - 1)
61+ let lastLabel = labels[lastIndex]
62+ let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
63+ $Tuple2(lastLabel, restLabels)
64+ }
9565
66+
67+func _resolve (name,interfaceId,args) = {
68+ let $t021482195 = _splitLastLabel(name)
69+ let label = $t021482195._1
70+ let restLabels = $t021482195._2
71+ let resolverRaw = addressFromString(valueOrElse(_getResolver(label), ""))
72+ let resolver = value(resolverRaw)
73+ let callbackData = invoke(resolver, "resolve", [restLabels, interfaceId, args], nil)
74+ if ((size(label) == 0))
75+ then unit
76+ else if ((size(restLabels) == 0))
77+ then match interfaceId {
78+ case _ =>
79+ if (("owner" == $match0))
80+ then _getOwner(label)
81+ else if (("resolver" == $match0))
82+ then _getResolver(label)
83+ else if (("createdAt" == $match0))
84+ then _getCreatedAt(label)
85+ else unit
86+ }
87+ else if (!(isDefined(resolverRaw)))
88+ then unit
89+ else match $Tuple2(interfaceId, callbackData) {
90+ case _ =>
91+ if (if (if (("owner" == $match0._1))
92+ then $isInstanceOf($match0._2, "String")
93+ else false)
94+ then $isInstanceOf($match0, "(String, String)")
95+ else false)
96+ then {
97+ let maybeOwner = $match0._2
98+ if (isValidAddress(maybeOwner))
99+ then maybeOwner
100+ else unit
101+ }
102+ else if (if (if (("resolver" == $match0._1))
103+ then $isInstanceOf($match0._2, "String")
104+ else false)
105+ then $isInstanceOf($match0, "(String, String)")
106+ else false)
107+ then {
108+ let maybeResolver = $match0._2
109+ if (isValidAddress(maybeResolver))
110+ then maybeResolver
111+ else unit
112+ }
113+ else if (if (if (("createdAt" == $match0._1))
114+ then $isInstanceOf($match0._2, "Int")
115+ else false)
116+ then $isInstanceOf($match0, "(String, Int)")
117+ else false)
118+ then {
119+ let nameCreated = $match0._2
120+ if (if ((nameCreated > 0))
121+ then (lastBlock.timestamp >= nameCreated)
122+ else false)
123+ then nameCreated
124+ else unit
125+ }
126+ else if (if (if (("expiresAt" == $match0._1))
127+ then $isInstanceOf($match0._2, "Int")
128+ else false)
129+ then $isInstanceOf($match0, "(String, Int)")
130+ else false)
131+ then {
132+ let nameExpires = $match0._2
133+ if ((nameExpires > 0))
134+ then nameExpires
135+ else unit
136+ }
137+ else if (if (if (("tokenId" == $match0._1))
138+ then $isInstanceOf($match0._2, "String")
139+ else false)
140+ then $isInstanceOf($match0, "(String, String)")
141+ else false)
142+ then {
143+ let tokenId = $match0._2
144+ tokenId
145+ }
146+ else unit
147+ }
148+ }
96149
97150
98151 @Callable(inv)
99152 func setOwner (node,owner) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(owner))
100153 then unit
101154 else throw("Owner must be a valid address")]), _setOwner(node, owner))
102155
103156
104157
105158 @Callable(inv)
106-func getResolver (node) = $Tuple2(nil, _getResolver(node))
107-
108-
109-
110-@Callable(inv)
111159 func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
112160 then unit
113161 else throw("Resolver must be a valid address")]), _setResolver(node, resolver))
114-
115-
116-
117-@Callable(inv)
118-func getNameCreated (node) = $Tuple2(nil, _getCreatedAt(node))
119162
120163
121164
122165 @Callable(inv)
123166 func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv), if (isValidAddress(owner))
124167 then unit
125168 else throw("Owner must be a valid address"), if (isValidAddress(resolver))
126169 then unit
127170 else throw("Resolver must be a valid contract address")]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp)))
128171
129172
130173
131174 @Callable(inv)
132-func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0))
133- then unit
134- else throw("Name cannot be empty")]), {
135- let $t046974748 = _splitLastLabel(name)
136- let lastLabel = $t046974748._1
137- let restLabels = $t046974748._2
138- let registrantAddress = _getOwner(lastLabel)
139- let maybeRegistrant = match registrantAddress {
140- case owner: String =>
141- addressFromString(owner)
142- case _ =>
143- unit
144- }
145- let registrant = value(maybeRegistrant)
146- let parentResolver = _getResolver(lastLabel)
147- let parentCreated = _getCreatedAt(lastLabel)
148- let owner = match _callSupportedInterface(registrant, "getOwner", restLabels) {
149- case owner: String =>
150- if (isValidAddress(owner))
151- then owner
152- else unit
153- case _ =>
154- unit
155- }
156- let resolver = match _callSupportedInterface(registrant, "getResolver", restLabels) {
157- case resolver: String =>
158- if (isValidAddress(resolver))
159- then resolver
160- else unit
161- case _ =>
162- unit
163- }
164- let nameCreated = match _callSupportedInterface(registrant, "getNameCreated", restLabels) {
165- case nameCreated: Int =>
166- if (if ((nameCreated > 0))
167- then (lastBlock.timestamp >= nameCreated)
168- else false)
169- then nameCreated
170- else unit
171- case _ =>
172- unit
173- }
174- let nameExpires = match _callSupportedInterface(registrant, "getNameExpires", restLabels) {
175- case nameExpires: Int =>
176- if ((nameExpires > 0))
177- then nameExpires
178- else unit
179- case _ =>
180- unit
181- }
182- let nameToken = match _callSupportedInterface(registrant, "getNameToken", restLabels) {
183- case nameToken: String =>
184- nameToken
185- case _ =>
186- unit
187- }
188- let isRootName = if ((size(lastLabel) > 0))
189- then (size(restLabels) == 0)
190- else false
191- if (if (isRootName)
192- then true
193- else !(isDefined(maybeRegistrant)))
194- then $Tuple2(nil, $Tuple5(registrantAddress, parentResolver, parentCreated, unit, unit))
195- else $Tuple2(nil, $Tuple5(owner, resolver, nameCreated, nameExpires, nameToken))
196- })
175+func resolve (name,interfaceId,args) = $Tuple2(nil, _resolve(name, interfaceId, args))
176+
177+
178+
179+@Callable(inv)
180+func whoIs (name) = $Tuple2(nil, $Tuple5(_resolve(name, "owner", nil), _resolve(name, "resolver", nil), _resolve(name, "createdAt", nil), _resolve(name, "expiresAt", nil), _resolve(name, "tokenId", nil)))
197181
198182

github/deemru/w8io/6500d08 
49.36 ms