tx · 8c53mAsXyDSqmzbMTiCavJyvcEaFXE9vikB87ZLetwMy

3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK:  -0.05000000 Waves

2022.01.24 23:05 [1893459] smart account 3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK > SELF 0.00000000 Waves

{ "type": 13, "id": "8c53mAsXyDSqmzbMTiCavJyvcEaFXE9vikB87ZLetwMy", "fee": 5000000, "feeAssetId": null, "timestamp": 1643054692714, "version": 2, "chainId": 84, "sender": "3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK", "senderPublicKey": "3itc77jAZTQAcaPCyYEe4KD7h18CvqZZ2JRynZHsuJ61", "proofs": [ "39PPrbeimHNFYFi7UWgZZBHcfVmdfse6Z78Gb6Q2W9H58ZFu5UXXq6ZdDEas4Pv5ATqEGD5t2TFG3A32nRuuYCq5" ], "script": "base64:AAIFAAAAAAAAACkIAhIFCgMICAgSABIAEgMKAQgSBAoCCAESBAoCCAgSBAoCCAESAwoBCAAAABAAAAAADGFkbWluQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzAgAAAAVhZG1pbgIAAAAAAAAAAAt0b3RhbFN1cHBseQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzAgAAAAt0b3RhbFN1cHBseQAAAAAAAAAAAAAAAAAOdm90aW5nRHVyYXRpb24JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzAgAAAA52b3RpbmdEdXJhdGlvbgIAAAAfTm8ga2V5IHZvdGluZ0R1cmF0aW9uIHdhcyBmb3VuZAAAAAAIY3Rva2VuSWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzAgAAAAd0b2tlbklkAgAAABlObyBrZXkgY1Rva2VuSWQgd2FzIGZvdW5kAAAAABFtYXhQbGF5ZXJzUGVyVGVhbQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMCAAAADnBsYXllcnNQZXJUZWFtAgAAAB9ObyBrZXkgcGxheWVyc1BlclRlYW0gd2FzIGZvdW5kAQAAAAdpc0FkbWluAAAAAQAAAA1jYWxsZXJBZGRyZXNzAwkAAAAAAAACBQAAAA1jYWxsZXJBZGRyZXNzCQACWQAAAAEFAAAADGFkbWluQWRkcmVzcwYHAQAAAAx3cml0ZUludGVnZXIAAAACAAAAA2tleQAAAAxpbnRlZ2VyVmFsdWUJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAADGludGVnZXJWYWx1ZQEAAAALd3JpdGVTdHJpbmcAAAACAAAAA2tleQAAAAtzdHJpbmdWYWx1ZQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAtzdHJpbmdWYWx1ZQEAAAAOY291bnRGcmVxdWVuY3kAAAACAAAACmhlbHBlckxpc3QAAAAKdm90aW5nTGlzdAoBAAAADWZvbGRGcmVxdWVuY3kAAAACAAAABWFjY3VtAAAA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AQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIJAQAAAAUkZjFfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAAAAAkAAAA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", "height": 1893459, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3LLMjxVBqvokT6UYPXchbALM9VLb6k6fXuHNT4vkAVip Next: 34dENkAprECPWSJK9qkPPYT3jnRe1rAXU1hSyDZBkepz Diff:
OldNewDifferences
77
88 let votingDuration = valueOrErrorMessage(getInteger(this, "votingDuration"), "No key votingDuration was found")
99
10-let ctokenId = valueOrErrorMessage(getString(this, "tokenId"), "No key dTokenId was found")
10+let ctokenId = valueOrErrorMessage(getString(this, "tokenId"), "No key cTokenId was found")
11+
12+let maxPlayersPerTeam = valueOrErrorMessage(getInteger(this, "playersPerTeam"), "No key playersPerTeam was found")
1113
1214 func isAdmin (callerAddress) = if ((callerAddress == fromBase58String(adminAddress)))
1315 then true
129131 then "B"
130132 else "Y"
131133 func foldOldEntry (accum,nextValue) = {
132- let $t045144537 = accum
133- let result = $t045144537._1
134- let j = $t045144537._2
134+ let $t046284651 = accum
135+ let result = $t046284651._1
136+ let j = $t046284651._2
135137 if ((j == oldValue))
136138 then $Tuple2((result :+ "0"), (j + 1))
137139 else $Tuple2((result :+ nextValue), (j + 1))
138140 }
139141
140142 func foldBoard (accum,nextValue) = {
141- let $t047144737 = accum
142- let result = $t047144737._1
143- let j = $t047144737._2
143+ let $t048284851 = accum
144+ let result = $t048284851._1
145+ let j = $t048284851._2
144146 if ((j == newField))
145147 then $Tuple2((result :+ teamTag), (j + 1))
146148 else $Tuple2((result :+ nextValue), (j + 1))
201203 }
202204
203205
206+func checkTeammembers (team,potentialMember) = if (!(containsElement(team, potentialMember)))
207+ then true
208+ else false
209+
210+
204211 @Callable(i)
205212 func setup (adminAddress,tokenName,tokenDescription) = if (!(isDefined(getString(this, "admin"))))
206213 then {
239246
240247 @Callable(i)
241248 func joinGame (gameId) = {
249+ let userAddress = toBase58String(i.caller.bytes)
242250 let teamBlue = getStringValue((gameId + "_teamBlue"))
243251 let teamYellow = getStringValue((gameId + "_teamYellow"))
244252 let teamBlueList = split(teamBlue, ",")
245253 let teamYellowList = if ((size(teamYellow) > 0))
246254 then split(teamYellow, ",")
247255 else nil
248- if ((5 > size(teamBlueList)))
249- then [writeString((gameId + "_teamBlue"), ((teamBlue + ",") + toBase58String(i.caller.bytes)))]
250- else if ((size(teamYellowList) == 4))
251- then [writeString((gameId + "_status"), "round_1,turn_teamBlue"), writeString((gameId + "_voting_1"), ""), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_teamYellow"), ((teamYellow + ",") + toBase58String(i.caller.bytes)))]
252- else if ((size(teamYellowList) == 0))
253- then [writeString((gameId + "_teamYellow"), toBase58String(i.caller.bytes))]
254- else if ((4 > size(teamYellowList)))
255- then [writeString((gameId + "_teamYellow"), ((teamYellow + ",") + toBase58String(i.caller.bytes)))]
256- else throw("Teams are full, cannot join.")
256+ if (if (checkTeammembers(teamBlueList, userAddress))
257+ then checkTeammembers(teamYellowList, userAddress)
258+ else false)
259+ then if ((maxPlayersPerTeam > size(teamBlueList)))
260+ then [writeString((gameId + "_teamBlue"), ((teamBlue + ",") + userAddress))]
261+ else if ((size(teamYellowList) == (maxPlayersPerTeam - 1)))
262+ then [writeString((gameId + "_status"), "round_1,turn_teamBlue"), writeString((gameId + "_voting_1"), ""), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_teamYellow"), ((teamYellow + ",") + userAddress))]
263+ else if ((size(teamYellowList) == 0))
264+ then [writeString((gameId + "_teamYellow"), userAddress)]
265+ else if (((maxPlayersPerTeam - 1) > size(teamYellowList)))
266+ then [writeString((gameId + "_teamYellow"), ((teamYellow + ",") + userAddress))]
267+ else throw("Teams are full, cannot join.")
268+ else throw("Player already in a Team!")
257269 }
258270
259271
327339 then votedField
328340 else storedMostVoted
329341 let alteredBoard = alterBoard(currentField, storedMostVoted, gameId, activeTeam)
330- if ((5 > size(currentVotingEntryList)))
342+ if ((maxPlayersPerTeam > size(currentVotingEntryList)))
331343 then [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeInteger((gameId + "_mostVoted"), currentField)]
332344 else [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), "")]
333345 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminAddress = valueOrElse(getString(this, "admin"), "")
55
66 let totalSupply = valueOrElse(getInteger(this, "totalSupply"), 0)
77
88 let votingDuration = valueOrErrorMessage(getInteger(this, "votingDuration"), "No key votingDuration was found")
99
10-let ctokenId = valueOrErrorMessage(getString(this, "tokenId"), "No key dTokenId was found")
10+let ctokenId = valueOrErrorMessage(getString(this, "tokenId"), "No key cTokenId was found")
11+
12+let maxPlayersPerTeam = valueOrErrorMessage(getInteger(this, "playersPerTeam"), "No key playersPerTeam was found")
1113
1214 func isAdmin (callerAddress) = if ((callerAddress == fromBase58String(adminAddress)))
1315 then true
1416 else false
1517
1618
1719 func writeInteger (key,integerValue) = IntegerEntry(key, integerValue)
1820
1921
2022 func writeString (key,stringValue) = StringEntry(key, stringValue)
2123
2224
2325 func countFrequency (helperList,votingList) = {
2426 func foldFrequency (accum,next) = {
2527 func countItems (acc,item) = if ((next == item))
2628 then (acc + 1)
2729 else acc
2830
2931 (accum :+ {
3032 let $l = votingList
3133 let $s = size($l)
3234 let $acc0 = 0
3335 func $f0_1 ($a,$i) = if (($i >= $s))
3436 then $a
3537 else countItems($a, $l[$i])
3638
3739 func $f0_2 ($a,$i) = if (($i >= $s))
3840 then $a
3941 else throw("List size exceeds 5")
4042
4143 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
4244 })
4345 }
4446
4547 let $l = helperList
4648 let $s = size($l)
4749 let $acc0 = nil
4850 func $f0_1 ($a,$i) = if (($i >= $s))
4951 then $a
5052 else foldFrequency($a, $l[$i])
5153
5254 func $f0_2 ($a,$i) = if (($i >= $s))
5355 then $a
5456 else throw("List size exceeds 5")
5557
5658 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
5759 }
5860
5961
6062 func initVotingHelperList (voteArray) = {
6163 func foldHelperList (accum,next) = if ((containsElement(accum, next) == false))
6264 then (accum :+ next)
6365 else accum
6466
6567 let $l = voteArray
6668 let $s = size($l)
6769 let $acc0 = nil
6870 func $f0_1 ($a,$i) = if (($i >= $s))
6971 then $a
7072 else foldHelperList($a, $l[$i])
7173
7274 func $f0_2 ($a,$i) = if (($i >= $s))
7375 then $a
7476 else throw("List size exceeds 5")
7577
7678 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
7779 }
7880
7981
8082 func isGreaterThen (potential,itemList) = {
8183 let listLength = (size(itemList) - 1)
8284 let currentGreatest = itemList[listLength]
8385 if ((potential > currentGreatest))
8486 then true
8587 else false
8688 }
8789
8890
8991 func findHighestVote (helperList,frequencies) = {
9092 func foldFrequencies (highestItemList,nextItem) = if ((size(highestItemList) == 0))
9193 then (highestItemList :+ nextItem)
9294 else if (isGreaterThen(nextItem, highestItemList))
9395 then (highestItemList :+ nextItem)
9496 else highestItemList
9597
9698 let highestVotes = {
9799 let $l = frequencies
98100 let $s = size($l)
99101 let $acc0 = nil
100102 func $f0_1 ($a,$i) = if (($i >= $s))
101103 then $a
102104 else foldFrequencies($a, $l[$i])
103105
104106 func $f0_2 ($a,$i) = if (($i >= $s))
105107 then $a
106108 else throw("List size exceeds 5")
107109
108110 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
109111 }
110112 let lastIdx = (size(highestVotes) - 1)
111113 let highestVote = highestVotes[lastIdx]
112114 let helperIdx = indexOf(frequencies, highestVote)
113115 match helperIdx {
114116 case t: Int =>
115117 helperList[t]
116118 case _ =>
117119 throw("Type does not match! Function: findHighestVote")
118120 }
119121 }
120122
121123
122124 func createBoard (board) = makeString(board, ",")
123125
124126
125127 func alterBoard (newField,oldValue,gameId,team) = {
126128 let currentBoard = getStringValue((gameId + "_board"))
127129 let boardList = split(currentBoard, ",")
128130 let teamTag = if ((team == "teamBlue"))
129131 then "B"
130132 else "Y"
131133 func foldOldEntry (accum,nextValue) = {
132- let $t045144537 = accum
133- let result = $t045144537._1
134- let j = $t045144537._2
134+ let $t046284651 = accum
135+ let result = $t046284651._1
136+ let j = $t046284651._2
135137 if ((j == oldValue))
136138 then $Tuple2((result :+ "0"), (j + 1))
137139 else $Tuple2((result :+ nextValue), (j + 1))
138140 }
139141
140142 func foldBoard (accum,nextValue) = {
141- let $t047144737 = accum
142- let result = $t047144737._1
143- let j = $t047144737._2
143+ let $t048284851 = accum
144+ let result = $t048284851._1
145+ let j = $t048284851._2
144146 if ((j == newField))
145147 then $Tuple2((result :+ teamTag), (j + 1))
146148 else $Tuple2((result :+ nextValue), (j + 1))
147149 }
148150
149151 let cleanedBoard = {
150152 let $l = boardList
151153 let $s = size($l)
152154 let $acc0 = $Tuple2(nil, 0)
153155 func $f0_1 ($a,$i) = if (($i >= $s))
154156 then $a
155157 else foldOldEntry($a, $l[$i])
156158
157159 func $f0_2 ($a,$i) = if (($i >= $s))
158160 then $a
159161 else throw("List size exceeds 42")
160162
161163 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42)
162164 }
163165 let newBoardList = {
164166 let $l = cleanedBoard._1
165167 let $s = size($l)
166168 let $acc0 = $Tuple2(nil, 0)
167169 func $f1_1 ($a,$i) = if (($i >= $s))
168170 then $a
169171 else foldBoard($a, $l[$i])
170172
171173 func $f1_2 ($a,$i) = if (($i >= $s))
172174 then $a
173175 else throw("List size exceeds 42")
174176
175177 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42)
176178 }
177179 createBoard(newBoardList._1)
178180 }
179181
180182
181183 func updateVotingResults (currentVotingEntryList) = {
182184 func foldVotings (accum,nextValue) = (accum :+ split(nextValue, "_")[1])
183185
184186 let votes = {
185187 let $l = currentVotingEntryList
186188 let $s = size($l)
187189 let $acc0 = nil
188190 func $f0_1 ($a,$i) = if (($i >= $s))
189191 then $a
190192 else foldVotings($a, $l[$i])
191193
192194 func $f0_2 ($a,$i) = if (($i >= $s))
193195 then $a
194196 else throw("List size exceeds 5")
195197
196198 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
197199 }
198200 let helperList = initVotingHelperList(votes)
199201 let frequencies = countFrequency(helperList, votes)
200202 findHighestVote(helperList, frequencies)
201203 }
202204
203205
206+func checkTeammembers (team,potentialMember) = if (!(containsElement(team, potentialMember)))
207+ then true
208+ else false
209+
210+
204211 @Callable(i)
205212 func setup (adminAddress,tokenName,tokenDescription) = if (!(isDefined(getString(this, "admin"))))
206213 then {
207214 let asset = Issue(tokenName, tokenDescription, 0, 8, true)
208215 let tokenId = calculateAssetId(asset)
209216 [asset, writeString("admin", adminAddress), writeInteger("votingDuration", 2), writeInteger("totalSupply", 0), writeString("tokenName", tokenName), writeString("tokenId", toBase58String(tokenId)), writeInteger("tokenDecimals", 8)]
210217 }
211218 else throw("Pool already setup!")
212219
213220
214221
215222 @Callable(i)
216223 func buyRound () = if ((size(i.payments) > 0))
217224 then {
218225 let amount = i.payments[0].amount
219226 if ((amount >= 1))
220227 then {
221228 let cTokenAmount = fraction(amount, 42, 1)
222229 let currentTotalSupply = (totalSupply + cTokenAmount)
223230 [writeInteger("totalSupply", currentTotalSupply), Reissue(fromBase58String(ctokenId), cTokenAmount, true), ScriptTransfer(i.caller, cTokenAmount, fromBase58String(ctokenId))]
224231 }
225232 else throw("Payment is to small!")
226233 }
227234 else throw("No payment attached!")
228235
229236
230237
231238 @Callable(i)
232239 func createGame () = {
233240 let board = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
234241 let gameId = toBase58String(i.transactionId)
235242 [writeString((gameId + "_board"), board), writeString((gameId + "_status"), "waiting for players"), writeString((gameId + "_teamBlue"), toString(i.caller)), writeString((gameId + "_teamYellow"), "")]
236243 }
237244
238245
239246
240247 @Callable(i)
241248 func joinGame (gameId) = {
249+ let userAddress = toBase58String(i.caller.bytes)
242250 let teamBlue = getStringValue((gameId + "_teamBlue"))
243251 let teamYellow = getStringValue((gameId + "_teamYellow"))
244252 let teamBlueList = split(teamBlue, ",")
245253 let teamYellowList = if ((size(teamYellow) > 0))
246254 then split(teamYellow, ",")
247255 else nil
248- if ((5 > size(teamBlueList)))
249- then [writeString((gameId + "_teamBlue"), ((teamBlue + ",") + toBase58String(i.caller.bytes)))]
250- else if ((size(teamYellowList) == 4))
251- then [writeString((gameId + "_status"), "round_1,turn_teamBlue"), writeString((gameId + "_voting_1"), ""), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_teamYellow"), ((teamYellow + ",") + toBase58String(i.caller.bytes)))]
252- else if ((size(teamYellowList) == 0))
253- then [writeString((gameId + "_teamYellow"), toBase58String(i.caller.bytes))]
254- else if ((4 > size(teamYellowList)))
255- then [writeString((gameId + "_teamYellow"), ((teamYellow + ",") + toBase58String(i.caller.bytes)))]
256- else throw("Teams are full, cannot join.")
256+ if (if (checkTeammembers(teamBlueList, userAddress))
257+ then checkTeammembers(teamYellowList, userAddress)
258+ else false)
259+ then if ((maxPlayersPerTeam > size(teamBlueList)))
260+ then [writeString((gameId + "_teamBlue"), ((teamBlue + ",") + userAddress))]
261+ else if ((size(teamYellowList) == (maxPlayersPerTeam - 1)))
262+ then [writeString((gameId + "_status"), "round_1,turn_teamBlue"), writeString((gameId + "_voting_1"), ""), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_teamYellow"), ((teamYellow + ",") + userAddress))]
263+ else if ((size(teamYellowList) == 0))
264+ then [writeString((gameId + "_teamYellow"), userAddress)]
265+ else if (((maxPlayersPerTeam - 1) > size(teamYellowList)))
266+ then [writeString((gameId + "_teamYellow"), ((teamYellow + ",") + userAddress))]
267+ else throw("Teams are full, cannot join.")
268+ else throw("Player already in a Team!")
257269 }
258270
259271
260272
261273 @Callable(i)
262274 func vote (gameId,voting) = {
263275 let status = valueOrErrorMessage(getStringValue((gameId + "_status")), "No status entry found under gameId!")
264276 let round = parseIntValue(drop(split(status, ",")[0], 6))
265277 let activeTeam = drop(split(status, ",")[1], 5)
266278 let storedHeight = valueOrErrorMessage(getInteger((gameId + "_storedHeight")), (("No status entry found under " + gameId) + "_storedHeight!"))
267279 let storedMostVoted = valueOrErrorMessage(getIntegerValue((gameId + "_mostVoted")), (("No status entry found under " + gameId) + "_mostVoted!"))
268280 let votingEntry = valueOrErrorMessage(getStringValue(((gameId + "_voting_") + toString(round))), "No votes found for this game id!")
269281 let votingEntryList = if ((size(votingEntry) > 0))
270282 then split(votingEntry, ",")
271283 else nil
272284 let members = if ((activeTeam == "teamBlue"))
273285 then {
274286 let teamB = getStringValue((gameId + "_teamBlue"))
275287 let teamBList = split(teamB, ",")
276288 teamBList
277289 }
278290 else {
279291 let teamY = getStringValue((gameId + "_teamYellow"))
280292 let teamYList = split(teamY, ",")
281293 teamYList
282294 }
283295 let unactiveTeam = if ((activeTeam == "teamBlue"))
284296 then "teamYellow"
285297 else "teamBlue"
286298 let membersUnactive = if ((unactiveTeam == "teamBlue"))
287299 then {
288300 let teamB = getStringValue((gameId + "_teamBlue"))
289301 let teamBList = split(teamB, ",")
290302 teamBList
291303 }
292304 else {
293305 let teamY = getStringValue((gameId + "_teamYellow"))
294306 let teamYList = split(teamY, ",")
295307 teamYList
296308 }
297309 let callerAddress = toBase58String(i.caller.bytes)
298310 if ((size(i.payments) > 0))
299311 then if ((fromBase58String(ctokenId) == i.payments[0].assetId))
300312 then if ((i.payments[0].amount == 100000000))
301313 then if ((storedHeight >= height))
302314 then if (containsElement(members, callerAddress))
303315 then {
304316 func foldVoters (accum,nextValue) = (accum :+ split(nextValue, "_")[0])
305317
306318 let voters = {
307319 let $l = votingEntryList
308320 let $s = size($l)
309321 let $acc0 = nil
310322 func $f0_1 ($a,$i) = if (($i >= $s))
311323 then $a
312324 else foldVoters($a, $l[$i])
313325
314326 func $f0_2 ($a,$i) = if (($i >= $s))
315327 then $a
316328 else throw("List size exceeds 5")
317329
318330 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
319331 }
320332 if ((containsElement(voters, callerAddress) == false))
321333 then {
322334 let newVote = ((callerAddress + "_") + toString(voting))
323335 let currentVotingEntryList = (votingEntryList :+ newVote)
324336 let currentVotingEntry = makeString(currentVotingEntryList, ",")
325337 let votedField = parseIntValue(updateVotingResults(currentVotingEntryList))
326338 let currentField = if ((votedField != storedMostVoted))
327339 then votedField
328340 else storedMostVoted
329341 let alteredBoard = alterBoard(currentField, storedMostVoted, gameId, activeTeam)
330- if ((5 > size(currentVotingEntryList)))
342+ if ((maxPlayersPerTeam > size(currentVotingEntryList)))
331343 then [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeInteger((gameId + "_mostVoted"), currentField)]
332344 else [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), "")]
333345 }
334346 else throw("Caller already voted!")
335347 }
336348 else throw((("Caller is not in " + activeTeam) + "!"))
337349 else if (containsElement(membersUnactive, callerAddress))
338350 then {
339351 let newVote = ((callerAddress + "_") + toString(voting))
340352 let currentVotingEntryList = [newVote]
341353 let votedField = parseIntValue(updateVotingResults(currentVotingEntryList))
342354 let alteredBoard = alterBoard(votedField, -1, gameId, activeTeam)
343355 [writeString((gameId + "_board"), alteredBoard), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), newVote), writeInteger((gameId + "_mostVoted"), votedField)]
344356 }
345357 else throw((("Caller is not in " + unactiveTeam) + "!"))
346358 else throw("Amount has to be 1!")
347359 else throw("Payment has to be a Connect four Token!")
348360 else throw("No Payment attached!")
349361 }
350362
351363
352364
353365 @Callable(i)
354366 func updateStringEntry (key,stringValue) = if (isAdmin(i.caller.bytes))
355367 then [writeString(key, stringValue)]
356368 else throw("Address does not match with admin address!")
357369
358370
359371
360372 @Callable(i)
361373 func updateIntegerEntry (key,integerValue) = if (isAdmin(i.caller.bytes))
362374 then [writeInteger(key, integerValue)]
363375 else throw("Address does not match with admin address!")
364376
365377
366378
367379 @Callable(i)
368380 func deleteStorageEntry (key) = if (isAdmin(i.caller.bytes))
369381 then [DeleteEntry(key)]
370382 else throw("Address does not match with admin address!")
371383
372384
373385 @Verifier(tx)
374386 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
375387

github/deemru/w8io/169f3d6 
52.90 ms