tx · Duws2ua2zxZzaKc5Aet1mhCSrWupwJLRTxjsX887rp1

3Mx9KU2qWAgHfp1h3iyVsdiHiz3uuZFbBUG:  -0.01400000 Waves

2020.12.30 07:49 [1330973] smart account 3Mx9KU2qWAgHfp1h3iyVsdiHiz3uuZFbBUG > SELF 0.00000000 Waves

{ "type": 13, "id": "Duws2ua2zxZzaKc5Aet1mhCSrWupwJLRTxjsX887rp1", "fee": 1400000, "feeAssetId": null, "timestamp": 1609303779010, "version": 2, "chainId": 84, "sender": "3Mx9KU2qWAgHfp1h3iyVsdiHiz3uuZFbBUG", "senderPublicKey": "x1aRSsyD7D2CQzJbQGVnX4LjWQ2qX7B9QwBw4gz7FXU", "proofs": [ "54WywvN4ek3JBe72GbP32na8eBoBNpgPcpQMHspNSxLTqUfxdeuNGwwKktuL66iCthiH7txfcKLy4d2j6YrcvmBy" ], "script": "base64:AAIEAAAAAAAAACgIAhIECgIECBIDCgEEEgYKBAgICAgSBgoECAgICBIECgIICBIDCgEIAAAAHAAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAA5kYXBwUnVubmluZ0tleQIAAAAUY29uZl9kYXBwX2lzX3J1bm5pbmcAAAAAEW1haW50ZW5hbmNlTVNHS2V5AgAAABRjb25mX21haW50ZW5hbmNlX21zZwAAAAASd2hpdGVsaXN0ZWRvbmx5S2V5AgAAABVjb25mX3doaXRlbGlzdGVkX29ubHkAAAAAC2RhcHBSdW5uaW5nBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAADmRhcHBSdW5uaW5nS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBgAAAAAObWFpbnRlbmFuY2VNU0cEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAARbWFpbnRlbmFuY2VNU0dLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAAAAAA93aGl0ZWxpc3RlZG9ubHkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAASd2hpdGVsaXN0ZWRvbmx5S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBgAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQAAAAADnVzZXJSZWdpc3RlcmVkAgAAAApSRUdJU1RFUkVEAAAAAAx1c2VyVmVyaWZpZWQCAAAACFZFUklGSUVEAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABJ1c2VyQ2hhbmdlUmVx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ZAQAAAANY3VycmVudFN0YXR1cwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAAdhZGRyZXNzBAAAAAtzdGF0dXNUb1NldAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAx1c2VyVmVyaWZpZWQFAAAADHVzZXJWZXJpZmllZAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAA51c2VyUmVnaXN0ZXJlZAUAAAAOdXNlclJlZ2lzdGVyZWQDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAANdXNlclN1c3BlbmRlZAUAAAANdXNlclN1c3BlbmRlZAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAt1c2VyUmVtb3ZlZAUAAAALdXNlclJlbW92ZWQDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQFAAAAC3VzZXJBbGxvd2VkAwkAAAAAAAACBQAAAAZzdGF0dXMFAAAAEnVzZXJDaGFuZ2VSZXF1aXJlZAUAAAASdXNlckNoYW5nZVJlcXVpcmVkAwMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAl1c2VyUmVzZXQJAAAAAAAAAgUAAAANY3VycmVudFN0YXR1cwUAAAALdXNlckFsbG93ZWQHAgAAAAAJAAACAAAAAQIAAAAOVW5rbm93biBzdGF0dXMEAAAAEHVzZXJJc1JlZ2lzdGVyZWQJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAALa2V5VXNlckRhdGUAAAABBQAAAAdhZGRyZXNzAwMJAAAAAAAAAgUAAAAQdXNlcklzUmVnaXN0ZXJlZAAAAAAAAAAAAAkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAt1c2VyQWxsb3dlZAcJAAACAAAAAQIAAAAxWW91IGNhbnQgc2V0IHRoaXMgc3RhdHVzLCB1c2VyIGlzIG5vdCByZWdpc3RlcmVkLgMDCQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAAC3VzZXJBbGxvd2VkCQAAAAAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQHCQAAAgAAAAECAAAAFFVzZXIgYWxyZWFkeSBhbGxvd2VkAwMJAAAAAAAAAgUAAAANY3VycmVudFN0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", "height": 1330973, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GxEkRJaegkHtUsFyxrFXFaEm4TWjqN3Ghw1e57rwGAzP Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
5+
6+let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
7+
8+let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
9+
10+let dappRunningKey = "conf_dapp_is_running"
11+
12+let maintenanceMSGKey = "conf_maintenance_msg"
13+
14+let whitelistedonlyKey = "conf_whitelisted_only"
15+
16+let dappRunning = match getBoolean(this, dappRunningKey) {
17+ case a: Boolean =>
18+ a
19+ case _ =>
20+ true
21+}
22+
23+let maintenanceMSG = match getString(this, maintenanceMSGKey) {
24+ case a: String =>
25+ a
26+ case _ =>
27+ ""
28+}
29+
30+let whitelistedonly = match getBoolean(this, whitelistedonlyKey) {
31+ case a: Boolean =>
32+ a
33+ case _ =>
34+ true
35+}
36+
37+let userAllowed = "ALLOWED"
38+
39+let userRegistered = "REGISTERED"
40+
41+let userVerified = "VERIFIED"
42+
43+let userSuspended = "SUSPENDED"
44+
45+let userRemoved = "REMOVED"
46+
47+let userChangeRequired = "CHANGE_REQUIRED"
48+
49+let userUnregistered = "UNREGISTERED"
50+
51+let userReset = "RESET"
52+
453 func getStringByKey (key) = match getString(this, key) {
554 case a: String =>
655 a
2574 }
2675
2776
77+func validateCID (cid) = if (if ((75 > size(cid)))
78+ then (60 > size(split(cid, "/")[0]))
79+ else false)
80+ then (16 > size(split(cid, "/")[1]))
81+ else false
82+
83+
2884 func keyUserAddr (caller) = ("user_" + caller)
2985
3086
47103
48104
49105 @Callable(i)
50-func registerUser (name,description,thumb,social,status) = {
106+func appRunning (isLive,message) = {
51107 let caller = toString(addressFromPublicKey(i.callerPublicKey))
52- let canRegister = getStringByKey(keyUserStatus(caller))
53108 let id = toBase58String(i.transactionId)
54- let timestamp = lastBlock.timestamp
55- if (if ((name == ""))
56- then true
57- else (description == ""))
58- then throw("Name and description cannot be empty")
59- else if ((size(description) > 600))
60- then throw("600 Char. max description")
61- else if ((size(name) > 45))
62- then throw("45 Char. max name")
63- else {
64- let json = (((((("{\"user_name\": \"" + toBase64String(toBytes(name))) + "\", \"user_thumb\":\"") + toBase64String(toBytes(thumb))) + "\",\"user_date\":\"") + toString(timestamp)) + "\"}")
65-[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(keyUserStatus(caller), status), DeleteEntry(("ALLOWED_" + caller)), StringEntry(((status + "_") + caller), json)]
66- }
109+ if (containsElement([chris, joep, toString(this)], caller))
110+ then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
111+ else throw("You are not allowed to change this")
112+ }
113+
114+
115+
116+@Callable(i)
117+func registrationMode (WLonly) = {
118+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
119+ let id = toBase58String(i.transactionId)
120+ if (containsElement([chris, joep, toString(this)], caller))
121+ then [BooleanEntry(whitelistedonlyKey, WLonly)]
122+ else throw("You are not allowed to change this")
123+ }
124+
125+
126+
127+@Callable(i)
128+func registerUser (name,description,thumb,social) = if (!(dappRunning))
129+ then throw(maintenanceMSG)
130+ else {
131+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
132+ let canRegister = getStringByKey(keyUserStatus(caller))
133+ let id = toBase58String(i.transactionId)
134+ let timestamp = lastBlock.timestamp
135+ if (if ((canRegister == userSuspended))
136+ then true
137+ else (canRegister == userRemoved))
138+ then throw("Account suspended/ removed.")
139+ else if ((canRegister == userRegistered))
140+ then throw("Already registered")
141+ else if (if ((canRegister == ""))
142+ then whitelistedonly
143+ else false)
144+ then throw("Can't register, get approved first.")
145+ else if (if ((name == ""))
146+ then true
147+ else (description == ""))
148+ then throw("Name and description cannot be empty")
149+ else if ((size(description) > 600))
150+ then throw("600 Char. max description")
151+ else if ((size(name) > 45))
152+ then throw("45 Char. max name")
153+ else {
154+ let json = (((((("{\"user_name\": \"" + toBase64String(toBytes(name))) + "\", \"user_thumb\":\"") + toBase64String(toBytes(thumb))) + "\",\"user_date\":\"") + toString(timestamp)) + "\"}")
155+[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(keyUserStatus(caller), userRegistered), DeleteEntry(("ALLOWED_" + caller)), StringEntry(((userRegistered + "_") + caller), json)]
156+ }
157+ }
158+
159+
160+
161+@Callable(i)
162+func updateUser (name,description,thumb,social) = if (!(dappRunning))
163+ then throw(maintenanceMSG)
164+ else {
165+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
166+ let id = toBase58String(i.transactionId)
167+ let canUpdate = getStringByKey(keyUserStatus(caller))
168+ if (if ((canUpdate == userSuspended))
169+ then true
170+ else (canUpdate == userRemoved))
171+ then throw("Account suspended/ removed.")
172+ else if (if ((canUpdate == ""))
173+ then true
174+ else (canUpdate == userAllowed))
175+ then throw("Register first")
176+ else if (if ((name == ""))
177+ then true
178+ else (description == ""))
179+ then throw("Name & description cannot be empty")
180+ else if ((size(description) > 600))
181+ then throw("600 Char. max for description")
182+ else if ((size(name) > 45))
183+ then throw("45 Char. max name")
184+ else {
185+ let date = getIntegerByKey(keyUserDate(caller))
186+ let json = (((((("{\"user_name\": \"" + toBase64String(toBytes(name))) + "\", \"user_thumb\":\"") + toBase64String(toBytes(thumb))) + "\",\"user_date\":\"") + toString(date)) + "\"}")
187+[StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb), StringEntry(((canUpdate + "_") + caller), json)]
188+ }
189+ }
190+
191+
192+
193+@Callable(i)
194+func changeUserStatus (address,status) = if (!(dappRunning))
195+ then throw(maintenanceMSG)
196+ else {
197+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
198+ let id = toBase58String(i.transactionId)
199+ let currentStatus = getStringByKey(keyUserStatus(address))
200+ let statusToSet = if ((status == userVerified))
201+ then userVerified
202+ else if ((status == userRegistered))
203+ then userRegistered
204+ else if ((status == userSuspended))
205+ then userSuspended
206+ else if ((status == userRemoved))
207+ then userRemoved
208+ else if ((status == userAllowed))
209+ then userAllowed
210+ else if ((status == userChangeRequired))
211+ then userChangeRequired
212+ else if (if ((status == userReset))
213+ then (currentStatus == userAllowed)
214+ else false)
215+ then ""
216+ else throw("Unknown status")
217+ let userIsRegistered = getIntegerByKey(keyUserDate(address))
218+ if (if ((userIsRegistered == 0))
219+ then (status != userAllowed)
220+ else false)
221+ then throw("You cant set this status, user is not registered.")
222+ else if (if ((currentStatus == userAllowed))
223+ then (status == userAllowed)
224+ else false)
225+ then throw("User already allowed")
226+ else if (if ((currentStatus == userRegistered))
227+ then (status == userAllowed)
228+ else false)
229+ then throw("User already allowed & registered")
230+ else if (if ((currentStatus == userVerified))
231+ then (status == userAllowed)
232+ else false)
233+ then throw("User already allowed & verified")
234+ else {
235+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
236+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
237+ let date = getIntegerByKey(keyUserDate(address))
238+ let json = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + toString(date)) + "\"}")
239+ if (containsElement([chris, joep, toString(this)], caller))
240+ then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json)]
241+ else throw("Not allowed to change user status")
242+ }
243+ }
244+
245+
246+
247+@Callable(i)
248+func deleteUser (address) = {
249+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
250+ let id = toBase58String(i.transactionId)
251+ let currentStatus = getStringByKey(keyUserStatus(address))
252+ if (containsElement([chris, toString(this)], caller))
253+ then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), DeleteEntry(((currentStatus + "_") + address)), StringEntry(keyUserStatus(address), userRemoved)]
254+ else throw("Not allowed")
67255 }
68256
69257
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
5+
6+let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
7+
8+let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
9+
10+let dappRunningKey = "conf_dapp_is_running"
11+
12+let maintenanceMSGKey = "conf_maintenance_msg"
13+
14+let whitelistedonlyKey = "conf_whitelisted_only"
15+
16+let dappRunning = match getBoolean(this, dappRunningKey) {
17+ case a: Boolean =>
18+ a
19+ case _ =>
20+ true
21+}
22+
23+let maintenanceMSG = match getString(this, maintenanceMSGKey) {
24+ case a: String =>
25+ a
26+ case _ =>
27+ ""
28+}
29+
30+let whitelistedonly = match getBoolean(this, whitelistedonlyKey) {
31+ case a: Boolean =>
32+ a
33+ case _ =>
34+ true
35+}
36+
37+let userAllowed = "ALLOWED"
38+
39+let userRegistered = "REGISTERED"
40+
41+let userVerified = "VERIFIED"
42+
43+let userSuspended = "SUSPENDED"
44+
45+let userRemoved = "REMOVED"
46+
47+let userChangeRequired = "CHANGE_REQUIRED"
48+
49+let userUnregistered = "UNREGISTERED"
50+
51+let userReset = "RESET"
52+
453 func getStringByKey (key) = match getString(this, key) {
554 case a: String =>
655 a
756 case _ =>
857 ""
958 }
1059
1160
1261 func getBooleanByKey (key) = match getBoolean(this, key) {
1362 case a: Boolean =>
1463 a
1564 case _ =>
1665 false
1766 }
1867
1968
2069 func getIntegerByKey (key) = match getInteger(this, key) {
2170 case i: Int =>
2271 i
2372 case _ =>
2473 0
2574 }
2675
2776
77+func validateCID (cid) = if (if ((75 > size(cid)))
78+ then (60 > size(split(cid, "/")[0]))
79+ else false)
80+ then (16 > size(split(cid, "/")[1]))
81+ else false
82+
83+
2884 func keyUserAddr (caller) = ("user_" + caller)
2985
3086
3187 func keyUserName (caller) = ("user_name_" + caller)
3288
3389
3490 func keyUserDesc (caller) = ("user_desc_" + caller)
3591
3692
3793 func keyUserSocial (caller) = ("user_social_" + caller)
3894
3995
4096 func keyUserThumb (caller) = ("user_thumb_" + caller)
4197
4298
4399 func keyUserStatus (caller) = ("user_status_" + caller)
44100
45101
46102 func keyUserDate (caller) = ("user_date_" + caller)
47103
48104
49105 @Callable(i)
50-func registerUser (name,description,thumb,social,status) = {
106+func appRunning (isLive,message) = {
51107 let caller = toString(addressFromPublicKey(i.callerPublicKey))
52- let canRegister = getStringByKey(keyUserStatus(caller))
53108 let id = toBase58String(i.transactionId)
54- let timestamp = lastBlock.timestamp
55- if (if ((name == ""))
56- then true
57- else (description == ""))
58- then throw("Name and description cannot be empty")
59- else if ((size(description) > 600))
60- then throw("600 Char. max description")
61- else if ((size(name) > 45))
62- then throw("45 Char. max name")
63- else {
64- let json = (((((("{\"user_name\": \"" + toBase64String(toBytes(name))) + "\", \"user_thumb\":\"") + toBase64String(toBytes(thumb))) + "\",\"user_date\":\"") + toString(timestamp)) + "\"}")
65-[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(keyUserStatus(caller), status), DeleteEntry(("ALLOWED_" + caller)), StringEntry(((status + "_") + caller), json)]
66- }
109+ if (containsElement([chris, joep, toString(this)], caller))
110+ then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
111+ else throw("You are not allowed to change this")
112+ }
113+
114+
115+
116+@Callable(i)
117+func registrationMode (WLonly) = {
118+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
119+ let id = toBase58String(i.transactionId)
120+ if (containsElement([chris, joep, toString(this)], caller))
121+ then [BooleanEntry(whitelistedonlyKey, WLonly)]
122+ else throw("You are not allowed to change this")
123+ }
124+
125+
126+
127+@Callable(i)
128+func registerUser (name,description,thumb,social) = if (!(dappRunning))
129+ then throw(maintenanceMSG)
130+ else {
131+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
132+ let canRegister = getStringByKey(keyUserStatus(caller))
133+ let id = toBase58String(i.transactionId)
134+ let timestamp = lastBlock.timestamp
135+ if (if ((canRegister == userSuspended))
136+ then true
137+ else (canRegister == userRemoved))
138+ then throw("Account suspended/ removed.")
139+ else if ((canRegister == userRegistered))
140+ then throw("Already registered")
141+ else if (if ((canRegister == ""))
142+ then whitelistedonly
143+ else false)
144+ then throw("Can't register, get approved first.")
145+ else if (if ((name == ""))
146+ then true
147+ else (description == ""))
148+ then throw("Name and description cannot be empty")
149+ else if ((size(description) > 600))
150+ then throw("600 Char. max description")
151+ else if ((size(name) > 45))
152+ then throw("45 Char. max name")
153+ else {
154+ let json = (((((("{\"user_name\": \"" + toBase64String(toBytes(name))) + "\", \"user_thumb\":\"") + toBase64String(toBytes(thumb))) + "\",\"user_date\":\"") + toString(timestamp)) + "\"}")
155+[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(keyUserStatus(caller), userRegistered), DeleteEntry(("ALLOWED_" + caller)), StringEntry(((userRegistered + "_") + caller), json)]
156+ }
157+ }
158+
159+
160+
161+@Callable(i)
162+func updateUser (name,description,thumb,social) = if (!(dappRunning))
163+ then throw(maintenanceMSG)
164+ else {
165+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
166+ let id = toBase58String(i.transactionId)
167+ let canUpdate = getStringByKey(keyUserStatus(caller))
168+ if (if ((canUpdate == userSuspended))
169+ then true
170+ else (canUpdate == userRemoved))
171+ then throw("Account suspended/ removed.")
172+ else if (if ((canUpdate == ""))
173+ then true
174+ else (canUpdate == userAllowed))
175+ then throw("Register first")
176+ else if (if ((name == ""))
177+ then true
178+ else (description == ""))
179+ then throw("Name & description cannot be empty")
180+ else if ((size(description) > 600))
181+ then throw("600 Char. max for description")
182+ else if ((size(name) > 45))
183+ then throw("45 Char. max name")
184+ else {
185+ let date = getIntegerByKey(keyUserDate(caller))
186+ let json = (((((("{\"user_name\": \"" + toBase64String(toBytes(name))) + "\", \"user_thumb\":\"") + toBase64String(toBytes(thumb))) + "\",\"user_date\":\"") + toString(date)) + "\"}")
187+[StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb), StringEntry(((canUpdate + "_") + caller), json)]
188+ }
189+ }
190+
191+
192+
193+@Callable(i)
194+func changeUserStatus (address,status) = if (!(dappRunning))
195+ then throw(maintenanceMSG)
196+ else {
197+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
198+ let id = toBase58String(i.transactionId)
199+ let currentStatus = getStringByKey(keyUserStatus(address))
200+ let statusToSet = if ((status == userVerified))
201+ then userVerified
202+ else if ((status == userRegistered))
203+ then userRegistered
204+ else if ((status == userSuspended))
205+ then userSuspended
206+ else if ((status == userRemoved))
207+ then userRemoved
208+ else if ((status == userAllowed))
209+ then userAllowed
210+ else if ((status == userChangeRequired))
211+ then userChangeRequired
212+ else if (if ((status == userReset))
213+ then (currentStatus == userAllowed)
214+ else false)
215+ then ""
216+ else throw("Unknown status")
217+ let userIsRegistered = getIntegerByKey(keyUserDate(address))
218+ if (if ((userIsRegistered == 0))
219+ then (status != userAllowed)
220+ else false)
221+ then throw("You cant set this status, user is not registered.")
222+ else if (if ((currentStatus == userAllowed))
223+ then (status == userAllowed)
224+ else false)
225+ then throw("User already allowed")
226+ else if (if ((currentStatus == userRegistered))
227+ then (status == userAllowed)
228+ else false)
229+ then throw("User already allowed & registered")
230+ else if (if ((currentStatus == userVerified))
231+ then (status == userAllowed)
232+ else false)
233+ then throw("User already allowed & verified")
234+ else {
235+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
236+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
237+ let date = getIntegerByKey(keyUserDate(address))
238+ let json = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + toString(date)) + "\"}")
239+ if (containsElement([chris, joep, toString(this)], caller))
240+ then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json)]
241+ else throw("Not allowed to change user status")
242+ }
243+ }
244+
245+
246+
247+@Callable(i)
248+func deleteUser (address) = {
249+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
250+ let id = toBase58String(i.transactionId)
251+ let currentStatus = getStringByKey(keyUserStatus(address))
252+ if (containsElement([chris, toString(this)], caller))
253+ then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), DeleteEntry(((currentStatus + "_") + address)), StringEntry(keyUserStatus(address), userRemoved)]
254+ else throw("Not allowed")
67255 }
68256
69257

github/deemru/w8io/3ef1775 
55.08 ms