tx · Hnhk5sAkXNvnaBgXXWGjcX91HrE1KaAtrHuRUXnvVXby 3P4p5XcmYbr4NMkKciD8NMATifdRTBZJ2M2: -0.01000000 Waves 2022.11.02 18:06 [3364996] smart account 3P4p5XcmYbr4NMkKciD8NMATifdRTBZJ2M2 > SELF 0.00000000 Waves
{ "type": 13, "id": "Hnhk5sAkXNvnaBgXXWGjcX91HrE1KaAtrHuRUXnvVXby", "fee": 1000000, "feeAssetId": null, "timestamp": 1667401686187, "version": 2, "chainId": 87, "sender": "3P4p5XcmYbr4NMkKciD8NMATifdRTBZJ2M2", "senderPublicKey": "EJkN5GNmovQsjMWSyGhsZWVEmVB3FqVKawCpGMDmW8T", "proofs": [ "2gURGWPXZosKMSmwyoNULNZmsALNgDXithVguSAnsJi9t1gLsyDprsptt4w4ZbfCGoibBRfJHQC33GpffPD22C6U" ], "script": "base64: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", "height": 3364996, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 8sSnaFDbhZz9B6XcJx8zVjBxa6SREkmQx3dVecSGLfyW Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let key_registry = "registry" | |
5 | + | ||
6 | + | let registry = valueOrErrorMessage(addressFromString(value(getString(this, key_registry))), "Registry is not valid address") | |
7 | + | ||
8 | + | let isInitialized = isDefined(getString(this, key_registry)) | |
9 | + | ||
10 | + | func isAdmin (inv) = (inv.caller == this) | |
11 | + | ||
12 | + | ||
13 | + | func isValidAddress (maybeAddress) = isDefined(addressFromString(maybeAddress)) | |
14 | + | ||
15 | + | ||
16 | + | func modifiers (validations) = unit | |
17 | + | ||
18 | + | ||
19 | + | func onlyAdmin (inv) = if (isAdmin(inv)) | |
20 | + | then unit | |
21 | + | else throw("Permission denied") | |
22 | + | ||
23 | + | ||
24 | + | func onlyInitialized () = if (isInitialized) | |
25 | + | then unit | |
26 | + | else throw("Contract is not initialized") | |
27 | + | ||
28 | + | ||
29 | + | func _splitLastLabel (name) = { | |
30 | + | let labels = split(name, ".") | |
31 | + | let lastIndex = (size(labels) - 1) | |
32 | + | let lastLabel = labels[lastIndex] | |
33 | + | let restLabels = makeString(removeByIndex(labels, lastIndex), ".") | |
34 | + | $Tuple2(lastLabel, restLabels) | |
35 | + | } | |
36 | + | ||
37 | + | ||
38 | + | func _findResolver (name) = { | |
39 | + | let $t012621313 = _splitLastLabel(name) | |
40 | + | let lastLabel = $t012621313._1 | |
41 | + | let restLabels = $t012621313._2 | |
42 | + | let throwIf = !(isDefined(registry)) | |
43 | + | if ((throwIf == throwIf)) | |
44 | + | then if ((size(restLabels) == 0)) | |
45 | + | then $Tuple2(unit, name) | |
46 | + | else match invoke(registry, "getResolver", [lastLabel], nil) { | |
47 | + | case resolverAddress: String => | |
48 | + | $Tuple2(addressFromString(resolverAddress), restLabels) | |
49 | + | case _ => | |
50 | + | $Tuple2(unit, name) | |
51 | + | } | |
52 | + | else throw("Strict value is not equal to itself.") | |
53 | + | } | |
54 | + | ||
55 | + | ||
56 | + | @Callable(inv) | |
57 | + | func init (registryAddress) = valueOrElse(modifiers([onlyAdmin(inv), if (isValidAddress(registryAddress)) | |
58 | + | then unit | |
59 | + | else throw("Registry must be a valid address"), if (!(isInitialized)) | |
60 | + | then unit | |
61 | + | else throw("Contract has already been initialized")]), [StringEntry(key_registry, registryAddress)]) | |
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | @Callable(inv) | |
66 | + | func resolve (name,callData) = valueOrElse(modifiers([onlyInitialized()]), { | |
67 | + | let $t021362184 = _findResolver(name) | |
68 | + | let resolver = $t021362184._1 | |
69 | + | let restLabels = $t021362184._2 | |
70 | + | let $t021902334 = match callData { | |
71 | + | case _ => | |
72 | + | if (("getAddr" == $match0)) | |
73 | + | then $Tuple2("getAddr", [value(restLabels)]) | |
74 | + | else $Tuple2(unit, unit) | |
75 | + | } | |
76 | + | let callFunction = $t021902334._1 | |
77 | + | let callArgs = $t021902334._2 | |
78 | + | let supportsInterface = if (!(isDefined(resolver))) | |
79 | + | then false | |
80 | + | else match invoke(value(resolver), "supportsInterface", [callData], nil) { | |
81 | + | case supportsInterface: Boolean => | |
82 | + | supportsInterface | |
83 | + | case _ => | |
84 | + | false | |
85 | + | } | |
86 | + | $Tuple2(nil, if (!(supportsInterface)) | |
87 | + | then unit | |
88 | + | else match invoke(value(resolver), value(callFunction), value(callArgs), nil) { | |
89 | + | case callbackData: String => | |
90 | + | callbackData | |
91 | + | case _ => | |
92 | + | unit | |
93 | + | }) | |
94 | + | }) | |
95 | + | ||
96 | + |
github/deemru/w8io/6500d08 19.22 ms ◑