tx · 2n5VuZqakN4TBeUwJS38M9L5n1yekRuvYWN1FceX7nft

3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK:  -0.05000000 Waves

2022.01.27 17:29 [1897473] smart account 3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK > SELF 0.00000000 Waves

{ "type": 13, "id": "2n5VuZqakN4TBeUwJS38M9L5n1yekRuvYWN1FceX7nft", "fee": 5000000, "feeAssetId": null, "timestamp": 1643293778904, "version": 2, "chainId": 84, "sender": "3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK", "senderPublicKey": "3itc77jAZTQAcaPCyYEe4KD7h18CvqZZ2JRynZHsuJ61", "proofs": [ "dPGBbbjXCzfsPTj76wGtZUJXVAZ5aTEjT4oewvAD2vb6Q6ENLc2BuH8zFgonhgvQxeYkT19QfD3DFNYiDctLDi1" ], "script": "base64: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AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQMJAAAAAAAAAgkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABnZvdGVycwUAAAANY2FsbGVyQWRkcmVzcwcEAAAAB25ld1ZvdGUJAAEsAAAAAgkAASwAAAACBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAABnZvdGluZwQAAAAWY3VycmVudFZvdGluZ0VudHJ5TGlzdAkABE0AAAACBQAAAA92b3RpbmdFbnRyeUxpc3QFAAAAB25ld1ZvdGUEAAAAEmN1cnJlbnRWb3RpbmdFbnRyeQkABLkAAAACBQAAABZjdXJyZW50Vm90aW5nRW50cnlMaXN0AgAAAAEsBAAAAAp2b3RlZEZpZWxkCQAD/AAAAAQJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADmhhbmRsZXJBZGRyZXNzAgAAABN1cGRhdGVWb3RpbmdSZXN1bHRzCQAETAAAAAIFAAAAFmN1cnJlbnRWb3RpbmdFbnRyeUxpc3QFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAp2b3RlZEZpZWxkBQAAAAp2b3RlZEZpZWxkBAAAAAckbWF0Y2gwBQAAAAp2b3RlZEZpZWxkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAADXZvdGVkRmllbGRTdHIFAAAAByRtYXRjaDAEAAAABnZGaWVsZAkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAA12b3RlZEZpZWxkU3RyBAAAAAxjdXJyZW50RmllbGQDCQEAAAACIT0AAAACBQAAAAZ2RmllbGQFAAAAD3N0b3JlZE1vc3RWb3RlZAUAAAAGdkZpZWxkBQAAAA9zdG9yZWRNb3N0Vm90ZWQEAAAADGFsdGVyZWRCb2FyZAkAA/wAAAAECQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA5oYW5kbGVyQWRkcmVzcwIAAAAKYWx0ZXJCb2FyZAkABEwAAAACBQAAAAxjdXJyZW50RmllbGQJAARMAAAAAgUAAAAPc3RvcmVkTW9zdFZvdGVkCQAETAAAAAIFAAAABmdhbWVJZAkABEwAAAACBQAAAAphY3RpdmVUZWFtBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAMYWx0ZXJlZEJvYXJkBQAAAAxhbHRlcmVkQm9hcmQEAAAAByRtYXRjaDEFAAAADGFsdGVyZWRCb2FyZAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAAGU3RyaW5nBAAAAA9hbHRlcmVkQm9hcmRTdHIFAAAAByRtYXRjaDEEAAAAD3BvdGVudGlhbFdpbm5lcgkAA/wAAAAECQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABBpbnNwZWN0b3JBZGRyZXNzAgAAAAtjaGVja0ZvcldpbgkABEwAAAACBQAAAA9hbHRlcmVkQm9hcmRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAA9wb3RlbnRpYWxXaW5uZXIFAAAAD3BvdGVudGlhbFdpbm5lcgQAAAAHJG1hdGNoMgUAAAAPcG90ZW50aWFsV2lubmVyAwkAAAEAAAACBQAAAAckbWF0Y2gyAgAAAAZTdHJpbmcEAAAAEnBvdGVudGlhbFdpbm5lclN0cgUAAAAHJG1hdGNoMgMJAABmAAAAAgUAAAARbWF4UGxheWVyc1BlclRlYW0JAAGQAAAAAQUAAAAWY3VycmVudFZvdGluZ0VudHJ5TGlzdAkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGZ2FtZUlkAgAAAAhfdm90aW5nXwkAAaQAAAABBQAAAAVyb3VuZAUAAAASY3VycmVudFZvdGluZ0VudHJ5CQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIJAAEsAAAAAgUAAAAGZ2FtZUlkAgAAAAZfYm9hcmQFAAAAD2FsdGVyZWRCb2FyZFN0cgkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACCQABLAAAAAIFAAAABmdhbWVJZAIAAAAHX3dpbm5lcgUAAAAScG90ZW50aWFsV2lubmVyU3RyCQAETAAAAAIJAQAAAAx3cml0ZUludGVnZXIAAAACCQABLAAAAAIFAAAABmdhbWVJZAIAAAAKX21vc3RWb3RlZAUAAAAMY3VycmVudEZpZWxkBQAAAANuaWwJAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgkAASwAAAACCQABLAAAAAIFAAAABmdhbWVJZAIAAAAIX3ZvdGluZ18JAAGkAAAAAQUAAAAFcm91bmQFAAAAEmN1cnJlbnRWb3RpbmdFbnRyeQkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACCQABLAAAAAIFAAAABmdhbWVJZAIAAAAGX2JvYXJkBQAAAA9hbHRlcmVkQm9hcmRTdHIJAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgkAASwAAAACBQAAAAZnYW1lSWQCAAAAB193aW5uZXIFAAAAEnBvdGVudGlhbFdpbm5lclN0cgkABEwAAAACCQEAAAAMd3JpdGVJbnRlZ2VyAAAAAgkAASwAAAACBQAAAAZnYW1lSWQCAAAACl9tb3N0Vm90ZWQA//////////8JAARMAAAAAgkBAAAADHdyaXRlSW50ZWdlcgAAAAIJAAEsAAAAAgUAAAAGZ2FtZUlkAgAAAA1fc3RvcmVkSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAUAAAAOdm90aW5nRHVyYXRpb24JAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgkAASwAAAACBQAAAAZnYW1lSWQCAAAAB19zdGF0dXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABnJvdW5kXwkAAaQAAAABCQAAZAAAAAIFAAAABXJvdW5kAAAAAAAAAAABAgAAAAYsdHVybl8FAAAADHVuYWN0aXZlVGVhbQkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGZ2FtZUlkAgAAAAhfdm90aW5nXwkAAaQAAAABCQAAZAAAAAIFAAAABXJvdW5kAAAAAAAAAAABAgAAAAAFAAAAA25pbAkAAAIAAAABAgAAACBwb3RlbnRpYWxXaW5uZXIgaXMgbm90IGEgU3RyaW5nIQkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAdYWx0ZXJlZEJvYXJkIGlzIG5vdCBhIFN0cmluZyEJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAG1ZvdGVkRmllbGQgaXMgbm90IGEgU3RyaW5nIQkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAVQ2FsbGVyIGFscmVhZHkgdm90ZWQhCQAAAgAAAAECAAAAFkdhbWUgYWxyZWFkeSBmaW5pc2hlZCEJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEUNhbGxlciBpcyBub3QgaW4gBQAAAAphY3RpdmVUZWFtAgAAAAEhAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAAD21lbWJlcnNVbmFjdGl2ZQUAAAANY2FsbGVyQWRkcmVzcwQAAAAJc3RvcmVkV2luCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABCQABLAAAAAIFAAAABmdhbWVJZAIAAAAHX3dpbm5lcgMJAAAAAAAAAgUAAAAJc3RvcmVkV2luAgAAAAAEAAAAB25ld1ZvdGUJAAEsAAAAAgkAASwAAAACBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAABnZvdGluZwQAAAAWY3VycmVudFZvdGluZ0VudHJ5TGlzdAkABEwAAAACBQAAAAduZXdWb3RlBQAAAANuaWwEAAAAEHZvdGVkRmllbGRDaGFuZ2UJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAOaGFuZGxlckFkZHJlc3MCAAAAE3VwZGF0ZVZvdGluZ1Jlc3VsdHMJAARMAAAAAgUAAAAWY3VycmVudFZvdGluZ0VudHJ5TGlzdAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEHZvdGVkRmllbGRDaGFuZ2UFAAAAEHZvdGVkRmllbGRDaGFuZ2UEAAAAByRtYXRjaDAFAAAAEHZvdGVkRmllbGRDaGFuZ2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAANdm90ZWRGaWVsZFN0cgUAAAAHJG1hdGNoMAQAAAAGdkZpZWxkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXZvdGVkRmllbGRTdHIEAAAAEmFsdGVyZWRCb2FyZENoYW5nZQkAA/wAAAAECQEAAAARQGV4dHJOYXRpdmUo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", "height": 1897473, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dj8VQb1NJ76oYd7aN46QaWDk1coSCXzY3rgSJb1V2TnS Next: EeSfrLmnCMgMiudummJiQo7mjfHnvXtT5cXnrD7dqAHr Diff:
OldNewDifferences
44 let adminAddress = valueOrElse(getString(this, "admin"), "")
55
66 let inspectorAddress = valueOrErrorMessage(getString(this, "inspector"), "No key inspector was found")
7+
8+let handlerAddress = valueOrErrorMessage(getString(this, "votingHandler"), "No key votingHandler was found")
79
810 let totalSupply = valueOrElse(getInteger(this, "totalSupply"), 0)
911
2224
2325
2426 func writeString (key,stringValue) = StringEntry(key, stringValue)
25-
26-
27-func countFrequency (helperList,votingList) = {
28- func foldFrequency (accum,next) = {
29- func countItems (acc,item) = if ((next == item))
30- then (acc + 1)
31- else acc
32-
33- (accum :+ {
34- let $l = votingList
35- let $s = size($l)
36- let $acc0 = 0
37- func $f0_1 ($a,$i) = if (($i >= $s))
38- then $a
39- else countItems($a, $l[$i])
40-
41- func $f0_2 ($a,$i) = if (($i >= $s))
42- then $a
43- else throw("List size exceeds 5")
44-
45- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
46- })
47- }
48-
49- let $l = helperList
50- let $s = size($l)
51- let $acc0 = nil
52- func $f0_1 ($a,$i) = if (($i >= $s))
53- then $a
54- else foldFrequency($a, $l[$i])
55-
56- func $f0_2 ($a,$i) = if (($i >= $s))
57- then $a
58- else throw("List size exceeds 5")
59-
60- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
61- }
62-
63-
64-func initVotingHelperList (voteArray) = {
65- func foldHelperList (accum,next) = if ((containsElement(accum, next) == false))
66- then (accum :+ next)
67- else accum
68-
69- let $l = voteArray
70- let $s = size($l)
71- let $acc0 = nil
72- func $f0_1 ($a,$i) = if (($i >= $s))
73- then $a
74- else foldHelperList($a, $l[$i])
75-
76- func $f0_2 ($a,$i) = if (($i >= $s))
77- then $a
78- else throw("List size exceeds 5")
79-
80- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
81- }
82-
83-
84-func isGreaterThen (potential,itemList) = {
85- let listLength = (size(itemList) - 1)
86- let currentGreatest = itemList[listLength]
87- if ((potential > currentGreatest))
88- then true
89- else false
90- }
91-
92-
93-func findHighestVote (helperList,frequencies) = {
94- func foldFrequencies (highestItemList,nextItem) = if ((size(highestItemList) == 0))
95- then (highestItemList :+ nextItem)
96- else if (isGreaterThen(nextItem, highestItemList))
97- then (highestItemList :+ nextItem)
98- else highestItemList
99-
100- let highestVotes = {
101- let $l = frequencies
102- let $s = size($l)
103- let $acc0 = nil
104- func $f0_1 ($a,$i) = if (($i >= $s))
105- then $a
106- else foldFrequencies($a, $l[$i])
107-
108- func $f0_2 ($a,$i) = if (($i >= $s))
109- then $a
110- else throw("List size exceeds 5")
111-
112- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
113- }
114- let lastIdx = (size(highestVotes) - 1)
115- let highestVote = highestVotes[lastIdx]
116- let helperIdx = indexOf(frequencies, highestVote)
117- match helperIdx {
118- case t: Int =>
119-helperList[t]
120- case _ =>
121- throw("Type does not match! Function: findHighestVote")
122- }
123- }
124-
125-
126-func createBoard (board) = makeString(board, ",")
127-
128-
129-func alterBoard (newField,oldValue,gameId,team) = {
130- let currentBoard = getStringValue((gameId + "_board"))
131- let boardList = split(currentBoard, ",")
132- let teamTag = if ((team == "teamBlue"))
133- then "B"
134- else "Y"
135- func foldOldEntry (accum,nextValue) = {
136- let $t047314754 = accum
137- let result = $t047314754._1
138- let j = $t047314754._2
139- if ((j == oldValue))
140- then $Tuple2((result :+ "0"), (j + 1))
141- else $Tuple2((result :+ nextValue), (j + 1))
142- }
143-
144- func foldBoard (accum,nextValue) = {
145- let $t049314954 = accum
146- let result = $t049314954._1
147- let j = $t049314954._2
148- if ((j == newField))
149- then $Tuple2((result :+ teamTag), (j + 1))
150- else $Tuple2((result :+ nextValue), (j + 1))
151- }
152-
153- let cleanedBoard = {
154- let $l = boardList
155- let $s = size($l)
156- let $acc0 = $Tuple2(nil, 0)
157- func $f0_1 ($a,$i) = if (($i >= $s))
158- then $a
159- else foldOldEntry($a, $l[$i])
160-
161- func $f0_2 ($a,$i) = if (($i >= $s))
162- then $a
163- else throw("List size exceeds 42")
164-
165- $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)
166- }
167- let newBoardList = {
168- let $l = cleanedBoard._1
169- let $s = size($l)
170- let $acc0 = $Tuple2(nil, 0)
171- func $f1_1 ($a,$i) = if (($i >= $s))
172- then $a
173- else foldBoard($a, $l[$i])
174-
175- func $f1_2 ($a,$i) = if (($i >= $s))
176- then $a
177- else throw("List size exceeds 42")
178-
179- $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)
180- }
181- createBoard(newBoardList._1)
182- }
183-
184-
185-func updateVotingResults (currentVotingEntryList) = {
186- func foldVotings (accum,nextValue) = (accum :+ split(nextValue, "_")[1])
187-
188- let votes = {
189- let $l = currentVotingEntryList
190- let $s = size($l)
191- let $acc0 = nil
192- func $f0_1 ($a,$i) = if (($i >= $s))
193- then $a
194- else foldVotings($a, $l[$i])
195-
196- func $f0_2 ($a,$i) = if (($i >= $s))
197- then $a
198- else throw("List size exceeds 5")
199-
200- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
201- }
202- let helperList = initVotingHelperList(votes)
203- let frequencies = countFrequency(helperList, votes)
204- findHighestVote(helperList, frequencies)
205- }
20627
20728
20829 func checkTeammembers (team,potentialMember) = if (!(containsElement(team, potentialMember)))
280101 let storedHeight = valueOrErrorMessage(getInteger((gameId + "_storedHeight")), (("No status entry found under " + gameId) + "_storedHeight!"))
281102 let storedMostVoted = valueOrErrorMessage(getIntegerValue((gameId + "_mostVoted")), (("No status entry found under " + gameId) + "_mostVoted!"))
282103 let votingEntry = valueOrErrorMessage(getStringValue(((gameId + "_voting_") + toString(round))), "No votes found for this game id!")
104+ let callerAddress = toBase58String(i.caller.bytes)
283105 let votingEntryList = if ((size(votingEntry) > 0))
284106 then split(votingEntry, ",")
285107 else nil
308130 let teamYList = split(teamY, ",")
309131 teamYList
310132 }
311- let callerAddress = toBase58String(i.caller.bytes)
312133 if ((size(i.payments) > 0))
313134 then if ((fromBase58String(ctokenId) == i.payments[0].assetId))
314135 then if ((i.payments[0].amount == 100000000))
339160 let newVote = ((callerAddress + "_") + toString(voting))
340161 let currentVotingEntryList = (votingEntryList :+ newVote)
341162 let currentVotingEntry = makeString(currentVotingEntryList, ",")
342- let votedField = parseIntValue(updateVotingResults(currentVotingEntryList))
343- let currentField = if ((votedField != storedMostVoted))
344- then votedField
345- else storedMostVoted
346- let alteredBoard = alterBoard(currentField, storedMostVoted, gameId, activeTeam)
347- let potentialWinner = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoard], nil)
348- if ((potentialWinner == potentialWinner))
349- then match potentialWinner {
350- case t: String =>
351- if ((maxPlayersPerTeam > size(currentVotingEntryList)))
352- then [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeString((gameId + "_winner"), t), writeInteger((gameId + "_mostVoted"), currentField)]
353- else [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeString((gameId + "_winner"), t), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), "")]
163+ let votedField = invoke(addressFromStringValue(handlerAddress), "updateVotingResults", [currentVotingEntryList], nil)
164+ if ((votedField == votedField))
165+ then match votedField {
166+ case votedFieldStr: String =>
167+ let vField = parseIntValue(votedFieldStr)
168+ let currentField = if ((vField != storedMostVoted))
169+ then vField
170+ else storedMostVoted
171+ let alteredBoard = invoke(addressFromStringValue(handlerAddress), "alterBoard", [currentField, storedMostVoted, gameId, activeTeam], nil)
172+ if ((alteredBoard == alteredBoard))
173+ then match alteredBoard {
174+ case alteredBoardStr: String =>
175+ let potentialWinner = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoardStr], nil)
176+ if ((potentialWinner == potentialWinner))
177+ then match potentialWinner {
178+ case potentialWinnerStr: String =>
179+ if ((maxPlayersPerTeam > size(currentVotingEntryList)))
180+ then [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoardStr), writeString((gameId + "_winner"), potentialWinnerStr), writeInteger((gameId + "_mostVoted"), currentField)]
181+ else [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoardStr), writeString((gameId + "_winner"), potentialWinnerStr), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), "")]
182+ case _ =>
183+ throw("potentialWinner is not a String!")
184+ }
185+ else throw("Strict value is not equal to itself.")
186+ case _ =>
187+ throw("alteredBoard is not a String!")
188+ }
189+ else throw("Strict value is not equal to itself.")
354190 case _ =>
355- throw("Invokation result type is not a String!")
191+ throw("VotedField is not a String!")
356192 }
357193 else throw("Strict value is not equal to itself.")
358194 }
368204 then {
369205 let newVote = ((callerAddress + "_") + toString(voting))
370206 let currentVotingEntryList = [newVote]
371- let votedField = parseIntValue(updateVotingResults(currentVotingEntryList))
372- let alteredBoard = alterBoard(votedField, -1, gameId, unactiveTeam)
373- let potentialWin = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoard], nil)
374- if ((potentialWin == potentialWin))
375- then match potentialWin {
376- case t: String =>
377-[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), writeString((gameId + "_winner"), t), writeInteger((gameId + "_mostVoted"), votedField)]
207+ let votedFieldChange = invoke(addressFromStringValue(handlerAddress), "updateVotingResults", [currentVotingEntryList], nil)
208+ if ((votedFieldChange == votedFieldChange))
209+ then match votedFieldChange {
210+ case votedFieldStr: String =>
211+ let vField = parseIntValue(votedFieldStr)
212+ let alteredBoardChange = invoke(addressFromStringValue(handlerAddress), "alterBoard", [vField, -1, gameId, unactiveTeam], nil)
213+ if ((alteredBoardChange == alteredBoardChange))
214+ then match alteredBoardChange {
215+ case alteredBoardStr: String =>
216+ let potentialWin = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoardStr], nil)
217+ if ((potentialWin == potentialWin))
218+ then match potentialWin {
219+ case potentialWinStr: String =>
220+[writeString((gameId + "_board"), alteredBoardStr), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), newVote), writeString((gameId + "_winner"), potentialWinStr), writeInteger((gameId + "_mostVoted"), vField)]
221+ case _ =>
222+ throw("Invokation result type is not a String!")
223+ }
224+ else throw("Strict value is not equal to itself.")
225+ case _ =>
226+ throw("alteredBoardChange is not a String!")
227+ }
228+ else throw("Strict value is not equal to itself.")
378229 case _ =>
379- throw("Invokation result type is not a String!")
230+ throw("votedFieldChange is not a String!")
380231 }
381232 else throw("Strict value is not equal to itself.")
382233 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminAddress = valueOrElse(getString(this, "admin"), "")
55
66 let inspectorAddress = valueOrErrorMessage(getString(this, "inspector"), "No key inspector was found")
7+
8+let handlerAddress = valueOrErrorMessage(getString(this, "votingHandler"), "No key votingHandler was found")
79
810 let totalSupply = valueOrElse(getInteger(this, "totalSupply"), 0)
911
1012 let votingDuration = valueOrErrorMessage(getInteger(this, "votingDuration"), "No key votingDuration was found")
1113
1214 let ctokenId = valueOrErrorMessage(getString(this, "tokenId"), "No key cTokenId was found")
1315
1416 let maxPlayersPerTeam = valueOrErrorMessage(getInteger(this, "playersPerTeam"), "No key playersPerTeam was found")
1517
1618 func isAdmin (callerAddress) = if ((callerAddress == fromBase58String(adminAddress)))
1719 then true
1820 else false
1921
2022
2123 func writeInteger (key,integerValue) = IntegerEntry(key, integerValue)
2224
2325
2426 func writeString (key,stringValue) = StringEntry(key, stringValue)
25-
26-
27-func countFrequency (helperList,votingList) = {
28- func foldFrequency (accum,next) = {
29- func countItems (acc,item) = if ((next == item))
30- then (acc + 1)
31- else acc
32-
33- (accum :+ {
34- let $l = votingList
35- let $s = size($l)
36- let $acc0 = 0
37- func $f0_1 ($a,$i) = if (($i >= $s))
38- then $a
39- else countItems($a, $l[$i])
40-
41- func $f0_2 ($a,$i) = if (($i >= $s))
42- then $a
43- else throw("List size exceeds 5")
44-
45- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
46- })
47- }
48-
49- let $l = helperList
50- let $s = size($l)
51- let $acc0 = nil
52- func $f0_1 ($a,$i) = if (($i >= $s))
53- then $a
54- else foldFrequency($a, $l[$i])
55-
56- func $f0_2 ($a,$i) = if (($i >= $s))
57- then $a
58- else throw("List size exceeds 5")
59-
60- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
61- }
62-
63-
64-func initVotingHelperList (voteArray) = {
65- func foldHelperList (accum,next) = if ((containsElement(accum, next) == false))
66- then (accum :+ next)
67- else accum
68-
69- let $l = voteArray
70- let $s = size($l)
71- let $acc0 = nil
72- func $f0_1 ($a,$i) = if (($i >= $s))
73- then $a
74- else foldHelperList($a, $l[$i])
75-
76- func $f0_2 ($a,$i) = if (($i >= $s))
77- then $a
78- else throw("List size exceeds 5")
79-
80- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
81- }
82-
83-
84-func isGreaterThen (potential,itemList) = {
85- let listLength = (size(itemList) - 1)
86- let currentGreatest = itemList[listLength]
87- if ((potential > currentGreatest))
88- then true
89- else false
90- }
91-
92-
93-func findHighestVote (helperList,frequencies) = {
94- func foldFrequencies (highestItemList,nextItem) = if ((size(highestItemList) == 0))
95- then (highestItemList :+ nextItem)
96- else if (isGreaterThen(nextItem, highestItemList))
97- then (highestItemList :+ nextItem)
98- else highestItemList
99-
100- let highestVotes = {
101- let $l = frequencies
102- let $s = size($l)
103- let $acc0 = nil
104- func $f0_1 ($a,$i) = if (($i >= $s))
105- then $a
106- else foldFrequencies($a, $l[$i])
107-
108- func $f0_2 ($a,$i) = if (($i >= $s))
109- then $a
110- else throw("List size exceeds 5")
111-
112- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
113- }
114- let lastIdx = (size(highestVotes) - 1)
115- let highestVote = highestVotes[lastIdx]
116- let helperIdx = indexOf(frequencies, highestVote)
117- match helperIdx {
118- case t: Int =>
119-helperList[t]
120- case _ =>
121- throw("Type does not match! Function: findHighestVote")
122- }
123- }
124-
125-
126-func createBoard (board) = makeString(board, ",")
127-
128-
129-func alterBoard (newField,oldValue,gameId,team) = {
130- let currentBoard = getStringValue((gameId + "_board"))
131- let boardList = split(currentBoard, ",")
132- let teamTag = if ((team == "teamBlue"))
133- then "B"
134- else "Y"
135- func foldOldEntry (accum,nextValue) = {
136- let $t047314754 = accum
137- let result = $t047314754._1
138- let j = $t047314754._2
139- if ((j == oldValue))
140- then $Tuple2((result :+ "0"), (j + 1))
141- else $Tuple2((result :+ nextValue), (j + 1))
142- }
143-
144- func foldBoard (accum,nextValue) = {
145- let $t049314954 = accum
146- let result = $t049314954._1
147- let j = $t049314954._2
148- if ((j == newField))
149- then $Tuple2((result :+ teamTag), (j + 1))
150- else $Tuple2((result :+ nextValue), (j + 1))
151- }
152-
153- let cleanedBoard = {
154- let $l = boardList
155- let $s = size($l)
156- let $acc0 = $Tuple2(nil, 0)
157- func $f0_1 ($a,$i) = if (($i >= $s))
158- then $a
159- else foldOldEntry($a, $l[$i])
160-
161- func $f0_2 ($a,$i) = if (($i >= $s))
162- then $a
163- else throw("List size exceeds 42")
164-
165- $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)
166- }
167- let newBoardList = {
168- let $l = cleanedBoard._1
169- let $s = size($l)
170- let $acc0 = $Tuple2(nil, 0)
171- func $f1_1 ($a,$i) = if (($i >= $s))
172- then $a
173- else foldBoard($a, $l[$i])
174-
175- func $f1_2 ($a,$i) = if (($i >= $s))
176- then $a
177- else throw("List size exceeds 42")
178-
179- $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)
180- }
181- createBoard(newBoardList._1)
182- }
183-
184-
185-func updateVotingResults (currentVotingEntryList) = {
186- func foldVotings (accum,nextValue) = (accum :+ split(nextValue, "_")[1])
187-
188- let votes = {
189- let $l = currentVotingEntryList
190- let $s = size($l)
191- let $acc0 = nil
192- func $f0_1 ($a,$i) = if (($i >= $s))
193- then $a
194- else foldVotings($a, $l[$i])
195-
196- func $f0_2 ($a,$i) = if (($i >= $s))
197- then $a
198- else throw("List size exceeds 5")
199-
200- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
201- }
202- let helperList = initVotingHelperList(votes)
203- let frequencies = countFrequency(helperList, votes)
204- findHighestVote(helperList, frequencies)
205- }
20627
20728
20829 func checkTeammembers (team,potentialMember) = if (!(containsElement(team, potentialMember)))
20930 then true
21031 else false
21132
21233
21334 @Callable(i)
21435 func setup (inspectorAddress,tokenName,tokenDescription) = if (!(isDefined(getString(this, "admin"))))
21536 then {
21637 let asset = Issue(tokenName, tokenDescription, 0, 8, true)
21738 let tokenId = calculateAssetId(asset)
21839 [asset, writeString("admin", toBase58String(i.caller.bytes)), writeString("inspector", inspectorAddress), writeInteger("votingDuration", 2), writeInteger("totalSupply", 0), writeString("tokenName", tokenName), writeString("tokenId", toBase58String(tokenId)), writeInteger("tokenDecimals", 8)]
21940 }
22041 else throw("DApp already setup!")
22142
22243
22344
22445 @Callable(i)
22546 func buyRound () = if ((size(i.payments) > 0))
22647 then {
22748 let amount = i.payments[0].amount
22849 if ((amount >= 1))
22950 then {
23051 let cTokenAmount = fraction(amount, 42, 1)
23152 let currentTotalSupply = (totalSupply + cTokenAmount)
23253 [writeInteger("totalSupply", currentTotalSupply), Reissue(fromBase58String(ctokenId), cTokenAmount, true), ScriptTransfer(i.caller, cTokenAmount, fromBase58String(ctokenId))]
23354 }
23455 else throw("Payment is to small!")
23556 }
23657 else throw("No payment attached!")
23758
23859
23960
24061 @Callable(i)
24162 func createGame () = {
24263 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"
24364 let gameId = toBase58String(i.transactionId)
24465 [writeString((gameId + "_board"), board), writeString((gameId + "_status"), "waiting for players"), writeString((gameId + "_teamBlue"), toString(i.caller)), writeString((gameId + "_teamYellow"), "")]
24566 }
24667
24768
24869
24970 @Callable(i)
25071 func joinGame (gameId) = {
25172 let userAddress = toBase58String(i.caller.bytes)
25273 let teamBlue = getStringValue((gameId + "_teamBlue"))
25374 let teamYellow = getStringValue((gameId + "_teamYellow"))
25475 let teamBlueList = split(teamBlue, ",")
25576 let teamYellowList = if ((size(teamYellow) > 0))
25677 then split(teamYellow, ",")
25778 else nil
25879 if (if (checkTeammembers(teamBlueList, userAddress))
25980 then checkTeammembers(teamYellowList, userAddress)
26081 else false)
26182 then if ((maxPlayersPerTeam > size(teamBlueList)))
26283 then [writeString((gameId + "_teamBlue"), ((teamBlue + ",") + userAddress))]
26384 else if ((size(teamYellowList) == (maxPlayersPerTeam - 1)))
26485 then [writeString((gameId + "_status"), "round_1,turn_teamBlue"), writeString((gameId + "_voting_1"), ""), writeString((gameId + "_winner"), ""), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_teamYellow"), ((teamYellow + ",") + userAddress))]
26586 else if ((size(teamYellowList) == 0))
26687 then [writeString((gameId + "_teamYellow"), userAddress)]
26788 else if (((maxPlayersPerTeam - 1) > size(teamYellowList)))
26889 then [writeString((gameId + "_teamYellow"), ((teamYellow + ",") + userAddress))]
26990 else throw("Teams are full, cannot join.")
27091 else throw("Player already in a Team!")
27192 }
27293
27394
27495
27596 @Callable(i)
27697 func vote (gameId,voting) = {
27798 let status = valueOrErrorMessage(getStringValue((gameId + "_status")), "No status entry found under gameId!")
27899 let round = parseIntValue(drop(split(status, ",")[0], 6))
279100 let activeTeam = drop(split(status, ",")[1], 5)
280101 let storedHeight = valueOrErrorMessage(getInteger((gameId + "_storedHeight")), (("No status entry found under " + gameId) + "_storedHeight!"))
281102 let storedMostVoted = valueOrErrorMessage(getIntegerValue((gameId + "_mostVoted")), (("No status entry found under " + gameId) + "_mostVoted!"))
282103 let votingEntry = valueOrErrorMessage(getStringValue(((gameId + "_voting_") + toString(round))), "No votes found for this game id!")
104+ let callerAddress = toBase58String(i.caller.bytes)
283105 let votingEntryList = if ((size(votingEntry) > 0))
284106 then split(votingEntry, ",")
285107 else nil
286108 let members = if ((activeTeam == "teamBlue"))
287109 then {
288110 let teamB = getStringValue((gameId + "_teamBlue"))
289111 let teamBList = split(teamB, ",")
290112 teamBList
291113 }
292114 else {
293115 let teamY = getStringValue((gameId + "_teamYellow"))
294116 let teamYList = split(teamY, ",")
295117 teamYList
296118 }
297119 let unactiveTeam = if ((activeTeam == "teamBlue"))
298120 then "teamYellow"
299121 else "teamBlue"
300122 let membersUnactive = if ((unactiveTeam == "teamBlue"))
301123 then {
302124 let teamB = getStringValue((gameId + "_teamBlue"))
303125 let teamBList = split(teamB, ",")
304126 teamBList
305127 }
306128 else {
307129 let teamY = getStringValue((gameId + "_teamYellow"))
308130 let teamYList = split(teamY, ",")
309131 teamYList
310132 }
311- let callerAddress = toBase58String(i.caller.bytes)
312133 if ((size(i.payments) > 0))
313134 then if ((fromBase58String(ctokenId) == i.payments[0].assetId))
314135 then if ((i.payments[0].amount == 100000000))
315136 then if ((storedHeight >= height))
316137 then if (containsElement(members, callerAddress))
317138 then {
318139 let storedWinner = getStringValue((gameId + "_winner"))
319140 if ((storedWinner != unactiveTeam))
320141 then {
321142 func foldVoters (accum,nextValue) = (accum :+ split(nextValue, "_")[0])
322143
323144 let voters = {
324145 let $l = votingEntryList
325146 let $s = size($l)
326147 let $acc0 = nil
327148 func $f0_1 ($a,$i) = if (($i >= $s))
328149 then $a
329150 else foldVoters($a, $l[$i])
330151
331152 func $f0_2 ($a,$i) = if (($i >= $s))
332153 then $a
333154 else throw("List size exceeds 5")
334155
335156 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
336157 }
337158 if ((containsElement(voters, callerAddress) == false))
338159 then {
339160 let newVote = ((callerAddress + "_") + toString(voting))
340161 let currentVotingEntryList = (votingEntryList :+ newVote)
341162 let currentVotingEntry = makeString(currentVotingEntryList, ",")
342- let votedField = parseIntValue(updateVotingResults(currentVotingEntryList))
343- let currentField = if ((votedField != storedMostVoted))
344- then votedField
345- else storedMostVoted
346- let alteredBoard = alterBoard(currentField, storedMostVoted, gameId, activeTeam)
347- let potentialWinner = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoard], nil)
348- if ((potentialWinner == potentialWinner))
349- then match potentialWinner {
350- case t: String =>
351- if ((maxPlayersPerTeam > size(currentVotingEntryList)))
352- then [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeString((gameId + "_winner"), t), writeInteger((gameId + "_mostVoted"), currentField)]
353- else [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoard), writeString((gameId + "_winner"), t), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), "")]
163+ let votedField = invoke(addressFromStringValue(handlerAddress), "updateVotingResults", [currentVotingEntryList], nil)
164+ if ((votedField == votedField))
165+ then match votedField {
166+ case votedFieldStr: String =>
167+ let vField = parseIntValue(votedFieldStr)
168+ let currentField = if ((vField != storedMostVoted))
169+ then vField
170+ else storedMostVoted
171+ let alteredBoard = invoke(addressFromStringValue(handlerAddress), "alterBoard", [currentField, storedMostVoted, gameId, activeTeam], nil)
172+ if ((alteredBoard == alteredBoard))
173+ then match alteredBoard {
174+ case alteredBoardStr: String =>
175+ let potentialWinner = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoardStr], nil)
176+ if ((potentialWinner == potentialWinner))
177+ then match potentialWinner {
178+ case potentialWinnerStr: String =>
179+ if ((maxPlayersPerTeam > size(currentVotingEntryList)))
180+ then [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoardStr), writeString((gameId + "_winner"), potentialWinnerStr), writeInteger((gameId + "_mostVoted"), currentField)]
181+ else [writeString(((gameId + "_voting_") + toString(round)), currentVotingEntry), writeString((gameId + "_board"), alteredBoardStr), writeString((gameId + "_winner"), potentialWinnerStr), writeInteger((gameId + "_mostVoted"), -1), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), "")]
182+ case _ =>
183+ throw("potentialWinner is not a String!")
184+ }
185+ else throw("Strict value is not equal to itself.")
186+ case _ =>
187+ throw("alteredBoard is not a String!")
188+ }
189+ else throw("Strict value is not equal to itself.")
354190 case _ =>
355- throw("Invokation result type is not a String!")
191+ throw("VotedField is not a String!")
356192 }
357193 else throw("Strict value is not equal to itself.")
358194 }
359195 else throw("Caller already voted!")
360196 }
361197 else throw("Game already finished!")
362198 }
363199 else throw((("Caller is not in " + activeTeam) + "!"))
364200 else if (containsElement(membersUnactive, callerAddress))
365201 then {
366202 let storedWin = getStringValue((gameId + "_winner"))
367203 if ((storedWin == ""))
368204 then {
369205 let newVote = ((callerAddress + "_") + toString(voting))
370206 let currentVotingEntryList = [newVote]
371- let votedField = parseIntValue(updateVotingResults(currentVotingEntryList))
372- let alteredBoard = alterBoard(votedField, -1, gameId, unactiveTeam)
373- let potentialWin = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoard], nil)
374- if ((potentialWin == potentialWin))
375- then match potentialWin {
376- case t: String =>
377-[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), writeString((gameId + "_winner"), t), writeInteger((gameId + "_mostVoted"), votedField)]
207+ let votedFieldChange = invoke(addressFromStringValue(handlerAddress), "updateVotingResults", [currentVotingEntryList], nil)
208+ if ((votedFieldChange == votedFieldChange))
209+ then match votedFieldChange {
210+ case votedFieldStr: String =>
211+ let vField = parseIntValue(votedFieldStr)
212+ let alteredBoardChange = invoke(addressFromStringValue(handlerAddress), "alterBoard", [vField, -1, gameId, unactiveTeam], nil)
213+ if ((alteredBoardChange == alteredBoardChange))
214+ then match alteredBoardChange {
215+ case alteredBoardStr: String =>
216+ let potentialWin = invoke(addressFromStringValue(inspectorAddress), "checkForWin", [alteredBoardStr], nil)
217+ if ((potentialWin == potentialWin))
218+ then match potentialWin {
219+ case potentialWinStr: String =>
220+[writeString((gameId + "_board"), alteredBoardStr), writeInteger((gameId + "_storedHeight"), (height + votingDuration)), writeString((gameId + "_status"), ((("round_" + toString((round + 1))) + ",turn_") + unactiveTeam)), writeString(((gameId + "_voting_") + toString((round + 1))), newVote), writeString((gameId + "_winner"), potentialWinStr), writeInteger((gameId + "_mostVoted"), vField)]
221+ case _ =>
222+ throw("Invokation result type is not a String!")
223+ }
224+ else throw("Strict value is not equal to itself.")
225+ case _ =>
226+ throw("alteredBoardChange is not a String!")
227+ }
228+ else throw("Strict value is not equal to itself.")
378229 case _ =>
379- throw("Invokation result type is not a String!")
230+ throw("votedFieldChange is not a String!")
380231 }
381232 else throw("Strict value is not equal to itself.")
382233 }
383234 else throw("Game already finished!")
384235 }
385236 else throw((("Caller is not in " + unactiveTeam) + "!"))
386237 else throw("Amount has to be 1!")
387238 else throw("Payment has to be a Connect four Token!")
388239 else throw("No Payment attached!")
389240 }
390241
391242
392243
393244 @Callable(i)
394245 func updateStringEntry (key,stringValue) = if (isAdmin(i.caller.bytes))
395246 then [writeString(key, stringValue)]
396247 else throw("Address does not match with admin address!")
397248
398249
399250
400251 @Callable(i)
401252 func updateIntegerEntry (key,integerValue) = if (isAdmin(i.caller.bytes))
402253 then [writeInteger(key, integerValue)]
403254 else throw("Address does not match with admin address!")
404255
405256
406257
407258 @Callable(i)
408259 func deleteStorageEntry (key) = if (isAdmin(i.caller.bytes))
409260 then [DeleteEntry(key)]
410261 else throw("Address does not match with admin address!")
411262
412263
413264 @Verifier(tx)
414265 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
415266

github/deemru/w8io/169f3d6 
57.43 ms