tx · CyYLz38JrK3Q6PzpxbkjXqST3fqc6tyYkzVp52qe5tun

3MrF6QFGLaSKfoNPMd8L3u7KYNm7cE43Ydw:  -0.01000000 Waves

2022.10.17 13:47 [2276269] smart account 3MrF6QFGLaSKfoNPMd8L3u7KYNm7cE43Ydw > SELF 0.00000000 Waves

{ "type": 13, "id": "CyYLz38JrK3Q6PzpxbkjXqST3fqc6tyYkzVp52qe5tun", "fee": 1000000, "feeAssetId": null, "timestamp": 1666003657050, "version": 2, "chainId": 84, "sender": "3MrF6QFGLaSKfoNPMd8L3u7KYNm7cE43Ydw", "senderPublicKey": "6NSakbUsm1WyESQ8yj3qpc1kQUfHWNd5C6CHVpbs4X7c", "proofs": [ "3rzPaQ7jdvWjsoautJqCM4SaDQCr9exuNof8M2MmoYUmqujix6zTuLHawoCDMv6fQGgoXHQrxMKudUPnxRBJkNw" ], "script": "base64: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", "height": 2276269, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EnE51fMhdxW59yv3ircf8436S9rkarSPR77v7tELCKaq Next: FqLWGMt8tdDw1xzW4MzwEmtaqyt1VJMpmDsHNy8yUr8C Diff:
OldNewDifferences
1414
1515 let registry = parseAddressOrThrow(getStringOrThrow(this, key_registry))
1616
17+func _splitLastLabel (name) = {
18+ let labels = split(name, ".")
19+ let lastIndex = (size(labels) - 1)
20+ let lastLabel = labels[lastIndex]
21+ let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
22+ $Tuple2(lastLabel, restLabels)
23+ }
24+
25+
1726 func _getOwner (name) = match invoke(registry, "owner", [name], nil) {
1827 case owner: String =>
1928 owner
2231 }
2332
2433
25-func _getAddr (name) = valueOrElse(getString(this, key_Name_addr(name)), _getOwner(name))
34+func _getAddr (name) = valueOrElse(getString(this, key_Name_addr(name)), _getOwner(_splitLastLabel(name)._1))
2635
2736
2837 func _setAddr (name,address) = [StringEntry(key_Name_addr(name), address)]
5261 else throw("Permission denied")
5362
5463
55-func _splitLastLabel (name) = {
56- let labels = split(name, ".")
57- let lastIndex = (size(labels) - 1)
58- let lastLabel = labels[lastIndex]
59- let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
60- $Tuple2(lastLabel, restLabels)
61- }
62-
63-
6464 func _findResolver (name) = {
65- let $t019341985 = _splitLastLabel(name)
66- let lastLabel = $t019341985._1
67- let restLabels = $t019341985._2
65+ let $t019602011 = _splitLastLabel(name)
66+ let lastLabel = $t019602011._1
67+ let restLabels = $t019602011._2
6868 if ((size(restLabels) == 0))
6969 then $Tuple2(unit, name)
7070 else match invoke(registry, "resolver", [lastLabel], nil) {
7777
7878
7979 func _resolve (name,callData) = {
80- let $t023632411 = _findResolver(name)
81- let resolver = $t023632411._1
82- let restLabels = $t023632411._2
83- let $t024172593 = match callData {
80+ let $t023892437 = _findResolver(name)
81+ let resolver = $t023892437._1
82+ let restLabels = $t023892437._2
83+ let $t024432619 = match callData {
8484 case _ =>
8585 if (("addr" == $match0))
8686 then $Tuple3("addr", [value(restLabels)], _getAddr(name))
8787 else $Tuple3(unit, unit, unit)
8888 }
89- let callFunction = $t024172593._1
90- let callArgs = $t024172593._2
91- let returnsDefault = $t024172593._3
89+ let callFunction = $t024432619._1
90+ let callArgs = $t024432619._2
91+ let returnsDefault = $t024432619._3
9292 let supportsInterface = match invoke(value(resolver), "supportsInterface", [callData], nil) {
9393 case supportsInterface: Boolean =>
9494 supportsInterface
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
17+func _splitLastLabel (name) = {
18+ let labels = split(name, ".")
19+ let lastIndex = (size(labels) - 1)
20+ let lastLabel = labels[lastIndex]
21+ let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
22+ $Tuple2(lastLabel, restLabels)
23+ }
24+
25+
1726 func _getOwner (name) = match invoke(registry, "owner", [name], nil) {
1827 case owner: String =>
1928 owner
2029 case _ =>
2130 unit
2231 }
2332
2433
25-func _getAddr (name) = valueOrElse(getString(this, key_Name_addr(name)), _getOwner(name))
34+func _getAddr (name) = valueOrElse(getString(this, key_Name_addr(name)), _getOwner(_splitLastLabel(name)._1))
2635
2736
2837 func _setAddr (name,address) = [StringEntry(key_Name_addr(name), address)]
2938
3039
3140 func isAdmin (inv) = (inv.caller == this)
3241
3342
3443 func isOwner (inv,name) = (toString(inv.caller) == valueOrElse(_getOwner(name), ""))
3544
3645
3746 func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress))
3847
3948
4049 func modifiers (validations) = unit
4150
4251
4352 func onlyAdmin (inv) = if (isAdmin(inv))
4453 then unit
4554 else throw("Permission denied")
4655
4756
4857 func onlyOwner (inv,name) = if (if (isAdmin(inv))
4958 then true
5059 else isOwner(inv, name))
5160 then unit
5261 else throw("Permission denied")
5362
5463
55-func _splitLastLabel (name) = {
56- let labels = split(name, ".")
57- let lastIndex = (size(labels) - 1)
58- let lastLabel = labels[lastIndex]
59- let restLabels = makeString(removeByIndex(labels, lastIndex), ".")
60- $Tuple2(lastLabel, restLabels)
61- }
62-
63-
6464 func _findResolver (name) = {
65- let $t019341985 = _splitLastLabel(name)
66- let lastLabel = $t019341985._1
67- let restLabels = $t019341985._2
65+ let $t019602011 = _splitLastLabel(name)
66+ let lastLabel = $t019602011._1
67+ let restLabels = $t019602011._2
6868 if ((size(restLabels) == 0))
6969 then $Tuple2(unit, name)
7070 else match invoke(registry, "resolver", [lastLabel], nil) {
7171 case resolverAddress: String =>
7272 $Tuple2(addressFromString(resolverAddress), restLabels)
7373 case _ =>
7474 $Tuple2(unit, name)
7575 }
7676 }
7777
7878
7979 func _resolve (name,callData) = {
80- let $t023632411 = _findResolver(name)
81- let resolver = $t023632411._1
82- let restLabels = $t023632411._2
83- let $t024172593 = match callData {
80+ let $t023892437 = _findResolver(name)
81+ let resolver = $t023892437._1
82+ let restLabels = $t023892437._2
83+ let $t024432619 = match callData {
8484 case _ =>
8585 if (("addr" == $match0))
8686 then $Tuple3("addr", [value(restLabels)], _getAddr(name))
8787 else $Tuple3(unit, unit, unit)
8888 }
89- let callFunction = $t024172593._1
90- let callArgs = $t024172593._2
91- let returnsDefault = $t024172593._3
89+ let callFunction = $t024432619._1
90+ let callArgs = $t024432619._2
91+ let returnsDefault = $t024432619._3
9292 let supportsInterface = match invoke(value(resolver), "supportsInterface", [callData], nil) {
9393 case supportsInterface: Boolean =>
9494 supportsInterface
9595 case _ =>
9696 false
9797 }
9898 if (if (!(isDefined(resolver)))
9999 then true
100100 else (size(restLabels) == 0))
101101 then returnsDefault
102102 else if (!(supportsInterface))
103103 then unit
104104 else match invoke(value(resolver), value(callFunction), value(callArgs), nil) {
105105 case maybeAddr: String =>
106106 if (isValidAddress(maybeAddr))
107107 then maybeAddr
108108 else unit
109109 case _ =>
110110 unit
111111 }
112112 }
113113
114114
115115 @Callable(inv)
116116 func init (registryAddress) = valueOrElse(modifiers([onlyAdmin(inv)]), [StringEntry(key_registry, registryAddress)])
117117
118118
119119
120120 @Callable(inv)
121121 func supportsInterface (interfaceId) = $Tuple2(nil, (interfaceId == "addr"))
122122
123123
124124
125125 @Callable(inv)
126126 func addr (name) = valueOrElse(modifiers([if ((size(name) > 0))
127127 then unit
128128 else throw("Name cannot be empty")]), $Tuple2(nil, _resolve(name, "addr")))
129129
130130
131131
132132 @Callable(inv)
133133 func setAddr (name,address) = valueOrElse(modifiers([if ((size(name) > 0))
134134 then unit
135135 else throw("Name cannot be empty"), onlyOwner(inv, name), if (isDefined(addressFromString(address)))
136136 then unit
137137 else throw("Address must be valid")]), _setAddr(name, address))
138138
139139

github/deemru/w8io/c3f4982 
45.41 ms