tx · 7rFw5Y43GBaoF8XMHUmJSjvpMbcj9WDPMi3gvbHn3QKU

3MysQs2skeDQPVBvFzvQu2KzW152VhTVAzw:  -0.01400000 Waves

2022.03.21 15:22 [1973691] smart account 3MysQs2skeDQPVBvFzvQu2KzW152VhTVAzw > SELF 0.00000000 Waves

{ "type": 13, "id": "7rFw5Y43GBaoF8XMHUmJSjvpMbcj9WDPMi3gvbHn3QKU", "fee": 1400000, "feeAssetId": null, "timestamp": 1647865347883, "version": 2, "chainId": 84, "sender": "3MysQs2skeDQPVBvFzvQu2KzW152VhTVAzw", "senderPublicKey": "8z43ivkzfHdyxo4ABHjGXgDXRdEactrUiBbZJZNZECEG", "proofs": [ "3XyHd9U56ZxzhdCCRDPrH92g12SSSAKDZ4PcJg7SW5KcTpBs1QTAnsNw6qptk1VyvPzVje7CNbUUAW2jmsn4gtJM" ], "script": "base64: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ZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFkbWluUHViS2V5cwAAAAAJAAS5AAAAAgUAAAAMYWRtaW5QdWJLZXlzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXm3ZW0l", "height": 1973691, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 4PDX2Lhcg3pUHs86F4iYtNVGUyvCywUPh4M1iZ3BfJc2 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 keyVerified (assetId) = (("verified_<" + 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(getStringValue(keyAdminPubKeys()), SEP)
71+ if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
72+ then true
73+ else match managerPublicKeyOrUnit() {
74+ case pk: ByteVector =>
75+ if ((i.callerPublicKey == pk))
76+ then true
77+ else throwPD()
78+ case _: Unit =>
79+ if ((i.caller == this))
80+ then true
81+ else throwPD()
82+ case _ =>
83+ throw("Match error")
84+ }
85+ }
86+
87+
88+func isCreated (assetId) = valueOrElse(getBoolean(keyCreated(assetId)), false)
89+
90+
91+@Callable(i)
92+func createOrUpdate (assetId,ticker,logo,verified) = {
93+ let checkCaller = mustAdmin(i)
94+ if ((checkCaller == checkCaller))
95+ then {
96+ let isCreatedNow = !(isCreated(assetId))
97+ if ((isCreatedNow == isCreatedNow))
98+ then $Tuple2([BooleanEntry(keyCreated(assetId), true), StringEntry(keyTicker(assetId), ticker), StringEntry(keyLogo(assetId), logo), BooleanEntry(keyVerified(assetId), verified)], isCreatedNow)
99+ else throw("Strict value is not equal to itself.")
100+ }
101+ else throw("Strict value is not equal to itself.")
102+ }
103+
104+
105+
106+@Callable(i)
107+func setTicker (assetId,ticker) = {
108+ let checks = [mustAdmin(i), if (isCreated(assetId))
109+ then true
110+ else throwNoAsset()]
111+ if ((checks == checks))
112+ then [StringEntry(keyTicker(assetId), ticker)]
113+ else throw("Strict value is not equal to itself.")
114+ }
115+
116+
117+
118+@Callable(i)
119+func setLogo (assetId,logo) = {
120+ let checks = [mustAdmin(i), if (isCreated(assetId))
121+ then true
122+ else throwNoAsset()]
123+ if ((checks == checks))
124+ then [StringEntry(keyLogo(assetId), logo)]
125+ else throw("Strict value is not equal to itself.")
126+ }
127+
128+
129+
130+@Callable(i)
131+func setVerified (assetId,verified) = {
132+ let checks = [mustAdmin(i), if (isCreated(assetId))
133+ then true
134+ else throwNoAsset()]
135+ if ((checks == checks))
136+ then [BooleanEntry(keyVerified(assetId), verified)]
137+ else throw("Strict value is not equal to itself.")
138+ }
139+
140+
141+
142+@Callable(i)
143+func setAdmins (adminPubKeys) = {
144+ let checkCaller = mustManager(i)
145+ if ((checkCaller == checkCaller))
146+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
147+ else throw("Strict value is not equal to itself.")
148+ }
149+
150+
151+
152+@Callable(i)
153+func setManager (pendingManagerPublicKey) = {
154+ let checkCaller = mustManager(i)
155+ if ((checkCaller == checkCaller))
156+ then {
157+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
158+ if ((checkManagerPublicKey == checkManagerPublicKey))
159+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
160+ else throw("Strict value is not equal to itself.")
161+ }
162+ else throw("Strict value is not equal to itself.")
163+ }
164+
165+
166+
167+@Callable(i)
168+func confirmManager () = {
169+ let pm = pendingManagerPublicKeyOrUnit()
170+ let hasPM = if (isDefined(pm))
171+ then true
172+ else throw("No pending manager")
173+ if ((hasPM == hasPM))
174+ then {
175+ let checkPM = if ((i.callerPublicKey == value(pm)))
176+ then true
177+ else throw("You are not pending manager")
178+ if ((checkPM == checkPM))
179+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
180+ else throw("Strict value is not equal to itself.")
181+ }
182+ else throw("Strict value is not equal to itself.")
183+ }
184+
185+
186+@Verifier(tx)
187+func verify () = {
188+ let targetPublicKey = match managerPublicKeyOrUnit() {
189+ case pk: ByteVector =>
190+ pk
191+ case _: Unit =>
192+ tx.senderPublicKey
193+ case _ =>
194+ throw("Match error")
195+ }
196+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
197+ }
198+

github/deemru/w8io/873ac7e 
24.74 ms