tx · 9E2sHVZ2co5UFfwXF8k4a4QGfq9m5uCGiqFjntg8Bihd

3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr:  -0.01400000 Waves

2022.03.25 13:51 [1979369] smart account 3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr > SELF 0.00000000 Waves

{ "type": 13, "id": "9E2sHVZ2co5UFfwXF8k4a4QGfq9m5uCGiqFjntg8Bihd", "fee": 1400000, "feeAssetId": null, "timestamp": 1648205499118, "version": 1, "sender": "3N5BB6iE58rujeTEkymeLNcdsYF4f6iKoxr", "senderPublicKey": "EtZZHS4uqNXY5WPneZ8jY2aA95peXwthJVLzAMxMp379", "proofs": [ "2kQSeuqKg8cJZuXEnBFUQEDeuL1kzWMZr712Wyf5AhZFxMRdUrt1hz9KHWJNY6c6VUVitnFTbC93vpiM8y385Je" ], "script": "base64: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B2Fzc2V0SWQJAQAAABB2ZXJpZmllZFRvU3RhdHVzAAAAAQUAAAAIdmVyaWZpZWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAJc2V0QWRtaW5zAAAAAQAAAAxhZG1pblB1YktleXMEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFkbWluUHViS2V5cwAAAAAJAAS5AAAAAgUAAAAMYWRtaW5QdWJLZXlzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXk0bEpC", "chainId": 84, "height": 1979369, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: C3u7eSPBMjRRXmuBTaGQpsPTuzh7bajo9pbk9KMZ9CqV Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+let EMPTY = ""
7+
8+func throwPD () = throw("Permission denied")
9+
10+
11+func throwNoAsset () = throw("Asset doesn't exists")
12+
13+
14+func keyManagerPublicKey () = "%s__managerPublicKey"
15+
16+
17+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
18+
19+
20+func keyAdminPubKeys () = "%s__adminPubKeys"
21+
22+
23+func keyCreated (assetId) = (("created_<" + assetId) + ">")
24+
25+
26+func keyLogo (assetId) = (("logo_<" + assetId) + ">")
27+
28+
29+func keyTicker (assetId) = (("ticker_<" + assetId) + ">")
30+
31+
32+func keyStatus (assetId) = (("status_<" + assetId) + ">")
33+
34+
35+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
36+ case s: String =>
37+ fromBase58String(s)
38+ case _: Unit =>
39+ unit
40+ case _ =>
41+ throw("Match error")
42+}
43+
44+
45+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
46+ case s: String =>
47+ fromBase58String(s)
48+ case _: Unit =>
49+ unit
50+ case _ =>
51+ throw("Match error")
52+}
53+
54+
55+func mustManager (i) = match managerPublicKeyOrUnit() {
56+ case pk: ByteVector =>
57+ if ((i.callerPublicKey == pk))
58+ then true
59+ else throwPD()
60+ case _: Unit =>
61+ if ((i.caller == this))
62+ then true
63+ else throwPD()
64+ case _ =>
65+ throw("Match error")
66+}
67+
68+
69+func mustAdmin (i) = {
70+ let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
71+ if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
72+ then true
73+ else {
74+ let isManager = mustManager(i)
75+ if ((isManager == isManager))
76+ then true
77+ else throw("Strict value is not equal to itself.")
78+ }
79+ }
80+
81+
82+func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
83+
84+
85+func verifiedToStatus (verified) = if (verified)
86+ then 2
87+ else 0
88+
89+
90+@Callable(i)
91+func createOrUpdate (assetId,ticker,logo,verified) = {
92+ let checkCaller = mustAdmin(i)
93+ if ((checkCaller == checkCaller))
94+ then {
95+ let checkAssetId = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Invalid asset ID")
96+ if ((checkAssetId == checkAssetId))
97+ then {
98+ let isCreatedNow = !(isCreated(assetId))
99+ if ((isCreatedNow == isCreatedNow))
100+ then $Tuple2([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), StringEntry(keyLogo(assetId), logo), IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))], isCreatedNow)
101+ else throw("Strict value is not equal to itself.")
102+ }
103+ else throw("Strict value is not equal to itself.")
104+ }
105+ else throw("Strict value is not equal to itself.")
106+ }
107+
108+
109+
110+@Callable(i)
111+func setTicker (assetId,ticker) = {
112+ let checks = [mustAdmin(i), if (isCreated(assetId))
113+ then true
114+ else throwNoAsset()]
115+ if ((checks == checks))
116+ then [StringEntry(keyTicker(assetId), ticker)]
117+ else throw("Strict value is not equal to itself.")
118+ }
119+
120+
121+
122+@Callable(i)
123+func setLogo (assetId,logo) = {
124+ let checks = [mustAdmin(i), if (isCreated(assetId))
125+ then true
126+ else throwNoAsset()]
127+ if ((checks == checks))
128+ then [StringEntry(keyLogo(assetId), logo)]
129+ else throw("Strict value is not equal to itself.")
130+ }
131+
132+
133+
134+@Callable(i)
135+func setVerified (assetId,verified) = {
136+ let checks = [mustAdmin(i), if (isCreated(assetId))
137+ then true
138+ else throwNoAsset()]
139+ if ((checks == checks))
140+ then [IntegerEntry(keyStatus(assetId), verifiedToStatus(verified))]
141+ else throw("Strict value is not equal to itself.")
142+ }
143+
144+
145+
146+@Callable(i)
147+func setAdmins (adminPubKeys) = {
148+ let checkCaller = mustManager(i)
149+ if ((checkCaller == checkCaller))
150+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
151+ else throw("Strict value is not equal to itself.")
152+ }
153+
154+
155+
156+@Callable(i)
157+func setManager (pendingManagerPublicKey) = {
158+ let checkCaller = mustManager(i)
159+ if ((checkCaller == checkCaller))
160+ then {
161+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
162+ if ((checkManagerPublicKey == checkManagerPublicKey))
163+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
164+ else throw("Strict value is not equal to itself.")
165+ }
166+ else throw("Strict value is not equal to itself.")
167+ }
168+
169+
170+
171+@Callable(i)
172+func confirmManager () = {
173+ let pm = pendingManagerPublicKeyOrUnit()
174+ let hasPM = if (isDefined(pm))
175+ then true
176+ else throw("No pending manager")
177+ if ((hasPM == hasPM))
178+ then {
179+ let checkPM = if ((i.callerPublicKey == value(pm)))
180+ then true
181+ else throw("You are not pending manager")
182+ if ((checkPM == checkPM))
183+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
184+ else throw("Strict value is not equal to itself.")
185+ }
186+ else throw("Strict value is not equal to itself.")
187+ }
188+
189+
190+@Verifier(tx)
191+func verify () = {
192+ let targetPublicKey = match managerPublicKeyOrUnit() {
193+ case pk: ByteVector =>
194+ pk
195+ case _: Unit =>
196+ tx.senderPublicKey
197+ case _ =>
198+ throw("Match error")
199+ }
200+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
201+ }
202+

github/deemru/w8io/873ac7e 
19.32 ms