tx · J3yCdkJNnr3AKbBsHUhLsswYanALPk7FLZ1zZRZWWLiG

3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj:  -0.01400000 Waves

2020.12.22 11:33 [1319675] smart account 3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj > SELF 0.00000000 Waves

{ "type": 13, "id": "J3yCdkJNnr3AKbBsHUhLsswYanALPk7FLZ1zZRZWWLiG", "fee": 1400000, "feeAssetId": null, "timestamp": 1608626044077, "version": 2, "chainId": 84, "sender": "3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj", "senderPublicKey": "A2m227AHcq7gWfSU59Q3UJaqkEa7SccFYmJuWHbFrrKE", "proofs": [ "2PzgTXi1GP4s7YXdeEZ7zjpx6Rq9CAnvpEZvH3ZvzdiRCpFTqAFTpcUwukv2irSY7rNr3NG1usikBrpzfQbfnzRn" ], "script": "base64:AAIEAAAAAAAAACgIAhIECgIECBIDCgEEEgYKBAgICAgSBgoECAgICBIECgIICBIDCgEIAAAAHAAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAA5kYXBwUnVubmluZ0tleQIAAAAUY29uZl9kYXBwX2lzX3J1bm5pbmcAAAAAEW1haW50ZW5hbmNlTVNHS2V5AgAAABRjb25mX21haW50ZW5hbmNlX21zZwAAAAASd2hpdGVsaXN0ZWRvbmx5S2V5AgAAABVjb25mX3doaXRlbGlzdGVkX29ubHkAAAAAC2RhcHBSdW5uaW5nBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAADmRhcHBSdW5uaW5nS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBgAAAAAObWFpbnRlbmFuY2VNU0cEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAARbWFpbnRlbmFuY2VNU0dLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAAAAAA93aGl0ZWxpc3RlZG9ubHkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAASd2hpdGVsaXN0ZWRvbmx5S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBgAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQAAAAADnVzZXJSZWdpc3RlcmVkAgAAAApSRUdJU1RFUkVEAAAAAAx1c2VyVmVyaWZpZWQCAAAACFZFUklGSUVEAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABJ1c2VyQ2hhbmdlUmVx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dXMFAAAAC3VzZXJBbGxvd2VkBQAAAAt1c2VyQWxsb3dlZAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAABJ1c2VyQ2hhbmdlUmVxdWlyZWQFAAAAEnVzZXJDaGFuZ2VSZXF1aXJlZAMDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAJdXNlclJlc2V0CQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwIAAAAACQAAAgAAAAECAAAADlVua25vd24gc3RhdHVzBAAAABB1c2VySXNSZWdpc3RlcmVkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAAC2tleVVzZXJEYXRlAAAAAQUAAAAHYWRkcmVzcwMDCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQAAAAAAAAAAAAJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQHCQAAAgAAAAECAAAAMVlvdSBjYW50IHNldCB0aGlzIHN0YXR1cywgdXNlciBpcyBub3QgcmVnaXN0ZXJlZC4DAwkAAAAAAAACBQAAAA1jdXJyZW50U3RhdHVzBQAAAAt1c2VyQWxsb3dlZAkAAAAAAAACBQAAAAZzdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwkAAAIAAAABAgAAABRVc2VyIGFscmVhZHkgYWxsb3dlZAMDCQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAADnVzZXJSZWdpc3RlcmVkCQAAAAAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQHCQAAAgAAAAECAAAAIVVzZXIgYWxyZWFkeSBhbGxvd2VkICYgcmVnaXN0ZXJlZAMDCQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAADHVzZXJWZXJpZmllZAkAAAAAAAACBQAAAAZzdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwkAAAIAAAABAgAAAB9Vc2VyIGFscmVhZHkgYWxsb3dlZCAmIHZlcmlmaWVkBAAAAARuYW1lCQACWgAAAAEJAAGbAAAAAQkBAAAAC2tleVVzZXJOYW1lAAAAAQUAAAAHYWRkcmVzcwQAAAAFdGh1bWIJAAJaAAAAAQkAAZsAAAABCQEAAAAMa2V5VXNlclRodW1iAAAAAQUAAAAHYWRkcmVzcwQAAAAEZGF0ZQkBAAAAC2tleVVzZXJEYXRlAAAAAQUAAAAHYWRkcmVzcwQAAAAEanNvbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADXsiYWRkcmVzcyI6ICIFAAAAB2FkZHJlc3MCAAAADCIsICJuYW1lIjogIgUAAAAEbmFtZQIAAAAMIiwgInRodW1iIjoiBQAAAAV0aHVtYgIAAAAKIiwiZGF0ZSI6IgUAAAAEZGF0ZQIAAAACIn0DCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAVjaHJpcwkABEwAAAACBQAAAARqb2VwCQAETAAAAAIJAAQlAAAAAQUAAAAEdGhpcwUAAAADbmlsBQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAAdhZGRyZXNzBQAAAAtzdGF0dXNUb1NldAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgUAAAANY3VycmVudFN0YXR1cwIAAAABXwUAAAAHYWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALc3RhdHVzVG9TZXQCAAAAAV8FAAAAB2FkZHJlc3MFAAAABG5hbWUFAAAAA25pbAkAAAIAAAABAgAAACFOb3QgYWxsb3dlZCB0byBjaGFuZ2UgdXNlciBzdGF0dXMAAAABaQEAAAAKZGVsZXRlVXNlcgAAAAEAAAAHYWRkcmVzcwQAAAAGY2FsbGVyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAANY3VycmVudFN0YXR1cwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAAdhZGRyZXNzAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAFY2hyaXMJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzBQAAAANuaWwFAAAABmNhbGxlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAALa2V5VXNlckRhdGUAAAABBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAtrZXlVc2VyQWRkcgAAAAEFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAC2tleVVzZXJOYW1lAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAALa2V5VXNlckRlc2MAAAABBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlVc2VyU29jaWFsAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5VXNlclRodW1iAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgUAAAANY3VycmVudFN0YXR1cwIAAAABXwUAAAAHYWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5VXNlclN0YXR1cwAAAAEFAAAAB2FkZHJlc3MFAAAAC3VzZXJSZW1vdmVkBQAAAANuaWwJAAACAAAAAQIAAAALTm90IGFsbG93ZWQAAAAAroW+Lg==", "height": 1319675, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3DoAavhzuc2ypXbtqW7qNxgTr2MrLF5nXUPawTWq7zYE Next: BgHLYGcxna3mZAShseWAkNGTmeAqNgzs6JLfC81wEZEQ 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+
410 let dappRunningKey = "conf_dapp_is_running"
511
612 let maintenanceMSGKey = "conf_maintenance_msg"
2733 case _ =>
2834 true
2935 }
30-
31-let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
32-
33-let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
34-
35-let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
3636
3737 let userAllowed = "ALLOWED"
3838
150150 then throw("600 Char. max description")
151151 else if ((size(name) > 45))
152152 then throw("45 Char. max name")
153- else [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)]
153+ else {
154+ let json = (((((((("{\"address\": \"" + caller) + "\", \"name\": \"") + toBase64String(toBytes(keyUserName(name)))) + "\", \"thumb\":\"") + toBase64String(toBytes(keyUserName(thumb)))) + "\",\"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), StringEntry(((userRegistered + "_") + caller), json)]
156+ }
154157 }
155158
156159
224227 then (status == userAllowed)
225228 else false)
226229 then throw("User already allowed & verified")
227- else if (containsElement([chris, joep, toString(this)], caller))
228- then [StringEntry(keyUserStatus(address), statusToSet)]
229- else throw("Not allowed to change user status")
230+ else {
231+ let name = toBase64String(toBytes(keyUserName(address)))
232+ let thumb = toBase64String(toBytes(keyUserThumb(address)))
233+ let date = keyUserDate(address)
234+ let json = (((((((("{\"address\": \"" + address) + "\", \"name\": \"") + name) + "\", \"thumb\":\"") + thumb) + "\",\"date\":\"") + date) + "\"}")
235+ if (containsElement([chris, joep, toString(this)], caller))
236+ then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), name)]
237+ else throw("Not allowed to change user status")
238+ }
230239 }
231-
232-
233-
234-@Callable(i)
235-func creditUser (address) = {
236- let caller = toString(addressFromPublicKey(i.callerPublicKey))
237- let id = toBase58String(i.transactionId)
238- if (containsElement([chris, joep], caller))
239- then [ScriptTransfer(Address(fromBase58String(address)), 30000000000, signAssetId)]
240- else throw("Not allowed")
241- }
242240
243241
244242
246244 func deleteUser (address) = {
247245 let caller = toString(addressFromPublicKey(i.callerPublicKey))
248246 let id = toBase58String(i.transactionId)
249- if (containsElement([chris, joep, toString(this)], caller))
250- then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), StringEntry(keyUserStatus(address), userRemoved)]
247+ let currentStatus = getStringByKey(keyUserStatus(address))
248+ if (containsElement([chris, 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)), StringEntry(keyUserStatus(address), userRemoved)]
251250 else throw("Not allowed")
252- }
253-
254-
255-
256-@Callable(i)
257-func deleteEntry (entry) = {
258- let caller = toString(addressFromPublicKey(i.callerPublicKey))
259- if ((caller == chris))
260- then [DeleteEntry(entry)]
261- else throw("no")
262251 }
263252
264253
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+
410 let dappRunningKey = "conf_dapp_is_running"
511
612 let maintenanceMSGKey = "conf_maintenance_msg"
713
814 let whitelistedonlyKey = "conf_whitelisted_only"
915
1016 let dappRunning = match getBoolean(this, dappRunningKey) {
1117 case a: Boolean =>
1218 a
1319 case _ =>
1420 true
1521 }
1622
1723 let maintenanceMSG = match getString(this, maintenanceMSGKey) {
1824 case a: String =>
1925 a
2026 case _ =>
2127 ""
2228 }
2329
2430 let whitelistedonly = match getBoolean(this, whitelistedonlyKey) {
2531 case a: Boolean =>
2632 a
2733 case _ =>
2834 true
2935 }
30-
31-let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
32-
33-let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
34-
35-let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
3636
3737 let userAllowed = "ALLOWED"
3838
3939 let userRegistered = "REGISTERED"
4040
4141 let userVerified = "VERIFIED"
4242
4343 let userSuspended = "SUSPENDED"
4444
4545 let userRemoved = "REMOVED"
4646
4747 let userChangeRequired = "CHANGE_REQUIRED"
4848
4949 let userUnregistered = "UNREGISTERED"
5050
5151 let userReset = "RESET"
5252
5353 func getStringByKey (key) = match getString(this, key) {
5454 case a: String =>
5555 a
5656 case _ =>
5757 ""
5858 }
5959
6060
6161 func getBooleanByKey (key) = match getBoolean(this, key) {
6262 case a: Boolean =>
6363 a
6464 case _ =>
6565 false
6666 }
6767
6868
6969 func getIntegerByKey (key) = match getInteger(this, key) {
7070 case i: Int =>
7171 i
7272 case _ =>
7373 0
7474 }
7575
7676
7777 func validateCID (cid) = if (if ((75 > size(cid)))
7878 then (60 > size(split(cid, "/")[0]))
7979 else false)
8080 then (16 > size(split(cid, "/")[1]))
8181 else false
8282
8383
8484 func keyUserAddr (caller) = ("user_" + caller)
8585
8686
8787 func keyUserName (caller) = ("user_name_" + caller)
8888
8989
9090 func keyUserDesc (caller) = ("user_desc_" + caller)
9191
9292
9393 func keyUserSocial (caller) = ("user_social_" + caller)
9494
9595
9696 func keyUserThumb (caller) = ("user_thumb_" + caller)
9797
9898
9999 func keyUserStatus (caller) = ("user_status_" + caller)
100100
101101
102102 func keyUserDate (caller) = ("user_date_" + caller)
103103
104104
105105 @Callable(i)
106106 func appRunning (isLive,message) = {
107107 let caller = toString(addressFromPublicKey(i.callerPublicKey))
108108 let id = toBase58String(i.transactionId)
109109 if (containsElement([chris, joep, toString(this)], caller))
110110 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
111111 else throw("You are not allowed to change this")
112112 }
113113
114114
115115
116116 @Callable(i)
117117 func registrationMode (WLonly) = {
118118 let caller = toString(addressFromPublicKey(i.callerPublicKey))
119119 let id = toBase58String(i.transactionId)
120120 if (containsElement([chris, joep, toString(this)], caller))
121121 then [BooleanEntry(whitelistedonlyKey, WLonly)]
122122 else throw("You are not allowed to change this")
123123 }
124124
125125
126126
127127 @Callable(i)
128128 func registerUser (name,description,thumb,social) = if (!(dappRunning))
129129 then throw(maintenanceMSG)
130130 else {
131131 let caller = toString(addressFromPublicKey(i.callerPublicKey))
132132 let canRegister = getStringByKey(keyUserStatus(caller))
133133 let id = toBase58String(i.transactionId)
134134 let timestamp = lastBlock.timestamp
135135 if (if ((canRegister == userSuspended))
136136 then true
137137 else (canRegister == userRemoved))
138138 then throw("Account suspended/ removed.")
139139 else if ((canRegister == userRegistered))
140140 then throw("Already registered")
141141 else if (if ((canRegister == ""))
142142 then whitelistedonly
143143 else false)
144144 then throw("Can't register, get approved first.")
145145 else if (if ((name == ""))
146146 then true
147147 else (description == ""))
148148 then throw("Name and description cannot be empty")
149149 else if ((size(description) > 600))
150150 then throw("600 Char. max description")
151151 else if ((size(name) > 45))
152152 then throw("45 Char. max name")
153- else [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)]
153+ else {
154+ let json = (((((((("{\"address\": \"" + caller) + "\", \"name\": \"") + toBase64String(toBytes(keyUserName(name)))) + "\", \"thumb\":\"") + toBase64String(toBytes(keyUserName(thumb)))) + "\",\"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), StringEntry(((userRegistered + "_") + caller), json)]
156+ }
154157 }
155158
156159
157160
158161 @Callable(i)
159162 func updateUser (name,description,thumb,social) = if (!(dappRunning))
160163 then throw(maintenanceMSG)
161164 else {
162165 let caller = toString(addressFromPublicKey(i.callerPublicKey))
163166 let id = toBase58String(i.transactionId)
164167 let canUpdate = getStringByKey(keyUserStatus(caller))
165168 if (if ((canUpdate == userSuspended))
166169 then true
167170 else (canUpdate == userRemoved))
168171 then throw("Account suspended/ removed.")
169172 else if (if ((canUpdate == ""))
170173 then true
171174 else (canUpdate == userAllowed))
172175 then throw("Register first")
173176 else if (if ((name == ""))
174177 then true
175178 else (description == ""))
176179 then throw("Name & description cannot be empty")
177180 else if ((size(description) > 600))
178181 then throw("600 Char. max for description")
179182 else if ((size(name) > 45))
180183 then throw("45 Char. max name")
181184 else [StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb)]
182185 }
183186
184187
185188
186189 @Callable(i)
187190 func changeUserStatus (address,status) = if (!(dappRunning))
188191 then throw(maintenanceMSG)
189192 else {
190193 let caller = toString(addressFromPublicKey(i.callerPublicKey))
191194 let id = toBase58String(i.transactionId)
192195 let currentStatus = getStringByKey(keyUserStatus(address))
193196 let statusToSet = if ((status == userVerified))
194197 then userVerified
195198 else if ((status == userRegistered))
196199 then userRegistered
197200 else if ((status == userSuspended))
198201 then userSuspended
199202 else if ((status == userRemoved))
200203 then userRemoved
201204 else if ((status == userAllowed))
202205 then userAllowed
203206 else if ((status == userChangeRequired))
204207 then userChangeRequired
205208 else if (if ((status == userReset))
206209 then (currentStatus == userAllowed)
207210 else false)
208211 then ""
209212 else throw("Unknown status")
210213 let userIsRegistered = getIntegerByKey(keyUserDate(address))
211214 if (if ((userIsRegistered == 0))
212215 then (status != userAllowed)
213216 else false)
214217 then throw("You cant set this status, user is not registered.")
215218 else if (if ((currentStatus == userAllowed))
216219 then (status == userAllowed)
217220 else false)
218221 then throw("User already allowed")
219222 else if (if ((currentStatus == userRegistered))
220223 then (status == userAllowed)
221224 else false)
222225 then throw("User already allowed & registered")
223226 else if (if ((currentStatus == userVerified))
224227 then (status == userAllowed)
225228 else false)
226229 then throw("User already allowed & verified")
227- else if (containsElement([chris, joep, toString(this)], caller))
228- then [StringEntry(keyUserStatus(address), statusToSet)]
229- else throw("Not allowed to change user status")
230+ else {
231+ let name = toBase64String(toBytes(keyUserName(address)))
232+ let thumb = toBase64String(toBytes(keyUserThumb(address)))
233+ let date = keyUserDate(address)
234+ let json = (((((((("{\"address\": \"" + address) + "\", \"name\": \"") + name) + "\", \"thumb\":\"") + thumb) + "\",\"date\":\"") + date) + "\"}")
235+ if (containsElement([chris, joep, toString(this)], caller))
236+ then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), name)]
237+ else throw("Not allowed to change user status")
238+ }
230239 }
231-
232-
233-
234-@Callable(i)
235-func creditUser (address) = {
236- let caller = toString(addressFromPublicKey(i.callerPublicKey))
237- let id = toBase58String(i.transactionId)
238- if (containsElement([chris, joep], caller))
239- then [ScriptTransfer(Address(fromBase58String(address)), 30000000000, signAssetId)]
240- else throw("Not allowed")
241- }
242240
243241
244242
245243 @Callable(i)
246244 func deleteUser (address) = {
247245 let caller = toString(addressFromPublicKey(i.callerPublicKey))
248246 let id = toBase58String(i.transactionId)
249- if (containsElement([chris, joep, toString(this)], caller))
250- then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), StringEntry(keyUserStatus(address), userRemoved)]
247+ let currentStatus = getStringByKey(keyUserStatus(address))
248+ if (containsElement([chris, 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)), StringEntry(keyUserStatus(address), userRemoved)]
251250 else throw("Not allowed")
252- }
253-
254-
255-
256-@Callable(i)
257-func deleteEntry (entry) = {
258- let caller = toString(addressFromPublicKey(i.callerPublicKey))
259- if ((caller == chris))
260- then [DeleteEntry(entry)]
261- else throw("no")
262251 }
263252
264253

github/deemru/w8io/c3f4982 
40.89 ms