tx · 55MhBKrRcaNVSTHKvRYB318Qg8LmwxuT1U6LouVC865g

3N9SP5Mw5rc6j9Fq3iW3ySigHirYMT1SvLw:  -0.01000000 Waves

2022.04.14 18:20 [2008409] smart account 3N9SP5Mw5rc6j9Fq3iW3ySigHirYMT1SvLw > SELF 0.00000000 Waves

{ "type": 13, "id": "55MhBKrRcaNVSTHKvRYB318Qg8LmwxuT1U6LouVC865g", "fee": 1000000, "feeAssetId": null, "timestamp": 1649949711598, "version": 2, "chainId": 84, "sender": "3N9SP5Mw5rc6j9Fq3iW3ySigHirYMT1SvLw", "senderPublicKey": "dcAmVew5M7wMjz1d1kYYCijy7EzxWBzY7K5bFj5ba5f", "proofs": [ "48WcRFiW4hXBakfNznz8dm7VU6eFp28hELYqSL7DYcqBRMWmAaexTpGdfv8GpkEmWp97wYpKKzNQw4kQaBSSVrW4" ], "script": "base64:AAIFAAAAAAAAADYIAhIDCgEIEgQKAgQIEgMKAQQSBwoFCAgICAgSBwoFCAgICAgSBgoECAgICBIDCgEIEgMKAQgAAAAiAAAAAAlvcmFjbGVLZXkCAAAACW9yYWNsZUtleQEAAAAGZ2V0U3RyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWICAAAAAAAAAAAGb3JhY2xlCQEAAAAGZ2V0U3RyAAAAAQUAAAAJb3JhY2xlS2V5AAAAAAlvcmFjbGVGZWUJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQUAAAAGb3JhY2xlAAAAAAZvd25lcnMJAARMAAAAAgkABB0AAAACBQAAAAlvcmFjbGVGZWUCAAAABm93bmVyMQkABEwAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAGb3duZXIyBQAAAANuaWwAAAAADmRhcHBSdW5uaW5nS2V5AgAAABRjb25mX2RhcHBfaXNfcnVubmluZwAAAAARbWFpbnRlbmFuY2VNU0dLZXkCAAAAFGNvbmZfbWFpbnRlbmFuY2VfbXNnAAAAABJ3aGl0ZWxpc3RlZG9ubHlLZXkCAAAAFWNvbmZfd2hpdGVsaXN0ZWRfb25seQAAAAALZGFwcFJ1bm5pbmcJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAAOZGFwcFJ1bm5pbmdLZXkGAAAAAA5tYWludGVuYW5jZU1TRwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAABFtYWludGVuYW5jZU1TR0tleQIAAAAAAAAAAA93aGl0ZWxpc3RlZG9ubHkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAASd2hpdGVsaXN0ZWRvbmx5S2V5BgAAAAAOdXNlclJlZ2lzdGVyZWQCAAAAClJFR0lTVEVSRUQAAAAADHVzZXJWZXJpZmllZAIAAAAIVkVSSUZJRUQAAAAADXVzZXJTdXNwZW5kZWQCAAAACVNVU1BFTkRFRAAAAAALdXNlclJlbW92ZWQCAAAAB1JFTU9WRUQAAAAAEnVzZXJDaGFuZ2VSZXF1aXJlZAIAAAAPQ0hBTkdFX1JFUVVJUkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAACXVzZXJSZXNldAIAAAAFUkVTRVQBAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AgAAAAABAAAAD2dldEJvb2xlYW5CeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQcBAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAALa2V5VXNlckFkZHIAAAABAAAABmNhbGxlcgkAASwAAAACAgAAAAV1c2VyXwUAAAAGY2FsbGVyAQAAAAtrZXlVc2VyTmFtZQAAAAEAAAAGY2FsbGVyCQABLAAAAAICAAAACnVzZXJfbmFtZV8FAAAABmNhbGxlcgEAAAALa2V5VXNlckRlc2MAAAABAAAABmNhbGxlcgkAASwAAAACAgAAAAp1c2VyX2Rlc2NfBQAAAAZjYWxsZXIBAAAADWtleVVzZXJTb2NpYWwAAAABAAAABmNhbGxlcgkAASwAAAACAgAAAAx1c2VyX3NvY2lhbF8FAAAABmNhbGxlcgEAAAAMa2V5VXNlclRodW1iAAAAAQAAAAZjYWxsZXIJAAEsAAAAAgIAAAALdXNlcl90aHVtYl8FAAAABmNhbGxlcgEAAAANa2V5VXNlckJhbm5lcgAAAAEAAAAGY2FsbGVyCQABLAAAAAICAAAADHVzZXJfYmFubmVyXwUAAAAGY2FsbGVyAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQAAAAZjYWxsZXIJAAEsAAAAAgIAAAAMdXNlcl9zdGF0dXNfBQAAAAZjYWxsZXIBAAAAC2tleVVzZXJEYXRlAAAAAQAAAAZjYWxsZXIJAAEsAAAAAgIAAAAKdXNlcl9kYXRlXwUAAAAGY2FsbGVyAQAAAAt2YWxpZGF0ZUNJRAAA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AAADbmlsAAAABmludm9rZQEAAAAQY2hhbmdlVXNlclN0YXR1cwAAAAQAAAAHYWRkcmVzcwAAAAZzdGF0dXMAAAAEbm90ZQAAAAhjYXRlZ29yeQQAAAAGY2FsbGVyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAZpbnZva2UAAAAPY2FsbGVyUHVibGljS2V5BAAAAAJpZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAABGFkZHIJAAQmAAAAAQUAAAAHYWRkcmVzcwQAAAAHJG1hdGNoMAUAAAAEYWRkcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQWRkcmVzcwQAAAAEYWRkcgUAAAAHJG1hdGNoMAQAAAANY3VycmVudFN0YXR1cwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAAdhZGRyZXNzBAAAAAtzdGF0dXNUb1NldAkBAAAAEXZhbGlkYXRlTmV3U3RhdHVzAAAAAwUAAAAGc3RhdHVzBQAAAAdhZGRyZXNzBQAAAA1jdXJyZW50U3RhdHVzBAAAAARuYW1lCQACWgAAAAEJAAGbAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAC2tleVVzZXJOYW1lAAAAAQUAAAAHYWRkcmVzcwQAAAAFdGh1bWIJAAJaAAAAAQkAAZsAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMa2V5VXNlclRodW1iAAAAAQUAAAAHYWRkcmVzcwQAAAAEZGF0ZQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAtrZXlVc2VyRGF0ZQAAAAEFAAAAB2FkZHJlc3MEAAAABGpzb24JAQAAAAhtYWtlSlNPTgAAAAMFAAAABG5hbWUFAAAABXRodW1iCQABpAAAAAEFAAAABGRhdGUDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABE0AAAACBQAAAAZvd25lcnMJAAQlAAAAAQUAAAAEdGhpcwUAAAAGY2FsbGVyBAAAAAxjYXRlZ29yeURhdGEDCQAAAAAAAAIFAAAAC3N0YXR1c1RvU2V0BQAAAAx1c2VyVmVyaWZpZWQJ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", "height": 2008409, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let oracleKey = "oracleKey"
5+
6+func getStr (key) = match getString(this, key) {
7+ case b: String =>
8+ b
9+ case _ =>
10+ ""
11+}
12+
13+
14+let oracle = getStr(oracleKey)
15+
16+let oracleFee = value(addressFromString(oracle))
17+
18+let owners = [getString(oracleFee, "owner1"), getString(oracleFee, "owner2")]
19+
20+let dappRunningKey = "conf_dapp_is_running"
21+
22+let maintenanceMSGKey = "conf_maintenance_msg"
23+
24+let whitelistedonlyKey = "conf_whitelisted_only"
25+
26+let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
27+
28+let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
29+
30+let whitelistedonly = valueOrElse(getBoolean(this, whitelistedonlyKey), true)
31+
32+let userRegistered = "REGISTERED"
33+
34+let userVerified = "VERIFIED"
35+
36+let userSuspended = "SUSPENDED"
37+
38+let userRemoved = "REMOVED"
39+
40+let userChangeRequired = "CHANGE_REQUIRED"
41+
42+let userUnregistered = "UNREGISTERED"
43+
44+let userReset = "RESET"
45+
46+func getStringByKey (key) = valueOrElse(getString(this, key), "")
47+
48+
49+func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
50+
51+
52+func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
53+
54+
55+func keyUserAddr (caller) = ("user_" + caller)
56+
57+
58+func keyUserName (caller) = ("user_name_" + caller)
59+
60+
61+func keyUserDesc (caller) = ("user_desc_" + caller)
62+
63+
64+func keyUserSocial (caller) = ("user_social_" + caller)
65+
66+
67+func keyUserThumb (caller) = ("user_thumb_" + caller)
68+
69+
70+func keyUserBanner (caller) = ("user_banner_" + caller)
71+
72+
73+func keyUserStatus (caller) = ("user_status_" + caller)
74+
75+
76+func keyUserDate (caller) = ("user_date_" + caller)
77+
78+
79+func validateCID (cid) = if (contains(cid, "/"))
80+ then if (if ((63 > size(cid)))
81+ then (size(split(cid, "/")[0]) == 46)
82+ else false)
83+ then (16 > size(split(cid, "/")[1]))
84+ else false
85+ else false
86+
87+
88+func validateBanner (cid) = if ((size(cid) == 0))
89+ then true
90+ else if ((size(cid) == 46))
91+ then true
92+ else false
93+
94+
95+func validUserData (caller,name,description,thumb,isAnUpdate) = {
96+ let validCID = if ((size(thumb) != 0))
97+ then validateCID(thumb)
98+ else true
99+ if (!(validCID))
100+ then throw("CID don't match requirement!")
101+ else if (if ((name == ""))
102+ then true
103+ else (description == ""))
104+ then throw("Name and description cannot be empty")
105+ else if ((size(description) > 600))
106+ then throw("600 Char. max description")
107+ else if ((size(name) > 45))
108+ then throw("45 Char. max name")
109+ else {
110+ let status = getStringByKey(keyUserStatus(caller))
111+ if (if ((status == userSuspended))
112+ then true
113+ else (status == userRemoved))
114+ then throw("Account suspended/ removed.")
115+ else if (if (!(isAnUpdate))
116+ then (status == userRegistered)
117+ else false)
118+ then throw("Already registered")
119+ else if (if (isAnUpdate)
120+ then (status == "")
121+ else false)
122+ then throw("Register first")
123+ else true
124+ }
125+ }
126+
127+
128+func validateNewStatus (status,address,currentStatus) = {
129+ let allStatus = [userVerified, userRegistered, userSuspended, userRemoved, userChangeRequired]
130+ let statusToSet = if (containsElement(allStatus, status))
131+ then status
132+ else if ((status == userReset))
133+ then ""
134+ else throw("Unknown status")
135+ let userIsRegistered = getIntegerByKey(keyUserDate(address))
136+ if ((userIsRegistered == 0))
137+ then throw("You cant set this status, user is not registered.")
138+ else statusToSet
139+ }
140+
141+
142+func makeJSON (name,thumb,date) = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + date) + "\"}")
143+
144+
145+@Callable(i)
146+func initDapp (dappKey) = if ((i.caller != this))
147+ then throw("You cannot do this action")
148+ else if ((oracle != ""))
149+ then throw("oracle already set, you can't override!")
150+ else [StringEntry(oracleKey, dappKey)]
151+
152+
153+
154+@Callable(invoke)
155+func appRunning (isLive,message) = {
156+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
157+ let id = toBase58String(invoke.transactionId)
158+ if (containsElement((owners :+ toString(this)), caller))
159+ then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
160+ else throw("You are not allowed to change this")
161+ }
162+
163+
164+
165+@Callable(invoke)
166+func registrationMode (WLonly) = {
167+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
168+ let id = toBase58String(invoke.transactionId)
169+ if (containsElement((owners :+ toString(this)), caller))
170+ then [BooleanEntry(whitelistedonlyKey, WLonly)]
171+ else throw("You are not allowed to change this")
172+ }
173+
174+
175+
176+@Callable(invoke)
177+func registerUser (name,description,thumb,social,banner) = if (!(dappRunning))
178+ then throw(maintenanceMSG)
179+ else {
180+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
181+ let id = toBase58String(invoke.transactionId)
182+ let timestamp = lastBlock.timestamp
183+ if (!(validateBanner(banner)))
184+ then throw("Invalid banner image!")
185+ else if (!(validUserData(caller, name, description, thumb, false)))
186+ then throw("Something went wrong")
187+ else {
188+ let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(timestamp))
189+[IntegerEntry(keyUserDate(caller), timestamp), StringEntry(keyUserAddr(caller), ((id + "_") + toString(timestamp))), StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb), StringEntry(keyUserBanner(caller), banner), StringEntry(keyUserStatus(caller), userRegistered), StringEntry(((userRegistered + "_") + caller), json)]
190+ }
191+ }
192+
193+
194+
195+@Callable(invoke)
196+func updateUser (name,description,thumb,social,banner) = if (!(dappRunning))
197+ then throw(maintenanceMSG)
198+ else {
199+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
200+ let id = toBase58String(invoke.transactionId)
201+ let status = getStringByKey(keyUserStatus(caller))
202+ if (!(validateBanner(banner)))
203+ then throw("Invalid banner image!")
204+ else if (!(validUserData(caller, name, description, thumb, true)))
205+ then throw("Something went wrong")
206+ else {
207+ let date = getIntegerByKey(keyUserDate(caller))
208+ let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(date))
209+[StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserBanner(caller), banner), StringEntry(keyUserThumb(caller), thumb), StringEntry(((status + "_") + caller), json)]
210+ }
211+ }
212+
213+
214+
215+@Callable(invoke)
216+func changeUserStatus (address,status,note,category) = {
217+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
218+ let id = toBase58String(invoke.transactionId)
219+ let addr = addressFromString(address)
220+ match addr {
221+ case addr: Address =>
222+ let currentStatus = getStringByKey(keyUserStatus(address))
223+ let statusToSet = validateNewStatus(status, address, currentStatus)
224+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
225+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
226+ let date = getIntegerByKey(keyUserDate(address))
227+ let json = makeJSON(name, thumb, toString(date))
228+ if (containsElement((owners :+ toString(this)), caller))
229+ then {
230+ let categoryData = if ((statusToSet == userVerified))
231+ then [StringEntry(("category_" + address), category)]
232+ else [DeleteEntry(("category_" + address))]
233+ (categoryData ++ [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(("user_note_" + address), note)])
234+ }
235+ else throw("Not allowed to change user status")
236+ case _ =>
237+ throw("Seems to be an invalid address!")
238+ }
239+ }
240+
241+
242+
243+@Callable(invoke)
244+func deleteUser (address) = {
245+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
246+ let id = toBase58String(invoke.transactionId)
247+ let currentStatus = getStringByKey(keyUserStatus(address))
248+ if (containsElement((owners :+ toString(this)), caller))
249+ then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), DeleteEntry(((currentStatus + "_") + address)), DeleteEntry(("category_" + address)), StringEntry(keyUserStatus(address), userRemoved)]
250+ else throw("Not allowed")
251+ }
252+
253+
254+
255+@Callable(i)
256+func deleteEntry (entry) = {
257+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
258+ if (containsElement(owners, caller))
259+ then [DeleteEntry(entry)]
260+ else throw("no")
261+ }
262+
263+

github/deemru/w8io/169f3d6 
26.34 ms