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:
OldNewDifferences
2828 func _setOwner (node,owner) = [StringEntry(key_Name_owner(node), owner)]
2929
3030
31+func _getRegistrar (node) = getString(this, key_Name_owner(node))
32+
33+
3134 func _getResolver (node) = getString(this, key_Name_resolver(node))
3235
3336
4952 func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress))
5053
5154
52-func _splitLastLabel (name) = {
55+func _splitTLD (name) = {
5356 let labels = split(name, ".")
5457 let lastIndex = (size(labels) - 1)
5558 let lastLabel = labels[lastIndex]
5861 }
5962
6063
61-func _supportedInterfaceAsString (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) {
64+func _callSupportedInterface (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) {
6265 case supportsInterface: Boolean =>
6366 if (!(supportsInterface))
6467 then unit
6568 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
8373 case _ =>
8474 unit
8575 }
10494
10595
10696 @Callable(inv)
97+func owner (node) = $Tuple2(nil, _getOwner(node))
98+
99+
100+
101+@Callable(inv)
107102 func setOwner (node,owner) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(owner))
108103 then unit
109104 else throw("Owner must be a valid address")]), _setOwner(node, owner))
111106
112107
113108 @Callable(inv)
114-func owner (node) = $Tuple2(nil, _getOwner(node))
109+func registrar (node) = $Tuple2(nil, _getRegistrar(node))
115110
116111
117112
141136 func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0))
142137 then unit
143138 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) {
149143 case owner: String =>
150- addressFromString(owner)
144+ if (isValidAddress(owner))
145+ then owner
146+ else unit
151147 case _ =>
152148 unit
153149 }
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))
161204 then (size(restLabels) == 0)
162205 else false
163206 if (if (isRootName)
164207 then true
165- else !(isDefined(registrant)))
166- then $Tuple2(nil, $Tuple4(registrantAddress, parentResolver, parentCreated, unit))
167- else $Tuple2(nil, $Tuple4( match owner {
208+ else !(isDefined(parentRegistrarAddress)))
209+ then $Tuple2(nil, $Tuple5(parentRegistrarAddress, parentOwnerAddress, parentResolver, parentCreated, unit))
210+ else $Tuple2(nil, $Tuple5( match owner {
168211 case owner: String =>
169212 owner
170213 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))
183216 })
184217
185218
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
88
99
1010 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1111
1212
1313 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
1414
1515
1616 func key_Name_owner (node) = key_entity("Name", node, "owner")
1717
1818
1919 func key_Name_resolver (node) = key_entity("Name", node, "resolver")
2020
2121
2222 func key_Name_createdAt (node) = key_entity("Name", node, "createdAt")
2323
2424
2525 func _getOwner (node) = getString(this, key_Name_owner(node))
2626
2727
2828 func _setOwner (node,owner) = [StringEntry(key_Name_owner(node), owner)]
2929
3030
31+func _getRegistrar (node) = getString(this, key_Name_owner(node))
32+
33+
3134 func _getResolver (node) = getString(this, key_Name_resolver(node))
3235
3336
3437 func _setResolver (node,resolver) = [StringEntry(key_Name_resolver(node), resolver)]
3538
3639
3740 func _getCreatedAt (node) = getInteger(this, key_Name_createdAt(node))
3841
3942
4043 func _setCreatedAt (node,createdAt) = [IntegerEntry(key_Name_createdAt(node), createdAt)]
4144
4245
4346 func isAdmin (inv) = (inv.caller == this)
4447
4548
4649 func isOwner (inv,node) = (toString(inv.caller) == valueOrElse(_getOwner(node), ""))
4750
4851
4952 func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress))
5053
5154
52-func _splitLastLabel (name) = {
55+func _splitTLD (name) = {
5356 let labels = split(name, ".")
5457 let lastIndex = (size(labels) - 1)
5558 let lastLabel = labels[lastIndex]
5659 let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
5760 $Tuple2(lastLabel, restLabels)
5861 }
5962
6063
61-func _supportedInterfaceAsString (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) {
64+func _callSupportedInterface (registrant,interfaceId,restLabels) = match invoke(registrant, "supportsInterface", [interfaceId], nil) {
6265 case supportsInterface: Boolean =>
6366 if (!(supportsInterface))
6467 then unit
6568 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
8373 case _ =>
8474 unit
8575 }
8676 case _ =>
8777 unit
8878 }
8979
9080
9181 func modifiers (validations) = unit
9282
9383
9484 func onlyAdmin (inv) = if (isAdmin(inv))
9585 then unit
9686 else throw("Permission denied")
9787
9888
9989 func onlyOwner (inv,node) = if (if (isAdmin(inv))
10090 then true
10191 else isOwner(inv, node))
10292 then unit
10393 else throw("Permission denied")
10494
10595
10696 @Callable(inv)
97+func owner (node) = $Tuple2(nil, _getOwner(node))
98+
99+
100+
101+@Callable(inv)
107102 func setOwner (node,owner) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(owner))
108103 then unit
109104 else throw("Owner must be a valid address")]), _setOwner(node, owner))
110105
111106
112107
113108 @Callable(inv)
114-func owner (node) = $Tuple2(nil, _getOwner(node))
109+func registrar (node) = $Tuple2(nil, _getRegistrar(node))
115110
116111
117112
118113 @Callable(inv)
119114 func resolver (node) = $Tuple2(nil, _getResolver(node))
120115
121116
122117
123118 @Callable(inv)
124119 func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
125120 then unit
126121 else throw("Resolver must be a valid contract address")]), _setResolver(node, resolver))
127122
128123
129124
130125 @Callable(inv)
131126 func nameCreated (node) = $Tuple2(nil, _getCreatedAt(node))
132127
133128
134129
135130 @Callable(inv)
136131 func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv)]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp)))
137132
138133
139134
140135 @Callable(inv)
141136 func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0))
142137 then unit
143138 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) {
149143 case owner: String =>
150- addressFromString(owner)
144+ if (isValidAddress(owner))
145+ then owner
146+ else unit
151147 case _ =>
152148 unit
153149 }
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))
161204 then (size(restLabels) == 0)
162205 else false
163206 if (if (isRootName)
164207 then true
165- else !(isDefined(registrant)))
166- then $Tuple2(nil, $Tuple4(registrantAddress, parentResolver, parentCreated, unit))
167- else $Tuple2(nil, $Tuple4( match owner {
208+ else !(isDefined(parentRegistrarAddress)))
209+ then $Tuple2(nil, $Tuple5(parentRegistrarAddress, parentOwnerAddress, parentResolver, parentCreated, unit))
210+ else $Tuple2(nil, $Tuple5( match owner {
168211 case owner: String =>
169212 owner
170213 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))
183216 })
184217
185218

github/deemru/w8io/c3f4982 
30.71 ms