tx · 3Bbzdb7NcuTEuivNz7kS2tt86qv7HDmaHVD1mvDJFoox

3N9qNNh15o84HrRZa511KX2jQtgLcmqnEgR:  -0.01500000 Waves

2024.06.10 18:48 [3144859] smart account 3N9qNNh15o84HrRZa511KX2jQtgLcmqnEgR > SELF 0.00000000 Waves

{ "type": 13, "id": "3Bbzdb7NcuTEuivNz7kS2tt86qv7HDmaHVD1mvDJFoox", "fee": 1500000, "feeAssetId": null, "timestamp": 1718034542079, "version": 2, "chainId": 84, "sender": "3N9qNNh15o84HrRZa511KX2jQtgLcmqnEgR", "senderPublicKey": "45oG8LXhBqNC5fxcA6iwy3DhLFnsEUzUBwEm7VrWtFSK", "proofs": [ "5pR3hZvaR1nnjV5orNymHRx7V9rUc2Utvx7jUAEctWTHWSnXXKPXPWWukM9P5CQdfJsxcnYX6eapbM3c9Gi57kgH" ], "script": "base64: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ZQAAAAAAAAAAAQQAAAAKYWRqdXN0bWVudAkAAGkAAAACCQAAaAAAAAIFAAAAAWsJAABlAAAAAgAAAAAAAAAAZAUAAAAMcmF0aW5fZmFjdG9yBQAAAAVzY2FsZQkAAGQAAAACBQAAAAhyX3BsYXllcgUAAAAKYWRqdXN0bWVudAQAAAAKYWRqdXN0bWVudAkAAGkAAAACCQAAaAAAAAIJAQAAAAEtAAAAAQUAAAABawkAAGQAAAACAAAAAAAAAAAUBQAAAAxyYXRpbl9mYWN0b3IFAAAABXNjYWxlCQAAZAAAAAIFAAAACHJfcGxheWVyBQAAAAphZGp1c3RtZW50AAAAAwAAAAFpAQAAACJhZGp1c3RSYXRpbmdzQW5kUGF5b3V0UGFydGljaXBhbnRzAAAABAAAAAZpdGVtSWQAAAALYWRkcmVzc0xpc3QAAAARbGFzdENhbGxlckFkZHJlc3MAAAAPZmluYWxQcmVkaWN0aW9uBAAAAAZjYWxsZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyCQAEJQAAAAEFAAAABHRoaXMJAAACAAAAAQIAAAApWW91IGFyZSBub3QgYWxsb3dlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24KAQAAABF1cGRhdGVSYXRpbmdzRnVuYwAAAAIAAAAFYWNjdW0AAAAHYWRkcmVzcwQAAAAGcmF0aW5nCQEAAAAPc2VhcmNoRm9yUmF0aW5nAAAAAQUAAAAHYWRkcmVzcwQAAAAKcHJlZGljdGlvbgkBAAAAGnNlYXJjaEZvckFkZHJlc3NQcmVkaWN0aW9uAAAAAgUAAAAGaXRlbUlkBQAAAAdhZGRyZXNzBAAAAAthY3R1YWxTY29yZQMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgUAAAAPZmluYWxQcmVkaWN0aW9uAAAAAAAAAAABAAAAAAAAAAAABAAAAAluZXdSYXRpbmcJAQAAABJjYWxjdWxhdGVOZXdSYXRpbmcAAAAEBQAAAAZyYXRpbmcFAAAABXJfbWF4BQAAAA5yYXRlQWRqdXN0bWVudAUAAAALYWN0dWFsU2NvcmUEAAAABnBheW91dAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgUAAAAPZmluYWxQcmVkaWN0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", "height": 3144859, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 9SVV4Xx418dED7FCdqDxX1ALQcY76PXdiWoiZYwdXBH8 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let predictionMaxCounter = 3
5+
6+let maxCounter = 6
7+
8+let defaultRating = 100
9+
10+let rateAdjustment = 20
11+
12+let tokenId = base58'8QGJvsXqJ43q5ksFymoPKF1NWWhwUfr2F7h52oeWgVhH'
13+
14+let payoutAmount = 50000000
15+
16+let ratingCutoff = 50
17+
18+let r_max = 500
19+
20+let scale = 100
21+
22+func searchForCounters (itemId,counter) = {
23+ let searchForCounters = match getString(((itemId + "_") + toString(counter))) {
24+ case s: String =>
25+ s
26+ case _ =>
27+ "No User"
28+ }
29+ searchForCounters
30+ }
31+
32+
33+func searchForRating (address) = {
34+ let rating = match getInteger((address + "_rating")) {
35+ case r: Int =>
36+ r
37+ case _ =>
38+ defaultRating
39+ }
40+ rating
41+ }
42+
43+
44+func searchForAddressPrediction (itemId,adress) = {
45+ let searchForPrediction = match getString(((itemId + "_") + adress)) {
46+ case s: String =>
47+ s
48+ case _ =>
49+ "Not Found"
50+ }
51+ searchForPrediction
52+ }
53+
54+
55+func findPredictionAdresses (itemId,counter) = {
56+ let adressList = if ((counter >= 5))
57+ then {
58+ let adress1 = searchForCounters(itemId, 1)
59+ let adress2 = searchForCounters(itemId, 2)
60+ let adress3 = searchForCounters(itemId, 3)
61+ let adress4 = searchForCounters(itemId, 4)
62+ let adress5 = searchForCounters(itemId, 5)
63+ (((((nil :+ adress1) :+ adress2) :+ adress3) :+ adress4) :+ adress5)
64+ }
65+ else if ((counter >= 4))
66+ then {
67+ let adress1 = searchForCounters(itemId, 1)
68+ let adress2 = searchForCounters(itemId, 2)
69+ let adress3 = searchForCounters(itemId, 3)
70+ let adress4 = searchForCounters(itemId, 4)
71+ ((((nil :+ adress1) :+ adress2) :+ adress3) :+ adress4)
72+ }
73+ else if ((counter >= 3))
74+ then {
75+ let adress1 = searchForCounters(itemId, 1)
76+ let adress2 = searchForCounters(itemId, 2)
77+ let adress3 = searchForCounters(itemId, 3)
78+ (((nil :+ adress1) :+ adress2) :+ adress3)
79+ }
80+ else if ((counter >= 2))
81+ then {
82+ let adress1 = searchForCounters(itemId, 1)
83+ let adress2 = searchForCounters(itemId, 2)
84+ ((nil :+ adress1) :+ adress2)
85+ }
86+ else {
87+ let adress1 = searchForCounters(itemId, 1)
88+ (nil :+ adress1)
89+ }
90+ adressList
91+ }
92+
93+
94+func calculatePayout (r_player,r_max) = {
95+ let ratio = ((r_player * 100) / r_max)
96+ let payout = ((payoutAmount * ratio) / 100)
97+ payout
98+ }
99+
100+
101+func calculateNewRating (r_player,r_average,k,actualScore) = {
102+ let ratin_factor = ((r_player * scale) / r_max)
103+ if ((actualScore == 1))
104+ then {
105+ let adjustment = ((k * (100 - ratin_factor)) / scale)
106+ (r_player + adjustment)
107+ }
108+ else {
109+ let adjustment = ((-(k) * (20 + ratin_factor)) / scale)
110+ (r_player + adjustment)
111+ }
112+ }
113+
114+
115+@Callable(i)
116+func adjustRatingsAndPayoutParticipants (itemId,addressList,lastCallerAddress,finalPrediction) = {
117+ let caller = toString(i.caller)
118+ if ((caller != toString(this)))
119+ then throw("You are not allowed to call this function")
120+ else {
121+ func updateRatingsFunc (accum,address) = {
122+ let rating = searchForRating(address)
123+ let prediction = searchForAddressPrediction(itemId, address)
124+ let actualScore = if ((prediction == finalPrediction))
125+ then 1
126+ else 0
127+ let newRating = calculateNewRating(rating, r_max, rateAdjustment, actualScore)
128+ let payout = if ((prediction == finalPrediction))
129+ then true
130+ else false
131+ let updatedEntries = (accum :+ IntegerEntry((address + "_rating"), newRating))
132+ let calculatedAmount = calculatePayout(newRating, r_max)
133+ if (payout)
134+ then (updatedEntries :+ ScriptTransfer(Address(fromBase58String(address)), calculatedAmount, tokenId))
135+ else updatedEntries
136+ }
137+
138+ let updatedRatings = {
139+ let $l = addressList
140+ let $s = size($l)
141+ let $acc0 = nil
142+ func $f0_1 ($a,$i) = if (($i >= $s))
143+ then $a
144+ else updateRatingsFunc($a, $l[$i])
145+
146+ func $f0_2 ($a,$i) = if (($i >= $s))
147+ then $a
148+ else throw("List size exceeds 5")
149+
150+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
151+ }
152+ (updatedRatings :+ BooleanEntry((itemId + "_adjusted"), true))
153+ }
154+ }
155+
156+
157+
158+@Callable(i)
159+func savePrediction (itemId,prediction) = {
160+ let clientAdress = toString(i.caller)
161+ let searchForUser = match getInteger((clientAdress + "_rating")) {
162+ case s: Int =>
163+ s
164+ case _ =>
165+ "User does not exist"
166+ }
167+ if ((searchForUser == "User does not exist"))
168+ then throw("User does not exist")
169+ else {
170+ let isFinal = match getBoolean((itemId + "_final")) {
171+ case s: Boolean =>
172+ s
173+ case _ =>
174+ false
175+ }
176+ if (isFinal)
177+ then throw("Final prediction already made")
178+ else {
179+ let isCanceled = match getBoolean((itemId + "_cancelled")) {
180+ case s: Boolean =>
181+ s
182+ case _ =>
183+ false
184+ }
185+ if (isCanceled)
186+ then throw("Final prediction already made")
187+ else {
188+ let clientRating = searchForRating(clientAdress)
189+ if ((ratingCutoff >= clientRating))
190+ then throw("You are not allowed to participate anymore")
191+ else {
192+ let searchForCounter = match getInteger((itemId + "_counter")) {
193+ case s: Int =>
194+ s
195+ case _ =>
196+ -1
197+ }
198+ if ((searchForCounter >= 1))
199+ then {
200+ let adressList = findPredictionAdresses(itemId, searchForCounter)
201+ if (containsElement(adressList, clientAdress))
202+ then throw("This User already gave a Prediction")
203+ else {
204+ let predictionCounter = match getInteger((itemId + "_predictionCounter")) {
205+ case s: Int =>
206+ s
207+ case _ =>
208+ -1
209+ }
210+ let lastPredictionAdress = adressList[(size(adressList) - 1)]
211+ let lastPrediction = match getString(((itemId + "_") + lastPredictionAdress)) {
212+ case s: String =>
213+ s
214+ case _ =>
215+ "no Prediction Found"
216+ }
217+ let newCounter = (searchForCounter + 1)
218+ if ((lastPrediction == prediction))
219+ then if (((predictionCounter + 1) == predictionMaxCounter))
220+ then {
221+ let newRating = calculateNewRating(clientRating, r_max, rateAdjustment, 1)
222+ let calculatedAmount = calculatePayout(newRating, r_max)
223+ let invokeAdjustRating = invoke(this, "adjustRatingsAndPayoutParticipants", [itemId, adressList, clientAdress, prediction], nil)
224+ if ((invokeAdjustRating != invokeAdjustRating))
225+ then throw("Strict value is not equal to itself.")
226+ 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), DeleteEntry(("updated_" + itemId)), StringEntry(("final_" + itemId), itemId), ScriptTransfer(Address(fromBase58String(clientAdress)), calculatedAmount, tokenId), IntegerEntry((clientAdress + "_rating"), newRating), StringEntry((itemId + "final_prediction"), prediction)]
227+ }
228+ 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)]
229+ else if ((newCounter >= maxCounter))
230+ 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), DeleteEntry(("updated_" + itemId)), StringEntry(("final_" + itemId), itemId)]
231+ else if (((predictionCounter - 1) == 0))
232+ 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)]
233+ 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)]
234+ }
235+ }
236+ else {
237+ let searchForNewItem = match getString(("new_" + itemId)) {
238+ case s: String =>
239+ s
240+ case _ =>
241+ "Item not Found"
242+ }
243+ if ((searchForNewItem == "Item not Found"))
244+ then throw("Item not found")
245+ 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)]
246+ }
247+ }
248+ }
249+ }
250+ }
251+ }
252+
253+
254+
255+@Callable(i)
256+func registerUser () = {
257+ let clientAdress = toString(i.caller)
258+ let searchForUser = match getInteger((clientAdress + "_rating")) {
259+ case s: Int =>
260+ s
261+ case _ =>
262+ -1
263+ }
264+ if ((searchForUser != -1))
265+ then throw("User already exists")
266+ else [IntegerEntry((clientAdress + "_rating"), defaultRating)]
267+ }
268+
269+
270+@Verifier(tx)
271+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
272+

github/deemru/w8io/c3f4982 
22.13 ms