tx · BgHLYGcxna3mZAShseWAkNGTmeAqNgzs6JLfC81wEZEQ

3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj:  -0.01400000 Waves

2020.12.22 11:47 [1319688] smart account 3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj > SELF 0.00000000 Waves

{ "type": 13, "id": "BgHLYGcxna3mZAShseWAkNGTmeAqNgzs6JLfC81wEZEQ", "fee": 1400000, "feeAssetId": null, "timestamp": 1608626869429, "version": 2, "chainId": 84, "sender": "3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj", "senderPublicKey": "A2m227AHcq7gWfSU59Q3UJaqkEa7SccFYmJuWHbFrrKE", "proofs": [ "2PTHAQVLXPoz3R21TrPAkaeCbbYNEhEvos9z6RGZgSfdQx8sMeAAegymhe4a2uwsJsP2d29pmirSyiDCsbH3t9wJ" ], "script": "base64:AAIEAAAAAAAAACgIAhIECgIECBIDCgEEEgYKBAgICAgSBgoECAgICBIECgIICBIDCgEIAAAAHAAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAA5kYXBwUnVubmluZ0tleQIAAAAUY29uZl9kYXBwX2lzX3J1bm5pbmcAAAAAEW1haW50ZW5hbmNlTVNHS2V5AgAAABRjb25mX21haW50ZW5hbmNlX21zZwAAAAASd2hpdGVsaXN0ZWRvbmx5S2V5AgAAABVjb25mX3doaXRlbGlzdGVkX29ubHkAAAAAC2RhcHBSdW5uaW5nBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAADmRhcHBSdW5uaW5nS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBgAAAAAObWFpbnRlbmFuY2VNU0cEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAARbWFpbnRlbmFuY2VNU0dLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAAAAAA93aGl0ZWxpc3RlZG9ubHkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAASd2hpdGVsaXN0ZWRvbmx5S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBgAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQAAAAADnVzZXJSZWdpc3RlcmVkAgAAAApSRUdJU1RFUkVEAAAAAAx1c2VyVmVyaWZpZWQCAAAACFZFUklGSUVEAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABJ1c2VyQ2hhbmdlUmVx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dXMFAAAAC3VzZXJBbGxvd2VkBQAAAAt1c2VyQWxsb3dlZAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAABJ1c2VyQ2hhbmdlUmVxdWlyZWQFAAAAEnVzZXJDaGFuZ2VSZXF1aXJlZAMDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAJdXNlclJlc2V0CQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwIAAAAACQAAAgAAAAECAAAADlVua25vd24gc3RhdHVzBAAAABB1c2VySXNSZWdpc3RlcmVkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAAC2tleVVzZXJEYXRlAAAAAQUAAAAHYWRkcmVzcwMDCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQAAAAAAAAAAAAJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQHCQAAAgAAAAECAAAAMVlvdSBjYW50IHNldCB0aGlzIHN0YXR1cywgdXNlciBpcyBub3QgcmVnaXN0ZXJlZC4DAwkAAAAAAAACBQAAAA1jdXJyZW50U3RhdHVzBQAAAAt1c2VyQWxsb3dlZAkAAAAAAAACBQAAAAZzdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwkAAAIAAAABAgAAABRVc2VyIGFscmVhZHkgYWxsb3dlZAMDCQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAADnVzZXJSZWdpc3RlcmVkCQAAAAAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQHCQAAAgAAAAECAAAAIVVzZXIgYWxyZWFkeSBhbGxvd2VkICYgcmVnaXN0ZXJlZAMDCQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAADHVzZXJWZXJpZmllZAkAAAAAAAACBQAAAAZzdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwkAAAIAAAABAgAAAB9Vc2VyIGFscmVhZHkgYWxsb3dlZCAmIHZlcmlmaWVkBAAAAARuYW1lCQACWgAAAAEJAAGbAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAC2tleVVzZXJOYW1lAAAAAQUAAAAHYWRkcmVzcwQAAAAFdGh1bWIJAAJaAAAAAQkA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", "height": 1319688, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J3yCdkJNnr3AKbBsHUhLsswYanALPk7FLZ1zZRZWWLiG Next: 31WFJ9N3oGv8fMZTsAfcPbckScgviAGvvmVMZ6owcAGo Diff:
OldNewDifferences
228228 else false)
229229 then throw("User already allowed & verified")
230230 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) + "\"}")
231+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
232+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
233+ let date = getIntegerByKey(keyUserDate(address))
234+ let json = (((((((("{\"address\": \"" + address) + "\", \"name\": \"") + name) + "\", \"thumb\":\"") + thumb) + "\",\"date\":\"") + toString(date)) + "\"}")
235235 if (containsElement([chris, joep, toString(this)], caller))
236- then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), name)]
236+ then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json)]
237237 else throw("Not allowed to change user status")
238238 }
239239 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
55
66 let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
77
88 let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
99
1010 let dappRunningKey = "conf_dapp_is_running"
1111
1212 let maintenanceMSGKey = "conf_maintenance_msg"
1313
1414 let whitelistedonlyKey = "conf_whitelisted_only"
1515
1616 let dappRunning = match getBoolean(this, dappRunningKey) {
1717 case a: Boolean =>
1818 a
1919 case _ =>
2020 true
2121 }
2222
2323 let maintenanceMSG = match getString(this, maintenanceMSGKey) {
2424 case a: String =>
2525 a
2626 case _ =>
2727 ""
2828 }
2929
3030 let whitelistedonly = match getBoolean(this, whitelistedonlyKey) {
3131 case a: Boolean =>
3232 a
3333 case _ =>
3434 true
3535 }
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")
153153 else {
154154 let json = (((((((("{\"address\": \"" + caller) + "\", \"name\": \"") + toBase64String(toBytes(keyUserName(name)))) + "\", \"thumb\":\"") + toBase64String(toBytes(keyUserName(thumb)))) + "\",\"date\":\"") + toString(timestamp)) + "\"}")
155155 [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)]
156156 }
157157 }
158158
159159
160160
161161 @Callable(i)
162162 func updateUser (name,description,thumb,social) = if (!(dappRunning))
163163 then throw(maintenanceMSG)
164164 else {
165165 let caller = toString(addressFromPublicKey(i.callerPublicKey))
166166 let id = toBase58String(i.transactionId)
167167 let canUpdate = getStringByKey(keyUserStatus(caller))
168168 if (if ((canUpdate == userSuspended))
169169 then true
170170 else (canUpdate == userRemoved))
171171 then throw("Account suspended/ removed.")
172172 else if (if ((canUpdate == ""))
173173 then true
174174 else (canUpdate == userAllowed))
175175 then throw("Register first")
176176 else if (if ((name == ""))
177177 then true
178178 else (description == ""))
179179 then throw("Name & description cannot be empty")
180180 else if ((size(description) > 600))
181181 then throw("600 Char. max for description")
182182 else if ((size(name) > 45))
183183 then throw("45 Char. max name")
184184 else [StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb)]
185185 }
186186
187187
188188
189189 @Callable(i)
190190 func changeUserStatus (address,status) = if (!(dappRunning))
191191 then throw(maintenanceMSG)
192192 else {
193193 let caller = toString(addressFromPublicKey(i.callerPublicKey))
194194 let id = toBase58String(i.transactionId)
195195 let currentStatus = getStringByKey(keyUserStatus(address))
196196 let statusToSet = if ((status == userVerified))
197197 then userVerified
198198 else if ((status == userRegistered))
199199 then userRegistered
200200 else if ((status == userSuspended))
201201 then userSuspended
202202 else if ((status == userRemoved))
203203 then userRemoved
204204 else if ((status == userAllowed))
205205 then userAllowed
206206 else if ((status == userChangeRequired))
207207 then userChangeRequired
208208 else if (if ((status == userReset))
209209 then (currentStatus == userAllowed)
210210 else false)
211211 then ""
212212 else throw("Unknown status")
213213 let userIsRegistered = getIntegerByKey(keyUserDate(address))
214214 if (if ((userIsRegistered == 0))
215215 then (status != userAllowed)
216216 else false)
217217 then throw("You cant set this status, user is not registered.")
218218 else if (if ((currentStatus == userAllowed))
219219 then (status == userAllowed)
220220 else false)
221221 then throw("User already allowed")
222222 else if (if ((currentStatus == userRegistered))
223223 then (status == userAllowed)
224224 else false)
225225 then throw("User already allowed & registered")
226226 else if (if ((currentStatus == userVerified))
227227 then (status == userAllowed)
228228 else false)
229229 then throw("User already allowed & verified")
230230 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) + "\"}")
231+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
232+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
233+ let date = getIntegerByKey(keyUserDate(address))
234+ let json = (((((((("{\"address\": \"" + address) + "\", \"name\": \"") + name) + "\", \"thumb\":\"") + thumb) + "\",\"date\":\"") + toString(date)) + "\"}")
235235 if (containsElement([chris, joep, toString(this)], caller))
236- then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), name)]
236+ then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json)]
237237 else throw("Not allowed to change user status")
238238 }
239239 }
240240
241241
242242
243243 @Callable(i)
244244 func deleteUser (address) = {
245245 let caller = toString(addressFromPublicKey(i.callerPublicKey))
246246 let id = toBase58String(i.transactionId)
247247 let currentStatus = getStringByKey(keyUserStatus(address))
248248 if (containsElement([chris, toString(this)], caller))
249249 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)]
250250 else throw("Not allowed")
251251 }
252252
253253

github/deemru/w8io/c3f4982 
72.43 ms