tx · Gdsc7XwZzoKPRENzieaFGcczf27XDvtadgU4W9XM9vm

3MrF6QFGLaSKfoNPMd8L3u7KYNm7cE43Ydw:  -0.01000000 Waves

2022.10.17 13:54 [2276276] smart account 3MrF6QFGLaSKfoNPMd8L3u7KYNm7cE43Ydw > SELF 0.00000000 Waves

{ "type": 13, "id": "Gdsc7XwZzoKPRENzieaFGcczf27XDvtadgU4W9XM9vm", "fee": 1000000, "feeAssetId": null, "timestamp": 1666004086177, "version": 2, "chainId": 84, "sender": "3MrF6QFGLaSKfoNPMd8L3u7KYNm7cE43Ydw", "senderPublicKey": "6NSakbUsm1WyESQ8yj3qpc1kQUfHWNd5C6CHVpbs4X7c", "proofs": [ "3KK8HFR9JMaisNAUim89Gc2JZgcaY1hvhVWHy88Mn54UBiw7K3ncQ1UqMH3cRrQ1Ev1g2JjtfRgAkpRtgtc1ct4H" ], "script": "base64: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", "height": 2276276, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FqLWGMt8tdDw1xzW4MzwEmtaqyt1VJMpmDsHNy8yUr8C Next: 7qLMYXMXjpehaResukaezEZutB2qqVVBeWV2aVbShZjZ Diff:
OldNewDifferences
6666 let lastLabel = $t019602011._1
6767 let restLabels = $t019602011._2
6868 if ((size(restLabels) == 0))
69- then $Tuple2(unit, name)
69+ then $Tuple3(unit, lastLabel, restLabels)
7070 else match invoke(registry, "resolver", [lastLabel], nil) {
7171 case resolverAddress: String =>
72- $Tuple2(addressFromString(resolverAddress), restLabels)
72+ $Tuple3(addressFromString(resolverAddress), lastLabel, restLabels)
7373 case _ =>
74- $Tuple2(unit, name)
74+ $Tuple3(unit, lastLabel, restLabels)
7575 }
7676 }
7777
7878
7979 func _resolve (name,callData) = {
80- let $t023892437 = _findResolver(name)
81- let resolver = $t023892437._1
82- let restLabels = $t023892437._2
83- let $t024432581 = match callData {
80+ let $t024342489 = _findResolver(name)
81+ let resolver = $t024342489._1
82+ let label = $t024342489._2
83+ let restLabels = $t024342489._3
84+ let $t024952672 = match callData {
8485 case _ =>
8586 if (("addr" == $match0))
86- then $Tuple2("addr", [value(restLabels)])
87- else $Tuple2(unit, unit)
87+ then $Tuple3("addr", [value(restLabels)], _getAddr(label))
88+ else $Tuple3(unit, unit, unit)
8889 }
89- let callFunction = $t024432581._1
90- let callArgs = $t024432581._2
90+ let callFunction = $t024952672._1
91+ let callArgs = $t024952672._2
92+ let returnsDefault = $t024952672._3
9193 let supportsInterface = match invoke(value(resolver), "supportsInterface", [callData], nil) {
9294 case supportsInterface: Boolean =>
9395 supportsInterface
9496 case _ =>
9597 false
9698 }
97- if (if (!(isDefined(resolver)))
98- then true
99- else (size(restLabels) == 0))
100- then unit
99+ if (!(isDefined(resolver)))
100+ then returnsDefault
101101 else if (!(supportsInterface))
102102 then unit
103103 else match invoke(value(resolver), value(callFunction), value(callArgs), nil) {
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 parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
88
99
1010 func key_Name_addr (name) = (("Name_" + name) + "_addr")
1111
1212
1313 let key_registry = "registry"
1414
1515 let registry = parseAddressOrThrow(getStringOrThrow(this, key_registry))
1616
1717 func _splitLastLabel (name) = {
1818 let labels = split(name, ".")
1919 let lastIndex = (size(labels) - 1)
2020 let lastLabel = labels[lastIndex]
2121 let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
2222 $Tuple2(lastLabel, restLabels)
2323 }
2424
2525
2626 func _getOwner (name) = match invoke(registry, "owner", [name], nil) {
2727 case owner: String =>
2828 owner
2929 case _ =>
3030 unit
3131 }
3232
3333
3434 func _getAddr (name) = valueOrElse(getString(this, key_Name_addr(name)), _getOwner(_splitLastLabel(name)._1))
3535
3636
3737 func _setAddr (name,address) = [StringEntry(key_Name_addr(name), address)]
3838
3939
4040 func isAdmin (inv) = (inv.caller == this)
4141
4242
4343 func isOwner (inv,name) = (toString(inv.caller) == valueOrElse(_getOwner(name), ""))
4444
4545
4646 func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress))
4747
4848
4949 func modifiers (validations) = unit
5050
5151
5252 func onlyAdmin (inv) = if (isAdmin(inv))
5353 then unit
5454 else throw("Permission denied")
5555
5656
5757 func onlyOwner (inv,name) = if (if (isAdmin(inv))
5858 then true
5959 else isOwner(inv, name))
6060 then unit
6161 else throw("Permission denied")
6262
6363
6464 func _findResolver (name) = {
6565 let $t019602011 = _splitLastLabel(name)
6666 let lastLabel = $t019602011._1
6767 let restLabels = $t019602011._2
6868 if ((size(restLabels) == 0))
69- then $Tuple2(unit, name)
69+ then $Tuple3(unit, lastLabel, restLabels)
7070 else match invoke(registry, "resolver", [lastLabel], nil) {
7171 case resolverAddress: String =>
72- $Tuple2(addressFromString(resolverAddress), restLabels)
72+ $Tuple3(addressFromString(resolverAddress), lastLabel, restLabels)
7373 case _ =>
74- $Tuple2(unit, name)
74+ $Tuple3(unit, lastLabel, restLabels)
7575 }
7676 }
7777
7878
7979 func _resolve (name,callData) = {
80- let $t023892437 = _findResolver(name)
81- let resolver = $t023892437._1
82- let restLabels = $t023892437._2
83- let $t024432581 = match callData {
80+ let $t024342489 = _findResolver(name)
81+ let resolver = $t024342489._1
82+ let label = $t024342489._2
83+ let restLabels = $t024342489._3
84+ let $t024952672 = match callData {
8485 case _ =>
8586 if (("addr" == $match0))
86- then $Tuple2("addr", [value(restLabels)])
87- else $Tuple2(unit, unit)
87+ then $Tuple3("addr", [value(restLabels)], _getAddr(label))
88+ else $Tuple3(unit, unit, unit)
8889 }
89- let callFunction = $t024432581._1
90- let callArgs = $t024432581._2
90+ let callFunction = $t024952672._1
91+ let callArgs = $t024952672._2
92+ let returnsDefault = $t024952672._3
9193 let supportsInterface = match invoke(value(resolver), "supportsInterface", [callData], nil) {
9294 case supportsInterface: Boolean =>
9395 supportsInterface
9496 case _ =>
9597 false
9698 }
97- if (if (!(isDefined(resolver)))
98- then true
99- else (size(restLabels) == 0))
100- then unit
99+ if (!(isDefined(resolver)))
100+ then returnsDefault
101101 else if (!(supportsInterface))
102102 then unit
103103 else match invoke(value(resolver), value(callFunction), value(callArgs), nil) {
104104 case maybeAddr: String =>
105105 if (isValidAddress(maybeAddr))
106106 then maybeAddr
107107 else unit
108108 case _ =>
109109 unit
110110 }
111111 }
112112
113113
114114 @Callable(inv)
115115 func init (registryAddress) = valueOrElse(modifiers([onlyAdmin(inv)]), [StringEntry(key_registry, registryAddress)])
116116
117117
118118
119119 @Callable(inv)
120120 func supportsInterface (interfaceId) = $Tuple2(nil, (interfaceId == "addr"))
121121
122122
123123
124124 @Callable(inv)
125125 func addr (name) = valueOrElse(modifiers([if ((size(name) > 0))
126126 then unit
127127 else throw("Name cannot be empty")]), $Tuple2(nil, _resolve(name, "addr")))
128128
129129
130130
131131 @Callable(inv)
132132 func setAddr (name,address) = valueOrElse(modifiers([if ((size(name) > 0))
133133 then unit
134134 else throw("Name cannot be empty"), onlyOwner(inv, name), if (isDefined(addressFromString(address)))
135135 then unit
136136 else throw("Address must be valid")]), _setAddr(name, address))
137137
138138

github/deemru/w8io/169f3d6 
38.44 ms