tx · C55mBGHXE4WypgeZ8cyyn9nyWgi15xiSfGWkP5dk6fui

3N2sQRGTRmL9NGZVVtzhfBEjEyVR7S9Mkum:  -0.10000000 Waves

2020.11.30 20:19 [1288447] smart account 3N2sQRGTRmL9NGZVVtzhfBEjEyVR7S9Mkum > SELF 0.00000000 Waves

{ "type": 13, "id": "C55mBGHXE4WypgeZ8cyyn9nyWgi15xiSfGWkP5dk6fui", "fee": 10000000, "feeAssetId": null, "timestamp": 1606756771119, "version": 2, "chainId": 84, "sender": "3N2sQRGTRmL9NGZVVtzhfBEjEyVR7S9Mkum", "senderPublicKey": "J8SeDz97kvV9MTtzmwVB965Dz8iEWst5MzMzgUgG1dfK", "proofs": [ "sH1xw1pKihrp9jzNHLv42Fqb1qb5ns2ezVqxEbyxwN9cnLu2oBTbSZa8mtmoFTU2GUuPJLVgNGMG2PCpgBbmRrM" ], "script": "base64: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AAAHdm90ZUtleQMJAQAAAAIhPQAAAAIFAAAABHZvdGUAAAAAAAAAAAAJAAACAAAAAQIAAAAneW91IGhhdmUgYWxyZWFkeSB2b3RlZCBvbiB0aGlzIHNvbHV0aW9uBAAAABJ0ZWFtVm90ZXNBbW91bnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGdGFza3NfBQAAAAZ0YXNrSWQCAAAABV9hcHBfBQAAAA50ZWFtSWRlbnRpZmllcgIAAAAOX3NvbHV0aW9udm90ZXMEAAAADHRlYW1TY29yZUtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZ0YXNrc18FAAAABnRhc2tJZAIAAAAFX2FwcF8FAAAADnRlYW1JZGVudGlmaWVyAgAAAA5fc29sdXRpb25zY29yZQQAAAAPdGVhbVZvdGVzQW1vdW50CQAAZAAAAAIAAAAAAAAAAAEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAASdGVhbVZvdGVzQW1vdW50S2V5BAAAAAxuZXdUZWFtU2NvcmUJAABkAAAAAgUAAAAJdm90ZVZhbHVlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAADHRlYW1TY29yZUtleQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAHdm90ZUtleQUAAAAJdm90ZVZhbHVlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAx0ZWFtU2NvcmVLZXkFAAAADG5ld1RlYW1TY29yZQUAAAADbmlsAAAAAWkBAAAAEGFjY2VwdFdvcmtSZXN1bHQAAAADAAAABnRhc2tJZAAAABB3aW5uZXJJZGVudGlmaWVyAAAACnJlcG9ydExpbmsDCQEAAAABIQAAAAEJAQAAAA1pc0dyb3VwTWVtYmVyAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAIGdyYW50cyB3b3JraW5nIGdyb3VwIGFjY2VzcyBvbmx5BAAAAAxyZXdhcmRBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAABnRhc2tzXwUAAAAGdGFza0lkAgAAAAdfcmV3YXJkBAAAAAt0ZWFtQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZ0YXNrc18FAAAABnRhc2tJZAIAAAAFX2FwcF8FAAAAEHdpbm5lcklkZW50aWZpZXICAAAAB19sZWFkZXIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGdGFza3NfBQAAAAZ0YXNrSWQCAAAAB19zdGF0dXMCAAAADXdvcmtfZmluaXNoZWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGdGFza3NfBQAAAAZ0YXNrSWQCAAAABV9hcHBfBQAAABB3aW5uZXJJZGVudGlmaWVyAgAAAAhfcHJvY2VzcwIAAAAGd2lubmVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGdGFza3NfBQAAAAZ0YXNrSWQCAAAAB19yZXBvcnQFAAAACnJlcG9ydExpbmsFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAC3RlYW1BZGRyZXNzBQAAAAxyZXdhcmRBbW91bnQFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAApyZWplY3RUYXNrAAAAAQAAAAZ0YXNrSWQDCQEAAAABIQAAAAEJAQAAAA1pc0dyb3VwTWVtYmVyAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAIGdyYW50cyB3b3JraW5nIGdyb3VwIGFjY2VzcyBvbmx5BAAAAA50ZWFtSWRlbnRpZmllcgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAICAAAABnRhc2tzXwUAAAAGdGFza0lkAgAAAApfcGVyZm9ybWVyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGdGFza3NfBQAAAAZ0YXNrSWQCAAAAB19zdGF0dXMCAAAACHJlamVjdGVkBQAAAANuaWwAAAAA1JKFoA==", "height": 1288447, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: YdV15e9RL3QUZtEd7aGvtyEooBUpozk57ov2mCVXd7Z Next: 4B2tAihenV1dPSS95zpNiZ1WfUU5dxxMBSk5GYQb4jqd Diff:
OldNewDifferences
7676 }
7777
7878
79-func areSubmissionsEnabled (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) == "work_started")
80-
81-
82-func isJuryMember (i,taskId) = true
83-
84-
8579 @Callable(i)
8680 func addTask (title,link) = if (!(isGroupMember(i.caller)))
8781 then throw("grants working group access only")
155149 let listKey = (("tasks_" + taskId) + "_applicants")
156150 let currentApplicantsList = tryGetString(listKey)
157151 let applicantKey = drop(toString(i.caller), 10)
158- let newApplicantsList = ((currentApplicantsList + ";") + toString(i.caller))
159- WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_name"), teamName), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_link"), link), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_leader"), toString(i.caller)), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_id"), applicantKey), DataEntry(listKey, newApplicantsList)])
152+ let leader = toString(i.caller)
153+ let newApplicantsList = ((currentApplicantsList + ";") + leader)
154+ WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_name"), teamName), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_link"), link), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_leader"), leader), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_id"), applicantKey), DataEntry(listKey, newApplicantsList)])
160155 }
161156 }
162157
190185 else {
191186 let listKeys = tryGetString((("tasks_" + taskId) + "_applicants"))
192187 let applicantsList = split(listKeys, ";")
193- let teamIdentifier = "TEAM_KEY_UNDEFINED"
194188 if ((size(applicantsList) == 0))
195189 then throw("No one has applied to the hackathon, yet")
196- else WriteSet([DataEntry((("tasks_" + taskId) + "_performer"), listKeys), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "can_begin")])
190+ else WriteSet([DataEntry((("tasks_" + taskId) + "_performer"), listKeys), DataEntry((("tasks_" + taskId) + "_status"), "ready_to_submit")])
197191 }
198192 }
199193
208202
209203 @Callable(i)
210204 func submitSolution (taskId,solutionLink) = {
205+ func areSubmissionsEnabled (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) == "work_started")
206+
211207 let teamIdentifier = getStringValue(this, (("tasks_" + taskId) + "_performer"))
212208 if (!(areSubmissionsEnabled(taskId)))
213209 then throw("not possible to upload solution now")
226222
227223
228224 @Callable(i)
229-func voteForSolution (taskId,teamIdentifier,voteValue) = if (!(isJuryMember(i, taskId)))
230- then throw("you can't vote")
231- else {
232- let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
233- let voteKey = ((("tasks_" + taskId) + "_solutionvote_") + voteHash)
234- let vote = tryGetInteger(voteKey)
235- if ((vote != 0))
236- then throw("you have already voted on this solution")
237- else {
238- let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionvotes")
239- let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionscore")
240- let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
241- let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
242- WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
243- }
244- }
225+func voteForSolution (taskId,teamIdentifier,voteValue) = {
226+ func isJuryMember (i,taskId) = true
227+
228+ if (!(isJuryMember(i, taskId)))
229+ then throw("you can't vote")
230+ else {
231+ let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
232+ let voteKey = ((("tasks_" + taskId) + "_solutionvote_") + voteHash)
233+ let vote = tryGetInteger(voteKey)
234+ if ((vote != 0))
235+ then throw("you have already voted on this solution")
236+ else {
237+ let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionvotes")
238+ let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionscore")
239+ let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
240+ let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
241+ WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
242+ }
243+ }
244+ }
245245
246246
247247
249249 func acceptWorkResult (taskId,winnerIdentifier,reportLink) = if (!(isGroupMember(i.caller)))
250250 then throw("grants working group access only")
251251 else {
252- let teamIdentifier = "TEAM_KEY_UNDEFINED"
253252 let rewardAmount = tryGetInteger((("tasks_" + taskId) + "_reward"))
254- let teamAddress = getStringValue(this, (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_leader"))
255- ScriptResult(WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished"), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "winner"), DataEntry((("tasks_" + taskId) + "_report"), reportLink)]), TransferSet([ScriptTransfer(addressFromStringValue(teamAddress), rewardAmount, unit)]))
253+ let teamAddress = getStringValue(this, (((("tasks_" + taskId) + "_app_") + winnerIdentifier) + "_leader"))
254+ ScriptResult(WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished"), DataEntry((((("tasks_" + taskId) + "_app_") + winnerIdentifier) + "_process"), "winner"), DataEntry((("tasks_" + taskId) + "_report"), reportLink)]), TransferSet([ScriptTransfer(addressFromStringValue(teamAddress), rewardAmount, unit)]))
256255 }
257256
258257
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let QUORUM = 1
55
66 func tryGetInteger (key) = {
77 let val = match getInteger(this, key) {
88 case b: Int =>
99 b
1010 case _ =>
1111 0
1212 }
1313 val
1414 }
1515
1616
1717 func tryGetString (key) = {
1818 let val = match getString(this, key) {
1919 case b: String =>
2020 b
2121 case _ =>
2222 ""
2323 }
2424 val
2525 }
2626
2727
2828 let mainContract = this
2929
3030 func isOwner (address) = if ((address == this))
3131 then true
3232 else (address == mainContract)
3333
3434
3535 func getGroup () = {
3636 let val = match getString(mainContract, "working_group_members") {
3737 case b: String =>
3838 b
3939 case _ =>
4040 ""
4141 }
4242 val
4343 }
4444
4545
4646 func getMembers () = {
4747 let val = match getString(mainContract, "dao_members") {
4848 case b: String =>
4949 b
5050 case _ =>
5151 ""
5252 }
5353 val
5454 }
5555
5656
5757 func isGroupMember (a) = {
5858 let val = match getInteger(mainContract, (("working_group_member_" + toString(a)) + "_weight")) {
5959 case b: Int =>
6060 b
6161 case _ =>
6262 0
6363 }
6464 (val > 0)
6565 }
6666
6767
6868 func canMemberVote (i) = {
6969 let val = match getInteger(mainContract, (("dao_member_" + toString(i.caller)) + "_weight")) {
7070 case b: Int =>
7171 b
7272 case _ =>
7373 0
7474 }
7575 (val > 0)
7676 }
7777
7878
79-func areSubmissionsEnabled (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) == "work_started")
80-
81-
82-func isJuryMember (i,taskId) = true
83-
84-
8579 @Callable(i)
8680 func addTask (title,link) = if (!(isGroupMember(i.caller)))
8781 then throw("grants working group access only")
8882 else WriteSet([DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_title"), title), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_link"), link)])
8983
9084
9185
9286 @Callable(i)
9387 func addTaskDetails (taskId,detailsLink) = if (!(isGroupMember(i.caller)))
9488 then throw("grants working group access only")
9589 else {
9690 let reward = extract(i.payment).amount
9791 WriteSet([DataEntry((("tasks_" + taskId) + "_reward"), reward), DataEntry((("tasks_" + taskId) + "_details"), detailsLink), DataEntry((("tasks_" + taskId) + "_status"), "proposed")])
9892 }
9993
10094
10195
10296 @Callable(i)
10397 func voteForTaskProposal (taskId,voteValue) = if (!(canMemberVote(i)))
10498 then throw("you can't vote")
10599 else if ((getStringValue(this, (("tasks_" + taskId) + "_status")) != "proposed"))
106100 then throw("voting is closed or not started")
107101 else if (if ((voteValue != -1))
108102 then (voteValue != 1)
109103 else false)
110104 then throw("you need to vote 1 or -1")
111105 else {
112106 let voteKey = ((("tasks_" + taskId) + "_voted_") + toString(i.caller))
113107 let previousVote = tryGetInteger(voteKey)
114108 if (!((previousVote == 0)))
115109 then throw("you have already voted")
116110 else {
117111 let votingKey = (("tasks_" + taskId) + "_voting_state")
118112 let votingState = tryGetInteger(votingKey)
119113 let votesAmountKey = (("tasks_" + taskId) + "_voting_amount")
120114 let votesAmountState = (tryGetInteger(votingKey) + 1)
121115 let newVotingState = (votingState + voteValue)
122116 ScriptResult(WriteSet([DataEntry(votingKey, newVotingState), DataEntry(voteKey, voteValue), DataEntry(votesAmountKey, votesAmountState)]), TransferSet([ScriptTransfer(i.caller, 500000, unit)]))
123117 }
124118 }
125119
126120
127121
128122 @Callable(i)
129123 func finishTaskProposalVoting (taskId) = if ((QUORUM > ((tryGetInteger((("tasks_" + taskId) + "_voting_amount")) * 100) / tryGetInteger("dao_size"))))
130124 then throw((("more than " + toString(QUORUM)) + "% members have to vote before finishing the voting"))
131125 else if (!(isGroupMember(i.caller)))
132126 then throw("grants working group access only")
133127 else {
134128 let votingKey = (("tasks_" + taskId) + "_voting_state")
135129 let votingState = tryGetInteger(votingKey)
136130 if ((votingState > 0))
137131 then {
138132 let votingResult = "ready_to_apply"
139133 WriteSet([DataEntry((("tasks_" + taskId) + "_status"), votingResult)])
140134 }
141135 else {
142136 let votingResult = "rejected"
143137 WriteSet([DataEntry((("tasks_" + taskId) + "_status"), votingResult)])
144138 }
145139 }
146140
147141
148142
149143 @Callable(i)
150144 func applyForTask (taskId,teamName,link) = {
151145 let status = tryGetString((("tasks_" + taskId) + "_status"))
152146 if ((status != "ready_to_apply"))
153147 then throw("This grant has not yet been approved")
154148 else {
155149 let listKey = (("tasks_" + taskId) + "_applicants")
156150 let currentApplicantsList = tryGetString(listKey)
157151 let applicantKey = drop(toString(i.caller), 10)
158- let newApplicantsList = ((currentApplicantsList + ";") + toString(i.caller))
159- WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_name"), teamName), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_link"), link), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_leader"), toString(i.caller)), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_id"), applicantKey), DataEntry(listKey, newApplicantsList)])
152+ let leader = toString(i.caller)
153+ let newApplicantsList = ((currentApplicantsList + ";") + leader)
154+ WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_name"), teamName), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_link"), link), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_leader"), leader), DataEntry((((("tasks_" + taskId) + "_app_") + applicantKey) + "_id"), applicantKey), DataEntry(listKey, newApplicantsList)])
160155 }
161156 }
162157
163158
164159
165160 @Callable(i)
166161 func voteForApplicant (taskId,teamIdentifier,voteValue) = if (!(canMemberVote(i)))
167162 then throw("you can't vote")
168163 else {
169164 let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
170165 let voteKey = ((("tasks_" + taskId) + "_vote_") + voteHash)
171166 let vote = tryGetInteger(voteKey)
172167 if ((vote != 0))
173168 then throw("you have already voted on this team")
174169 else {
175170 let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_votes")
176171 let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_score")
177172 let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
178173 let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
179174 WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
180175 }
181176 }
182177
183178
184179
185180 @Callable(i)
186181 func finishApplicantsVoting (taskId) = {
187182 let minVotesToApproveApplicant = 1
188183 if (!(isGroupMember(i.caller)))
189184 then throw("grants working group access only")
190185 else {
191186 let listKeys = tryGetString((("tasks_" + taskId) + "_applicants"))
192187 let applicantsList = split(listKeys, ";")
193- let teamIdentifier = "TEAM_KEY_UNDEFINED"
194188 if ((size(applicantsList) == 0))
195189 then throw("No one has applied to the hackathon, yet")
196- else WriteSet([DataEntry((("tasks_" + taskId) + "_performer"), listKeys), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "can_begin")])
190+ else WriteSet([DataEntry((("tasks_" + taskId) + "_performer"), listKeys), DataEntry((("tasks_" + taskId) + "_status"), "ready_to_submit")])
197191 }
198192 }
199193
200194
201195
202196 @Callable(i)
203197 func enableSubmissions (taskId,juryList) = if (!(isGroupMember(i.caller)))
204198 then throw("grants working group access only")
205199 else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_started"), DataEntry((("tasks_" + taskId) + "_jury"), juryList)])
206200
207201
208202
209203 @Callable(i)
210204 func submitSolution (taskId,solutionLink) = {
205+ func areSubmissionsEnabled (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) == "work_started")
206+
211207 let teamIdentifier = getStringValue(this, (("tasks_" + taskId) + "_performer"))
212208 if (!(areSubmissionsEnabled(taskId)))
213209 then throw("not possible to upload solution now")
214210 else if ((toString(i.caller) != getStringValue(this, (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_leader"))))
215211 then throw("team leader only")
216212 else WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "work_submitted"), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solution"), solutionLink)])
217213 }
218214
219215
220216
221217 @Callable(i)
222218 func stopSubmissions (taskId) = if (!(isGroupMember(i.caller)))
223219 then throw("grants working group access only")
224220 else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished")])
225221
226222
227223
228224 @Callable(i)
229-func voteForSolution (taskId,teamIdentifier,voteValue) = if (!(isJuryMember(i, taskId)))
230- then throw("you can't vote")
231- else {
232- let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
233- let voteKey = ((("tasks_" + taskId) + "_solutionvote_") + voteHash)
234- let vote = tryGetInteger(voteKey)
235- if ((vote != 0))
236- then throw("you have already voted on this solution")
237- else {
238- let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionvotes")
239- let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionscore")
240- let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
241- let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
242- WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
243- }
244- }
225+func voteForSolution (taskId,teamIdentifier,voteValue) = {
226+ func isJuryMember (i,taskId) = true
227+
228+ if (!(isJuryMember(i, taskId)))
229+ then throw("you can't vote")
230+ else {
231+ let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
232+ let voteKey = ((("tasks_" + taskId) + "_solutionvote_") + voteHash)
233+ let vote = tryGetInteger(voteKey)
234+ if ((vote != 0))
235+ then throw("you have already voted on this solution")
236+ else {
237+ let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionvotes")
238+ let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionscore")
239+ let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
240+ let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
241+ WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
242+ }
243+ }
244+ }
245245
246246
247247
248248 @Callable(i)
249249 func acceptWorkResult (taskId,winnerIdentifier,reportLink) = if (!(isGroupMember(i.caller)))
250250 then throw("grants working group access only")
251251 else {
252- let teamIdentifier = "TEAM_KEY_UNDEFINED"
253252 let rewardAmount = tryGetInteger((("tasks_" + taskId) + "_reward"))
254- let teamAddress = getStringValue(this, (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_leader"))
255- ScriptResult(WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished"), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "winner"), DataEntry((("tasks_" + taskId) + "_report"), reportLink)]), TransferSet([ScriptTransfer(addressFromStringValue(teamAddress), rewardAmount, unit)]))
253+ let teamAddress = getStringValue(this, (((("tasks_" + taskId) + "_app_") + winnerIdentifier) + "_leader"))
254+ ScriptResult(WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished"), DataEntry((((("tasks_" + taskId) + "_app_") + winnerIdentifier) + "_process"), "winner"), DataEntry((("tasks_" + taskId) + "_report"), reportLink)]), TransferSet([ScriptTransfer(addressFromStringValue(teamAddress), rewardAmount, unit)]))
256255 }
257256
258257
259258
260259 @Callable(i)
261260 func rejectTask (taskId) = if (!(isGroupMember(i.caller)))
262261 then throw("grants working group access only")
263262 else {
264263 let teamIdentifier = getStringValue(this, (("tasks_" + taskId) + "_performer"))
265264 WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "rejected")])
266265 }
267266
268267

github/deemru/w8io/3ef1775 
64.47 ms