tx · G5Dda9KrcBGYpRkjo7e7XMUa1yEp725mAzkrZzaEenia

3N8YkRZsgDVNAxtmwU1F65EpcYMb8f7QPos:  -0.01500000 Waves

2024.06.03 17:44 [3134643] smart account 3N8YkRZsgDVNAxtmwU1F65EpcYMb8f7QPos > SELF 0.00000000 Waves

{ "type": 13, "id": "G5Dda9KrcBGYpRkjo7e7XMUa1yEp725mAzkrZzaEenia", "fee": 1500000, "feeAssetId": null, "timestamp": 1717425897766, "version": 2, "chainId": 84, "sender": "3N8YkRZsgDVNAxtmwU1F65EpcYMb8f7QPos", "senderPublicKey": "F7SLwr7RYVQpyocmVScFC6ooaAwewaGq6wNRDYvyiPj1", "proofs": [ "2kTZ8tYsXFrCSenhpSrgjqGsLtDqhmGaNRFiixKcu9yqPs8zVHhWUZSFsqRnt7SedfGWwjaNgbELpLpyjzS1AzrT" ], "script": "base64:AAIFAAAAAAAAABIIAhIGCgQIGAgIEgQKAggIEgAAAAAQAAAAABRwcmVkaWN0aW9uTWF4Q291bnRlcgAAAAAAAAAAAwAAAAAKbWF4Q291bnRlcgAAAAAAAAAABgAAAAANZGVmYXVsdFJhdGluZwAAAAAAAAAAZAAAAAAOcmF0ZUFkanVzdG1lbnQAAAAAAAAAABQAAAAAB3Rva2VuSWQBAAAAIG33eiemmz/8i1OVqeOeBVscIi9bTehRMFsBoQapAMYYAAAAAAxwYXlvdXRBbW91bnQAAAAAAAX14QAAAAAADHJhdGluZ0N1dG9mZgAAAAAAAAAAMgAAAAAJcl9hdmVyYWdlAAAAAAAAAABkAAAAAAVzY2FsZQAAAAAAAAAD6AEAAAARc2VhcmNoRm9yQ291bnRlcnMAAAACAAAABml0ZW1JZAAAAAdjb3VudGVyBAAAABFzZWFyY2hGb3JDb3VudGVycwQAAAAHJG1hdGNoMAkABCIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAGaXRlbUlkAgAAAAFfCQABpAAAAAEFAAAAB2NvdW50ZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwIAAAAHTm8gVXNlcgUAAAARc2VhcmNoRm9yQ291bnRlcnMBAAAAD3NlYXJjaEZvclJhdGluZwAAAAEAAAAHYWRkcmVzcwQAAAAGcmF0aW5nBAAAAAckbWF0Y2gwCQAEHwAAAAEJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAHX3JhdGluZwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFyBQAAAAckbWF0Y2gwBQAAAAFyBQAAAA1kZWZhdWx0UmF0aW5nBQAAAAZyYXRpbmcBAAAAGnNlYXJjaEZvckFkZHJlc3NQcmVkaWN0aW9uAAAAAgAAAAZpdGVtSWQAAAAGYWRyZXNzBAAAABNzZWFyY2hGb3JQcmVkaWN0aW9uBAAAAAckbWF0Y2gwCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAZpdGVtSWQCAAAAAV8FAAAABmFkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzAgAAAAlOb3QgRm91bmQFAAAAE3NlYXJjaEZvclByZWRpY3Rpb24BAAAAFmZpbmRQcmVkaWN0aW9uQWRyZXNzZXMAAAACAAAABml0ZW1JZAAAAAdjb3VudGVyBAAAAAphZHJlc3NMaXN0AwkAAGcAAAACBQAAAAdjb3VudGVyAAAAAAAAAAAFBAAAAAdhZHJlc3MxCQEAAAARc2VhcmNoRm9yQ291bnRlcnMAAAACBQAAAAZpdGVtSWQAAAAAAAAAAAEEAAAAB2FkcmVzczIJAQAAABFzZWFyY2hGb3JDb3VudGVycwAAAAIFAAAABml0ZW1JZAAAAAAAAAAAAgQAAAAHYWRyZXNzMwkBAAAAEXNlYXJjaEZvckNvdW50ZXJzAAAAAgUAAAAGaXRlbUlkAAAAAAAAAAADBAAAAAdhZHJlc3M0CQEAAAARc2VhcmNoRm9yQ291bnRlcnMAAAACBQAAAAZpdGVtSWQAAAAAAAAAAAQEAAAAB2FkcmVzczUJAQAAABFzZWFyY2hGb3JDb3VudGVycwAAAAIFAAAABml0ZW1JZAAAAAAAAAAABQkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIFAAAAA25pbAUAAAAHYWRyZXNzMQUAAAAHYWRyZXNzMgUAAAAHYWRyZXNzMwUAAAAHYWRyZXNzNAUAAAAHYWRyZXNzNQMJAABnAAAAAgUAAAAHY291bnRlcgAAAAAAAAAABAQAAAAHYWRyZXNzMQkBAAAAEXNlYXJjaEZvckNvdW50ZXJzAAAAAgUAAAAGaXRlbUlkAAAAAAAAAAABBAAAAAdhZHJlc3MyCQEAAAARc2VhcmNoRm9yQ291bnRlcnMAAAACBQAAAAZpdGVtSWQAAAAAAAAAAAIEAAAAB2FkcmVzczMJAQAAABFzZWFyY2hGb3JDb3VudGVycwAAAAIFAAAABml0ZW1JZAAAAAAAAAAAAwQAAAAHYWRyZXNzNAkBAAAAEXNlYXJjaEZvckNvdW50ZXJzAAAAAgUAAAAGaXRlbUlkAAAAAAAAAAAECQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIFAAAAA25pbAUAAAAHYWRyZXNzMQUAAAAHYWRyZXNzMgUAAAAHYWRyZXNzMwUAAAAHYWRyZXNzNAMJAABnAAAAAgUAAAAHY291bnRlcgAAAAAAAAAAAwQAAAAHYWRyZXNzMQkBAAAAEXNlYXJjaEZvckNvdW50ZXJzAAAAAgUAAAAGaXRlbUlkAAAAAAAAAAABBAAAAAdhZHJlc3MyCQEAAAARc2VhcmNoRm9yQ291bnRlcnMAAAACBQAAAAZpdGVtSWQAAAAAAAAAAAIEAAAAB2FkcmVzczMJAQAAABFzZWFyY2hGb3JDb3VudGVycwAAAAIFAAAABml0ZW1JZAAAAAAAAAAAAwkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAADbmlsBQAAAAdhZHJlc3MxBQAAAAdhZHJlc3MyBQAAAAdhZHJlc3MzAwkAAGcAAAACBQAAAAdjb3VudGVyAAAAAAAAAAACBAAAAAdhZHJlc3MxCQEAAAARc2VhcmNoRm9yQ291bnRlcnMAAAACBQAAAAZpdGVtSWQAAAAAAAAAAAEEAAAAB2FkcmVzczIJAQAAABFzZWFyY2hGb3JDb3VudGVycwAAAAIFAAAABml0ZW1JZAAAAAAAAAAAAgkABE0AAAACCQAETQAAAAIFAAAAA25pbAUAAAAHYWRyZXNzMQUAAAAHYWRyZXNzMgQAAAAHYWRyZXNzMQkBAAAAEXNlYXJjaEZvckNvdW50ZXJzAAAAAgUAAAAGaXRlbUlkAAAAAAAAAAABCQAETQAAAAIFAAAAA25pbAUAAAAHYWRyZXNzMQUAAAAKYWRyZXNzTGlzdAEAAAAWY2FsY3VsYXRlRXhwZWN0ZWRTY29yZQAAAAIAAAAIcl9wbGF5ZXIAAAAJcl9hdmVyYWdlBAAAAARkaWZmCQAAZQAAAAIFAAAACXJfYXZlcmFnZQUAAAAIcl9wbGF5ZXIEAAAACGV4cG9uZW50CQAAaQAAAAIFAAAABGRpZmYFAAAACXJfYXZlcmFnZQQAAAAKcG93ZXJPZlRlbgkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAAhleHBvbmVudAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAGSEFMRlVQBAAAAAtkZW5vbWluYXRvcgkAAGQAAAACBQAAAAVzY2FsZQUAAAAKcG93ZXJPZlRlbgkAAGkAAAACBQAAAAVzY2FsZQUAAAALZGVub21pbmF0b3IBAAAAD2NhbGN1bGF0ZVBheW91dAAAAAIAAAAIcl9wbGF5ZXIAAAAJcl9hdmVyYWdlBAAAAAVyYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAACHJfcGxheWVyAAAAAAAAAABkBQAAAAlyX2F2ZXJhZ2UEAAAABnBheW91dAkAAGkAAAACCQAAaAAAAAIFAAAADHBheW91dEFtb3VudAUAAAAFcmF0aW8AAAAAAAAAAGQFAAAABnBheW91dAEAAAASY2FsY3VsYXRlTmV3UmF0aW5nAAAABAAAAAhyX3BsYXllcgAAAAlyX2F2ZXJhZ2UAAAABawAAAAthY3R1YWxTY29yZQQAAAANZXhwZWN0ZWRTY29yZQkBAAAAFmNhbGN1bGF0ZUV4cGVjdGVkU2NvcmUAAAACBQAAAAhyX3BsYXllcgUAAAAJcl9hdmVyYWdlBAAAABFhY3R1YWxTY29yZVNjYWxlZAkAAGgAAAACBQAAAAthY3R1YWxTY29yZQUAAAAFc2NhbGUEAAAAB2RlbHRhX3IJAABpAAAAAgkAAGgAAAACBQAAAAFrCQAAZQAAAAIFAAAAC2FjdHVhbFNjb3JlBQAAAA1leHBlY3RlZFNjb3JlBQAAAAVzY2FsZQkAAGQAAAACBQAAAAhyX3BsYXllcgUAAAAHZGVsdGFfcgAAAAMAAAABaQEAAAAiYWRqdXN0UmF0aW5nc0FuZFBheW91dFBhcnRpY2lwYW50cwAAAAQAAAAGaXRlbUlkAAAAC2FkZHJlc3NMaXN0AAAAEWxhc3RDYWxsZXJBZGRyZXNzAAAAD2ZpbmFsUHJlZGljdGlvbgQAAAAGY2FsbGVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAABmNhbGxlcgkABCUAAAABBQAAAAR0aGlzCQAAAgAAAAECAAAAKVlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uCgEAAAARdXBkYXRlUmF0aW5nc0Z1bmMAAAACAAAABWFjY3VtAAAAB2FkZHJlc3MEAAAABnJhdGluZwkBAAAAD3NlYXJjaEZvclJhdGluZwAAAAEFAAAAB2FkZHJlc3MEAAAACnByZWRpY3Rpb24JAQAAABpzZWFyY2hGb3JBZGRyZXNzUHJlZGljdGlvbgAAAAIFAAAABml0ZW1JZAUAAAAHYWRkcmVz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aW9uIEZvdW5kBAAAAApuZXdDb3VudGVyCQAAZAAAAAIFAAAAEHNlYXJjaEZvckNvdW50ZXIAAAAAAAAAAAEDCQAAAAAAAAIFAAAADmxhc3RQcmVkaWN0aW9uBQAAAApwcmVkaWN0aW9uAwkAAAAAAAACCQAAZAAAAAIFAAAAEXByZWRpY3Rpb25Db3VudGVyAAAAAAAAAAABBQAAABRwcmVkaWN0aW9uTWF4Q291bnRlcgQAAAAJbmV3UmF0aW5nCQEAAAASY2FsY3VsYXRlTmV3UmF0aW5nAAAABAUAAAAMY2xpZW50UmF0aW5nBQAAAAlyX2F2ZXJhZ2UFAAAADnJhdGVBZGp1c3RtZW50AAAAAAAAAAABBAAAABBjYWxjdWxhdGVkQW1vdW50CQEAAAAPY2FsY3VsYXRlUGF5b3V0AAAAAgUAAAAJbmV3UmF0aW5nBQAAAAlyX2F2ZXJhZ2UEAAAAEmludm9rZUFkanVzdFJhdGluZwkAA/wAAAAEBQAAAAR0aGlzAgAAACJhZGp1c3RSYXRpbmdzQW5kUGF5b3V0UGFydGljaXBhbnRzCQAETAAAAAIFAAAABml0ZW1JZAkABEwAAAACBQAAAAphZHJlc3NMaXN0CQAETAAAAAIFAAAADGNsaWVudEFkcmVzcwkABEwAAAACBQAAAApwcmVkaWN0aW9uBQAAAANuaWwFAAAAA25pbAMJAQAAAAIhPQAAAAIFAAAAEmludm9rZUFkanVzdFJhdGluZwUAAAASaW52b2tlQWRqdXN0UmF0aW5nCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGaXRlbUlkAgAAAAFfCQABpAAAAAEFAAAACm5ld0NvdW50ZXIFAAAADGNsaWVudEFkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGaXRlbUlkAgAAAAFfBQAAAAxjbGllbnRBZHJlc3MFAAAACnByZWRpY3Rpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAGaXRlbUlkAgAAAAhfY291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", "height": 3134643, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4JAZrZeJ6BDKXU99bBXkcwG4ss36BbYyWNUqtRLBqifM Next: 4mmixvcrru92yoyqKzaGjnqKhsUjush4SaRmr66PunQY Diff:
OldNewDifferences
1616 let ratingCutoff = 50
1717
1818 let r_average = 100
19+
20+let scale = 1000
1921
2022 func searchForCounters (itemId,counter) = {
2123 let searchForCounters = match getString(((itemId + "_") + toString(counter))) {
9395 let diff = (r_average - r_player)
9496 let exponent = (diff / r_average)
9597 let powerOfTen = pow(10, 0, exponent, 0, 0, HALFUP)
96- let denominator = (1 + powerOfTen)
97- (1 / denominator)
98+ let denominator = (scale + powerOfTen)
99+ (scale / denominator)
98100 }
99101
100102
107109
108110 func calculateNewRating (r_player,r_average,k,actualScore) = {
109111 let expectedScore = calculateExpectedScore(r_player, r_average)
110- let delta_r = (k * (actualScore - expectedScore))
112+ let actualScoreScaled = (actualScore * scale)
113+ let delta_r = ((k * (actualScore - expectedScore)) / scale)
111114 (r_player + delta_r)
112115 }
113116
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let predictionMaxCounter = 3
55
66 let maxCounter = 6
77
88 let defaultRating = 100
99
1010 let rateAdjustment = 20
1111
1212 let tokenId = base58'8QGJvsXqJ43q5ksFymoPKF1NWWhwUfr2F7h52oeWgVhH'
1313
1414 let payoutAmount = 100000000
1515
1616 let ratingCutoff = 50
1717
1818 let r_average = 100
19+
20+let scale = 1000
1921
2022 func searchForCounters (itemId,counter) = {
2123 let searchForCounters = match getString(((itemId + "_") + toString(counter))) {
2224 case s: String =>
2325 s
2426 case _ =>
2527 "No User"
2628 }
2729 searchForCounters
2830 }
2931
3032
3133 func searchForRating (address) = {
3234 let rating = match getInteger((address + "_rating")) {
3335 case r: Int =>
3436 r
3537 case _ =>
3638 defaultRating
3739 }
3840 rating
3941 }
4042
4143
4244 func searchForAddressPrediction (itemId,adress) = {
4345 let searchForPrediction = match getString(((itemId + "_") + adress)) {
4446 case s: String =>
4547 s
4648 case _ =>
4749 "Not Found"
4850 }
4951 searchForPrediction
5052 }
5153
5254
5355 func findPredictionAdresses (itemId,counter) = {
5456 let adressList = if ((counter >= 5))
5557 then {
5658 let adress1 = searchForCounters(itemId, 1)
5759 let adress2 = searchForCounters(itemId, 2)
5860 let adress3 = searchForCounters(itemId, 3)
5961 let adress4 = searchForCounters(itemId, 4)
6062 let adress5 = searchForCounters(itemId, 5)
6163 (((((nil :+ adress1) :+ adress2) :+ adress3) :+ adress4) :+ adress5)
6264 }
6365 else if ((counter >= 4))
6466 then {
6567 let adress1 = searchForCounters(itemId, 1)
6668 let adress2 = searchForCounters(itemId, 2)
6769 let adress3 = searchForCounters(itemId, 3)
6870 let adress4 = searchForCounters(itemId, 4)
6971 ((((nil :+ adress1) :+ adress2) :+ adress3) :+ adress4)
7072 }
7173 else if ((counter >= 3))
7274 then {
7375 let adress1 = searchForCounters(itemId, 1)
7476 let adress2 = searchForCounters(itemId, 2)
7577 let adress3 = searchForCounters(itemId, 3)
7678 (((nil :+ adress1) :+ adress2) :+ adress3)
7779 }
7880 else if ((counter >= 2))
7981 then {
8082 let adress1 = searchForCounters(itemId, 1)
8183 let adress2 = searchForCounters(itemId, 2)
8284 ((nil :+ adress1) :+ adress2)
8385 }
8486 else {
8587 let adress1 = searchForCounters(itemId, 1)
8688 (nil :+ adress1)
8789 }
8890 adressList
8991 }
9092
9193
9294 func calculateExpectedScore (r_player,r_average) = {
9395 let diff = (r_average - r_player)
9496 let exponent = (diff / r_average)
9597 let powerOfTen = pow(10, 0, exponent, 0, 0, HALFUP)
96- let denominator = (1 + powerOfTen)
97- (1 / denominator)
98+ let denominator = (scale + powerOfTen)
99+ (scale / denominator)
98100 }
99101
100102
101103 func calculatePayout (r_player,r_average) = {
102104 let ratio = ((r_player * 100) / r_average)
103105 let payout = ((payoutAmount * ratio) / 100)
104106 payout
105107 }
106108
107109
108110 func calculateNewRating (r_player,r_average,k,actualScore) = {
109111 let expectedScore = calculateExpectedScore(r_player, r_average)
110- let delta_r = (k * (actualScore - expectedScore))
112+ let actualScoreScaled = (actualScore * scale)
113+ let delta_r = ((k * (actualScore - expectedScore)) / scale)
111114 (r_player + delta_r)
112115 }
113116
114117
115118 @Callable(i)
116119 func adjustRatingsAndPayoutParticipants (itemId,addressList,lastCallerAddress,finalPrediction) = {
117120 let caller = toString(i.caller)
118121 if ((caller != toString(this)))
119122 then throw("You are not allowed to call this function")
120123 else {
121124 func updateRatingsFunc (accum,address) = {
122125 let rating = searchForRating(address)
123126 let prediction = searchForAddressPrediction(itemId, address)
124127 let actualScore = if ((prediction == finalPrediction))
125128 then 1
126129 else 0
127130 let newRating = calculateNewRating(rating, r_average, rateAdjustment, actualScore)
128131 let payout = if ((prediction == finalPrediction))
129132 then true
130133 else false
131134 let updatedEntries = (accum :+ IntegerEntry((address + "_rating"), newRating))
132135 let calculatedAmount = calculatePayout(newRating, r_average)
133136 if (payout)
134137 then (updatedEntries :+ ScriptTransfer(Address(fromBase58String(address)), calculatedAmount, tokenId))
135138 else updatedEntries
136139 }
137140
138141 let updatedRatings = {
139142 let $l = addressList
140143 let $s = size($l)
141144 let $acc0 = nil
142145 func $f0_1 ($a,$i) = if (($i >= $s))
143146 then $a
144147 else updateRatingsFunc($a, $l[$i])
145148
146149 func $f0_2 ($a,$i) = if (($i >= $s))
147150 then $a
148151 else throw("List size exceeds 5")
149152
150153 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
151154 }
152155 (updatedRatings :+ BooleanEntry((itemId + "_adjusted"), true))
153156 }
154157 }
155158
156159
157160
158161 @Callable(i)
159162 func savePrediction (itemId,prediction) = {
160163 let clientAdress = toString(i.caller)
161164 let searchForUser = match getInteger((clientAdress + "_rating")) {
162165 case s: Int =>
163166 s
164167 case _ =>
165168 "User does not exist"
166169 }
167170 if ((searchForUser == "User does not exist"))
168171 then throw("User does not exist")
169172 else {
170173 let isFinal = match getBoolean((itemId + "_final")) {
171174 case s: Boolean =>
172175 s
173176 case _ =>
174177 false
175178 }
176179 if (isFinal)
177180 then throw("Final prediction already made")
178181 else {
179182 let isCanceled = match getBoolean((itemId + "_cancelled")) {
180183 case s: Boolean =>
181184 s
182185 case _ =>
183186 false
184187 }
185188 if (isCanceled)
186189 then throw("Final prediction already made")
187190 else {
188191 let clientRating = searchForRating(clientAdress)
189192 if ((ratingCutoff >= clientRating))
190193 then throw("You are not allowed to participate anymore")
191194 else {
192195 let searchForCounter = match getInteger((itemId + "_counter")) {
193196 case s: Int =>
194197 s
195198 case _ =>
196199 -1
197200 }
198201 if ((searchForCounter >= 1))
199202 then {
200203 let adressList = findPredictionAdresses(itemId, searchForCounter)
201204 if (containsElement(adressList, clientAdress))
202205 then throw("This User already gave a Prediction")
203206 else {
204207 let predictionCounter = match getInteger((itemId + "_predictionCounter")) {
205208 case s: Int =>
206209 s
207210 case _ =>
208211 -1
209212 }
210213 let lastPredictionAdress = adressList[(size(adressList) - 1)]
211214 let lastPrediction = match getString(((itemId + "_") + lastPredictionAdress)) {
212215 case s: String =>
213216 s
214217 case _ =>
215218 "no Prediction Found"
216219 }
217220 let newCounter = (searchForCounter + 1)
218221 if ((lastPrediction == prediction))
219222 then if (((predictionCounter + 1) == predictionMaxCounter))
220223 then {
221224 let newRating = calculateNewRating(clientRating, r_average, rateAdjustment, 1)
222225 let calculatedAmount = calculatePayout(newRating, r_average)
223226 let invokeAdjustRating = invoke(this, "adjustRatingsAndPayoutParticipants", [itemId, adressList, clientAdress, prediction], nil)
224227 if ((invokeAdjustRating != invokeAdjustRating))
225228 then throw("Strict value is not equal to itself.")
226229 else [StringEntry(((itemId + "_") + toString(newCounter)), clientAdress), StringEntry(((itemId + "_") + clientAdress), prediction), IntegerEntry((itemId + "_counter"), newCounter), IntegerEntry((itemId + "_predictionCounter"), (predictionCounter + 1)), BooleanEntry((itemId + "_final"), true), BooleanEntry((itemId + "_cancelled"), false), ScriptTransfer(Address(fromBase58String(clientAdress)), calculatedAmount, tokenId), IntegerEntry((clientAdress + "_rating"), newRating)]
227230 }
228231 else [StringEntry(((itemId + "_") + toString(newCounter)), clientAdress), StringEntry(((itemId + "_") + clientAdress), prediction), IntegerEntry((itemId + "_counter"), newCounter), IntegerEntry((itemId + "_predictionCounter"), (predictionCounter + 1)), BooleanEntry((itemId + "_final"), false), BooleanEntry((itemId + "_cancelled"), false)]
229232 else if ((newCounter >= maxCounter))
230233 then [StringEntry(((itemId + "_") + toString(newCounter)), clientAdress), StringEntry(((itemId + "_") + clientAdress), prediction), IntegerEntry((itemId + "_counter"), newCounter), IntegerEntry((itemId + "_predictionCounter"), (predictionCounter - 1)), BooleanEntry((itemId + "_cancelled"), true), BooleanEntry((itemId + "_final"), false)]
231234 else if (((predictionCounter - 1) == 0))
232235 then [StringEntry(((itemId + "_") + toString(newCounter)), clientAdress), StringEntry(((itemId + "_") + clientAdress), prediction), IntegerEntry((itemId + "_counter"), newCounter), IntegerEntry((itemId + "_predictionCounter"), 1), BooleanEntry((itemId + "_cancelled"), false), BooleanEntry((itemId + "_final"), false), StringEntry("test", lastPrediction), IntegerEntry("test2", size(adressList))]
233236 else [StringEntry(((itemId + "_") + toString(newCounter)), clientAdress), StringEntry(((itemId + "_") + clientAdress), prediction), IntegerEntry((itemId + "_counter"), newCounter), IntegerEntry((itemId + "_predictionCounter"), (predictionCounter - 1)), BooleanEntry((itemId + "_cancelled"), false), BooleanEntry((itemId + "_final"), false), StringEntry("test", lastPrediction), IntegerEntry("test2", size(adressList))]
234237 }
235238 }
236239 else {
237240 let searchForNewItem = match getString(("new_" + itemId)) {
238241 case s: String =>
239242 s
240243 case _ =>
241244 "Item not Found"
242245 }
243246 if ((searchForNewItem == "Item not Found"))
244247 then throw("Item not found")
245248 else [StringEntry(((itemId + "_") + toString(1)), clientAdress), StringEntry(((itemId + "_") + clientAdress), prediction), IntegerEntry((itemId + "_counter"), 1), IntegerEntry((itemId + "_predictionCounter"), 1), DeleteEntry(("new_" + itemId)), StringEntry(("updated_" + itemId), itemId)]
246249 }
247250 }
248251 }
249252 }
250253 }
251254 }
252255
253256
254257
255258 @Callable(i)
256259 func registerUser () = {
257260 let clientAdress = toString(i.caller)
258261 let searchForUser = match getInteger((clientAdress + "_rating")) {
259262 case s: Int =>
260263 s
261264 case _ =>
262265 -1
263266 }
264267 if ((searchForUser != -1))
265268 then throw("User already exists")
266269 else [IntegerEntry((clientAdress + "_rating"), defaultRating)]
267270 }
268271
269272
270273 @Verifier(tx)
271274 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
272275

github/deemru/w8io/169f3d6 
36.32 ms