tx · 9KvWEzhLVMZZ5EzZdcz6cpoG6P1KyXzJh34posmuipBP

3MvCgypmBZFTRqL5HuRwCgS7maC7Fkv7pZY:  -0.00600000 Waves

2022.11.25 20:46 [2332937] smart account 3MvCgypmBZFTRqL5HuRwCgS7maC7Fkv7pZY > SELF 0.00000000 Waves

{ "type": 13, "id": "9KvWEzhLVMZZ5EzZdcz6cpoG6P1KyXzJh34posmuipBP", "fee": 600000, "feeAssetId": null, "timestamp": 1669398410680, "version": 2, "chainId": 84, "sender": "3MvCgypmBZFTRqL5HuRwCgS7maC7Fkv7pZY", "senderPublicKey": "BqGSAiYghM27RZ2Axx3bmTudq9koHT4575AeK31Wx2Pp", "proofs": [ "YEWqmefyenPcH5EVwTyjGBXdANGT3nfGCoy9gTyf66HK6EXb3hVHSVCCStiXwedcdjNhZkRBfeM9mY4wqgZNoT8" ], "script": "base64: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", "height": 2332937, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HJs69bGWLZoxDjkYVFWb8CtmkRXR3TQnB3348YFQSrXm Next: ox7grfPtk7mdCdZBiBAqyHvc7A7SU57Y9kwMpnx1yUn 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))
159+func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
160+ then unit
161+ else throw("Resolver must be a valid address")]), _setResolver(node, resolver))
107162
108163
109164
110165 @Callable(inv)
111-func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
166+func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv), if (isValidAddress(owner))
112167 then unit
113- else throw("Resolver must be a valid contract address")]), _setResolver(node, resolver))
168+ else throw("Owner must be a valid address"), if (isValidAddress(resolver))
169+ then unit
170+ else throw("Resolver must be a valid contract address")]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp)))
114171
115172
116173
117174 @Callable(inv)
118-func getNameCreated (node) = $Tuple2(nil, _getCreatedAt(node))
175+func resolve (name,interfaceId,args) = $Tuple2(nil, _resolve(name, interfaceId, args))
119176
120177
121178
122179 @Callable(inv)
123-func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv)]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp)))
124-
125-
126-
127-@Callable(inv)
128-func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0))
129- then unit
130- else throw("Name cannot be empty")]), {
131- let $t045214572 = _splitLastLabel(name)
132- let lastLabel = $t045214572._1
133- let restLabels = $t045214572._2
134- let registrantAddress = _getOwner(lastLabel)
135- let maybeRegistrant = match registrantAddress {
136- case owner: String =>
137- addressFromString(owner)
138- case _ =>
139- unit
140- }
141- let registrant = value(maybeRegistrant)
142- let parentResolver = _getResolver(lastLabel)
143- let parentCreated = _getCreatedAt(lastLabel)
144- let owner = match _callSupportedInterface(registrant, "getOwner", restLabels) {
145- case owner: String =>
146- if (isValidAddress(owner))
147- then owner
148- else unit
149- case _ =>
150- unit
151- }
152- let resolver = match _callSupportedInterface(registrant, "getResolver", restLabels) {
153- case resolver: String =>
154- if (isValidAddress(resolver))
155- then resolver
156- else unit
157- case _ =>
158- unit
159- }
160- let nameCreated = match _callSupportedInterface(registrant, "getNameCreated", restLabels) {
161- case nameCreated: Int =>
162- if (if ((nameCreated > 0))
163- then (lastBlock.timestamp > nameCreated)
164- else false)
165- then nameCreated
166- else unit
167- case _ =>
168- unit
169- }
170- let nameExpires = match _callSupportedInterface(registrant, "getNameExpires", restLabels) {
171- case nameExpires: Int =>
172- if ((nameExpires > 0))
173- then nameExpires
174- else unit
175- case _ =>
176- unit
177- }
178- let isRootName = if ((size(lastLabel) > 0))
179- then (size(restLabels) == 0)
180- else false
181- if (if (isRootName)
182- then true
183- else !(isDefined(maybeRegistrant)))
184- then $Tuple2(nil, $Tuple4(registrantAddress, parentResolver, parentCreated, unit))
185- else $Tuple2(nil, $Tuple4(owner, resolver, nameCreated, nameExpires))
186- })
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)))
187181
188182
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))
159+func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
160+ then unit
161+ else throw("Resolver must be a valid address")]), _setResolver(node, resolver))
107162
108163
109164
110165 @Callable(inv)
111-func setResolver (node,resolver) = valueOrElse(modifiers([onlyOwner(inv, node), if (isValidAddress(resolver))
166+func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv), if (isValidAddress(owner))
112167 then unit
113- else throw("Resolver must be a valid contract address")]), _setResolver(node, resolver))
168+ else throw("Owner must be a valid address"), if (isValidAddress(resolver))
169+ then unit
170+ else throw("Resolver must be a valid contract address")]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp)))
114171
115172
116173
117174 @Callable(inv)
118-func getNameCreated (node) = $Tuple2(nil, _getCreatedAt(node))
175+func resolve (name,interfaceId,args) = $Tuple2(nil, _resolve(name, interfaceId, args))
119176
120177
121178
122179 @Callable(inv)
123-func setRecord (node,owner,resolver) = valueOrElse(modifiers([onlyAdmin(inv)]), ((_setOwner(node, owner) ++ _setResolver(node, resolver)) ++ _setCreatedAt(node, lastBlock.timestamp)))
124-
125-
126-
127-@Callable(inv)
128-func whoIs (name) = valueOrElse(modifiers([if ((size(name) > 0))
129- then unit
130- else throw("Name cannot be empty")]), {
131- let $t045214572 = _splitLastLabel(name)
132- let lastLabel = $t045214572._1
133- let restLabels = $t045214572._2
134- let registrantAddress = _getOwner(lastLabel)
135- let maybeRegistrant = match registrantAddress {
136- case owner: String =>
137- addressFromString(owner)
138- case _ =>
139- unit
140- }
141- let registrant = value(maybeRegistrant)
142- let parentResolver = _getResolver(lastLabel)
143- let parentCreated = _getCreatedAt(lastLabel)
144- let owner = match _callSupportedInterface(registrant, "getOwner", restLabels) {
145- case owner: String =>
146- if (isValidAddress(owner))
147- then owner
148- else unit
149- case _ =>
150- unit
151- }
152- let resolver = match _callSupportedInterface(registrant, "getResolver", restLabels) {
153- case resolver: String =>
154- if (isValidAddress(resolver))
155- then resolver
156- else unit
157- case _ =>
158- unit
159- }
160- let nameCreated = match _callSupportedInterface(registrant, "getNameCreated", restLabels) {
161- case nameCreated: Int =>
162- if (if ((nameCreated > 0))
163- then (lastBlock.timestamp > nameCreated)
164- else false)
165- then nameCreated
166- else unit
167- case _ =>
168- unit
169- }
170- let nameExpires = match _callSupportedInterface(registrant, "getNameExpires", restLabels) {
171- case nameExpires: Int =>
172- if ((nameExpires > 0))
173- then nameExpires
174- else unit
175- case _ =>
176- unit
177- }
178- let isRootName = if ((size(lastLabel) > 0))
179- then (size(restLabels) == 0)
180- else false
181- if (if (isRootName)
182- then true
183- else !(isDefined(maybeRegistrant)))
184- then $Tuple2(nil, $Tuple4(registrantAddress, parentResolver, parentCreated, unit))
185- else $Tuple2(nil, $Tuple4(owner, resolver, nameCreated, nameExpires))
186- })
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)))
187181
188182

github/deemru/w8io/169f3d6 
124.96 ms