tx · 92EKtoyShodSNwCgxZ9Cuo8qjapte4Sqe62ggwj9Pnob

3N2sQRGTRmL9NGZVVtzhfBEjEyVR7S9Mkum:  -0.10000000 Waves

2020.12.24 17:16 [1322880] smart account 3N2sQRGTRmL9NGZVVtzhfBEjEyVR7S9Mkum > SELF 0.00000000 Waves

{ "type": 13, "id": "92EKtoyShodSNwCgxZ9Cuo8qjapte4Sqe62ggwj9Pnob", "fee": 10000000, "feeAssetId": null, "timestamp": 1608819387749, "version": 2, "chainId": 84, "sender": "3N2sQRGTRmL9NGZVVtzhfBEjEyVR7S9Mkum", "senderPublicKey": "J8SeDz97kvV9MTtzmwVB965Dz8iEWst5MzMzgUgG1dfK", "proofs": [ "3Yz31K6rtNmU5wsnofG8Efy1TPp4BF86CQWsYH3As67RAGKdagFutNcTqWDjTzH1DmNwSgoEcf18wTwERJ7Cuubm" ], "script": "base64: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YXJ0ZWQFAAAAA25pbAkAAAIAAAABAgAAABVjaGVja3MgYXJlIG5vdCBwYXNzZWQAAAABaQEAAAATdm90ZUZvclRhc2tQcm9wb3NhbAAAAAIAAAAGdGFza0lkAAAAD3ZvdGVWYWx1ZVN0cmluZwMJAQAAAB12b3RlRm9yVGFza1Byb3Bvc2FsQ29uZGl0aW9ucwAAAAIFAAAABnRhc2tJZAUAAAABaQQAAAAHdm90ZUtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGdGFza3NfBQAAAAZ0YXNrSWQCAAAAB192b3RlZF8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAl2b3RpbmdLZXkJAAEsAAAAAgkAASwAAAACAgAAAAZ0YXNrc18FAAAABnRhc2tJZAIAAAANX3ZvdGluZ19zdGF0ZQQAAAAOdm90ZXNBbW91bnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAZ0YXNrc18FAAAABnRhc2tJZAIAAAAOX3ZvdGluZ19hbW91bnQEAAAACXZvdGVWYWx1ZQkBAAAADGdldFZvdGVWYWx1ZQAAAAEFAAAAD3ZvdGVWYWx1ZVN0cmluZwQAAAALdm90aW5nU3RhdGUJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAJdm90aW5nS2V5BAAAABB2b3Rlc0Ftb3VudFN0YXRlCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAOdm90ZXNBbW91bnRLZXkAAAAAAAAAAAEJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACXZvdGluZ0tleQkAAGQAAAACBQAAAAt2b3RpbmdTdGF0ZQUAAAAJdm90ZVZhbHVlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAd2b3RlS2V5BQAAAAl2b3RlVmFsdWUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADnZvdGVzQW1vdW50S2V5BQAAABB2b3Rlc0Ftb3VudFN0YXRlBQAAAANuaWwJAAACAAAAAQIAAAAVY2hlY2tzIGFyZSBub3QgcGFzc2VkAAAAAWkBAAAAGGZpbmlzaFRhc2tQcm9wb3NhbFZvdGluZwAAAAEAAAAGdGFz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", "height": 1322880, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 1qJ9C1h9qyN1J6BfS71BtXyDoLyagoYFrKmf5DqXtxR Next: 58ZXVvfbQffHj7VTCdDaDGWE79dVgHMU4SmqrqYoqbY7 Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let QUORUM = 1
5-
6-let mainContract = addressFromStringValue("3MwRzi2BmqZZXWrCGCwcRQLsnic2Aod6zhS")
75
86 func tryGetInteger (key) = {
97 let val = match getInteger(this, key) {
2624 val
2725 }
2826
27+
28+let mainContract = addressFromStringValue("3NCGXdprrsBp9rzrGna68MmfJXQ7fcinF7o")
2929
3030 func getGroup () = {
3131 let val = match getString(mainContract, "working_group_members") {
8282 }
8383
8484
85+func isVotingDisable (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) != "voting_started")
86+
87+
88+func isQuorumAchieved (taskId) = (QUORUM > ((tryGetInteger((("tasks_" + taskId) + "_voting_amount")) * 100) / getDAOSize()))
89+
90+
8591 func getVoteValue (s) = if ((s == "like"))
8692 then 1
8793 else if ((s == "dislike"))
8995 else throw("you need to vote with 'like' or 'dislike' value")
9096
9197
98+func initTaskVotingConditions (taskId,address) = if (!(isGroupMember(address)))
99+ then throw("grants working group access only")
100+ else true
101+
102+
103+func startWorkConditions (taskId,address) = if ((tryGetString((("tasks_" + taskId) + "_status")) != "approved"))
104+ then throw("the task is not approved")
105+ else if ((toString(address) != tryGetString((("tasks_" + taskId) + "_leader"))))
106+ then throw("team leader only")
107+ else true
108+
109+
110+func addRewardConditions (taskId,reward,address) = if ((tryGetString((("tasks_" + taskId) + "_status")) != ""))
111+ then throw("voting was already started, so the reward amount cannot be changed")
112+ else if ((toString(address) != tryGetString((("tasks_" + taskId) + "_leader"))))
113+ then throw("team leader only")
114+ else true
115+
116+
117+func voteForTaskProposalConditions (taskId,i) = if (!(canMemberVote(i)))
118+ then throw("you can't vote")
119+ else if (isVotingDisable(taskId))
120+ then throw("voting is closed or not started")
121+ else if (!((tryGetInteger(((("tasks_" + taskId) + "_voted_") + toString(i.caller))) == 0)))
122+ then throw("you have already voted")
123+ else true
124+
125+
126+func finishTaskProposalVotingConditions (taskId,address) = if ((tryGetString((("tasks_" + taskId) + "_status")) != "voting_started"))
127+ then throw("voting is not active")
128+ else if (isQuorumAchieved(taskId))
129+ then throw((("more than " + toString(QUORUM)) + "% members have to vote before finishing the voting"))
130+ else if (!(isGroupMember(address)))
131+ then throw("grants working group access only")
132+ else true
133+
134+
135+func acceptWorkResultConditions (address) = if (!(isGroupMember(address)))
136+ then throw("grants working group access only")
137+ else true
138+
139+
92140 @Callable(i)
93-func addTask (title,link) = if (!(isGroupMember(i.caller)))
94- then throw("grants working group access only")
95- else WriteSet([DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_title"), title), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_link"), link)])
141+func addTask (title,link) = WriteSet([DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_title"), title), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_link"), link), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_leader"), toString(i.caller))])
96142
97143
98144
99145 @Callable(i)
100-func addReward (taskId) = if (!(isGroupMember(i.caller)))
101- then throw("grants working group access only")
102- else {
103- let reward = extract(i.payment).amount
104- WriteSet([DataEntry((("tasks_" + taskId) + "_reward"), reward), DataEntry((("tasks_" + taskId) + "_status"), "proposed")])
105- }
146+func addReward (taskId,reward) = if (addRewardConditions(taskId, reward, i.caller))
147+ then WriteSet([DataEntry((("tasks_" + taskId) + "_reward"), reward)])
148+ else throw("checks are not passed")
106149
107150
108151
109152 @Callable(i)
110-func voteForTaskProposal (taskId,voteValue) = if (!(canMemberVote(i)))
111- then throw("you can't vote")
112- else if ((getStringValue(this, (("tasks_" + taskId) + "_status")) != "proposed"))
113- then throw("voting is closed or not started")
114- else if (if ((voteValue != "like"))
115- then (voteValue != "dislike")
116- else false)
117- then throw("you need to vote like or dislike")
118- else {
119- let valueVoteInt = getVoteValue(voteValue)
120- let voteKey = ((("tasks_" + taskId) + "_voted_") + toString(i.caller))
121- let previousVote = tryGetInteger(voteKey)
122- if (!((previousVote == 0)))
123- then throw("you have already voted")
124- else {
125- let votingKey = (("tasks_" + taskId) + "_voting_state")
126- let votingState = tryGetInteger(votingKey)
127- let votesAmountKey = (("tasks_" + taskId) + "_voting_amount")
128- let votesAmountState = (tryGetInteger(votingKey) + 1)
129- let newVotingState = (votingState + valueVoteInt)
130- ScriptResult(WriteSet([DataEntry(votingKey, newVotingState), DataEntry(voteKey, valueVoteInt), DataEntry(votesAmountKey, votesAmountState)]), TransferSet([ScriptTransfer(i.caller, 500000, unit)]))
131- }
132- }
153+func initTaskVoting (taskId) = if (initTaskVotingConditions(taskId, i.caller))
154+ then WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "voting_started")])
155+ else throw("checks are not passed")
133156
134157
135158
136159 @Callable(i)
137-func finishTaskProposalVoting (taskId) = if ((QUORUM > ((tryGetInteger((("tasks_" + taskId) + "_voting_amount")) * 100) / getDAOSize())))
138- then throw((("more than " + toString(QUORUM)) + "% members have to vote before finishing the voting"))
139- else if (!(isGroupMember(i.caller)))
140- then throw("grants working group access only")
141- else {
142- let votingKey = (("tasks_" + taskId) + "_voting_state")
143- let votingState = tryGetInteger(votingKey)
144- if ((votingState > 0))
145- then {
146- let votingResult = "ready_to_apply"
147- WriteSet([DataEntry((("tasks_" + taskId) + "_status"), votingResult)])
148- }
149- else {
150- let votingResult = "rejected"
151- WriteSet([DataEntry((("tasks_" + taskId) + "_status"), votingResult)])
152- }
153- }
160+func voteForTaskProposal (taskId,voteValueString) = if (voteForTaskProposalConditions(taskId, i))
161+ then {
162+ let voteKey = ((("tasks_" + taskId) + "_voted_") + toString(i.caller))
163+ let votingKey = (("tasks_" + taskId) + "_voting_state")
164+ let votesAmountKey = (("tasks_" + taskId) + "_voting_amount")
165+ let voteValue = getVoteValue(voteValueString)
166+ let votingState = tryGetInteger(votingKey)
167+ let votesAmountState = (tryGetInteger(votesAmountKey) + 1)
168+ WriteSet([DataEntry(votingKey, (votingState + voteValue)), DataEntry(voteKey, voteValue), DataEntry(votesAmountKey, votesAmountState)])
169+ }
170+ else throw("checks are not passed")
154171
155172
156173
157174 @Callable(i)
158-func applyForTask (taskId,teamName,link) = {
159- let status = tryGetString((("tasks_" + taskId) + "_status"))
160- if ((status != "ready_to_apply"))
161- then throw("This grant has not yet been approved")
162- else {
163- let listKey = (("tasks_" + taskId) + "_applicants")
164- let currentApplicantsList = tryGetString(listKey)
165- let applicantKey = drop(toString(i.caller), 10)
166- let leader = toString(i.caller)
167- let newApplicantsList = ((currentApplicantsList + ";") + leader)
168- 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)])
169- }
170- }
175+func finishTaskProposalVoting (taskId) = if (finishTaskProposalVotingConditions(taskId, i.caller))
176+ then {
177+ let statusKey = (("tasks_" + taskId) + "_status")
178+ let votingKey = (("tasks_" + taskId) + "_voting_state")
179+ WriteSet([DataEntry(statusKey, if ((tryGetInteger(votingKey) > 0))
180+ then "approved"
181+ else "rejected")])
182+ }
183+ else throw("checks are not passed")
171184
172185
173186
174187 @Callable(i)
175-func voteForApplicant (taskId,teamIdentifier,voteValue) = if (!(canMemberVote(i)))
176- then throw("you can't vote")
177- else {
178- let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
179- let voteKey = ((("tasks_" + taskId) + "_vote_") + voteHash)
180- let vote = tryGetInteger(voteKey)
181- if ((vote != 0))
182- then throw("you have already voted on this team")
183- else {
184- let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_votes")
185- let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_score")
186- let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
187- let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
188- WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
189- }
190- }
188+func startWork (taskId) = if (startWorkConditions(taskId, i.caller))
189+ then WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_started")])
190+ else throw("checks are not passed")
191191
192192
193193
194194 @Callable(i)
195-func finishApplicantsVoting (taskId) = {
196- let minVotesToApproveApplicant = 1
197- if (!(isGroupMember(i.caller)))
198- then throw("grants working group access only")
199- else {
200- let listKeys = tryGetString((("tasks_" + taskId) + "_applicants"))
201- let applicantsList = split(listKeys, ";")
202- if ((size(applicantsList) == 0))
203- then throw("No one has applied to the hackathon, yet")
204- else WriteSet([DataEntry((("tasks_" + taskId) + "_performer"), listKeys), DataEntry((("tasks_" + taskId) + "_status"), "ready_to_submit")])
205- }
206- }
195+func rejectTask (taskId) = if (isGroupMember(i.caller))
196+ then WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "rejected")])
197+ else throw("grants working group access only")
207198
208199
209200
210201 @Callable(i)
211-func enableSubmissions (taskId,juryList) = if (!(isGroupMember(i.caller)))
212- then throw("grants working group access only")
213- else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_started"), DataEntry((("tasks_" + taskId) + "_jury"), juryList)])
214-
215-
216-
217-@Callable(i)
218-func submitSolution (taskId,solutionLink) = {
219- func areSubmissionsEnabled (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) == "work_started")
220-
221- let teamIdentifier = getStringValue(this, (("tasks_" + taskId) + "_performer"))
222- if (!(areSubmissionsEnabled(taskId)))
223- then throw("not possible to upload solution now")
224- else if ((toString(i.caller) != getStringValue(this, (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_leader"))))
225- then throw("team leader only")
226- else WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "work_submitted"), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solution"), solutionLink)])
227- }
228-
229-
230-
231-@Callable(i)
232-func stopSubmissions (taskId) = if (!(isGroupMember(i.caller)))
233- then throw("grants working group access only")
234- else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished")])
235-
236-
237-
238-@Callable(i)
239-func voteForSolution (taskId,teamIdentifier,voteValue) = {
240- func isJuryMember (i,taskId) = true
241-
242- if (!(isJuryMember(i, taskId)))
243- then throw("you can't vote")
244- else {
245- let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
246- let voteKey = ((("tasks_" + taskId) + "_solutionvote_") + voteHash)
247- let vote = tryGetInteger(voteKey)
248- if ((vote != 0))
249- then throw("you have already voted on this solution")
250- else {
251- let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionvotes")
252- let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionscore")
253- let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
254- let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
255- WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
256- }
257- }
258- }
259-
260-
261-
262-@Callable(i)
263-func acceptWorkResult (taskId,winnerIdentifier,reportLink) = if (!(isGroupMember(i.caller)))
264- then throw("grants working group access only")
265- else {
202+func acceptWorkResult (taskId,reportLink) = if (acceptWorkResultConditions(i.caller))
203+ then {
266204 let rewardAmount = tryGetInteger((("tasks_" + taskId) + "_reward"))
267- let teamAddress = getStringValue(this, (((("tasks_" + taskId) + "_app_") + winnerIdentifier) + "_leader"))
268- 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)]))
205+ let teamAddress = getStringValue(this, (("tasks_" + taskId) + "_leader"))
206+ ScriptResult(WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished"), DataEntry((("tasks_" + taskId) + "_report"), reportLink)]), TransferSet([ScriptTransfer(addressFromStringValue(teamAddress), rewardAmount, unit)]))
269207 }
270-
271-
272-
273-@Callable(i)
274-func rejectTask (taskId) = if (!(isGroupMember(i.caller)))
275- then throw("grants working group access only")
276- else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "rejected")])
208+ else throw("grants working group access only")
277209
278210
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let QUORUM = 1
5-
6-let mainContract = addressFromStringValue("3MwRzi2BmqZZXWrCGCwcRQLsnic2Aod6zhS")
75
86 func tryGetInteger (key) = {
97 let val = match getInteger(this, key) {
108 case b: Int =>
119 b
1210 case _ =>
1311 0
1412 }
1513 val
1614 }
1715
1816
1917 func tryGetString (key) = {
2018 let val = match getString(this, key) {
2119 case b: String =>
2220 b
2321 case _ =>
2422 ""
2523 }
2624 val
2725 }
2826
27+
28+let mainContract = addressFromStringValue("3NCGXdprrsBp9rzrGna68MmfJXQ7fcinF7o")
2929
3030 func getGroup () = {
3131 let val = match getString(mainContract, "working_group_members") {
3232 case b: String =>
3333 b
3434 case _ =>
3535 ""
3636 }
3737 val
3838 }
3939
4040
4141 func getMembers () = {
4242 let val = match getString(mainContract, "dao_members") {
4343 case b: String =>
4444 b
4545 case _ =>
4646 ""
4747 }
4848 val
4949 }
5050
5151
5252 func getDAOSize () = {
5353 let val = match getInteger(mainContract, "dao_size") {
5454 case b: Int =>
5555 b
5656 case _ =>
5757 0
5858 }
5959 val
6060 }
6161
6262
6363 func isGroupMember (a) = {
6464 let val = match getInteger(mainContract, (("working_group_member_" + toString(a)) + "_weight")) {
6565 case b: Int =>
6666 b
6767 case _ =>
6868 0
6969 }
7070 (val > 0)
7171 }
7272
7373
7474 func canMemberVote (i) = {
7575 let val = match getInteger(mainContract, (("dao_member_" + toString(i.caller)) + "_weight")) {
7676 case b: Int =>
7777 b
7878 case _ =>
7979 0
8080 }
8181 (val > 0)
8282 }
8383
8484
85+func isVotingDisable (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) != "voting_started")
86+
87+
88+func isQuorumAchieved (taskId) = (QUORUM > ((tryGetInteger((("tasks_" + taskId) + "_voting_amount")) * 100) / getDAOSize()))
89+
90+
8591 func getVoteValue (s) = if ((s == "like"))
8692 then 1
8793 else if ((s == "dislike"))
8894 then -1
8995 else throw("you need to vote with 'like' or 'dislike' value")
9096
9197
98+func initTaskVotingConditions (taskId,address) = if (!(isGroupMember(address)))
99+ then throw("grants working group access only")
100+ else true
101+
102+
103+func startWorkConditions (taskId,address) = if ((tryGetString((("tasks_" + taskId) + "_status")) != "approved"))
104+ then throw("the task is not approved")
105+ else if ((toString(address) != tryGetString((("tasks_" + taskId) + "_leader"))))
106+ then throw("team leader only")
107+ else true
108+
109+
110+func addRewardConditions (taskId,reward,address) = if ((tryGetString((("tasks_" + taskId) + "_status")) != ""))
111+ then throw("voting was already started, so the reward amount cannot be changed")
112+ else if ((toString(address) != tryGetString((("tasks_" + taskId) + "_leader"))))
113+ then throw("team leader only")
114+ else true
115+
116+
117+func voteForTaskProposalConditions (taskId,i) = if (!(canMemberVote(i)))
118+ then throw("you can't vote")
119+ else if (isVotingDisable(taskId))
120+ then throw("voting is closed or not started")
121+ else if (!((tryGetInteger(((("tasks_" + taskId) + "_voted_") + toString(i.caller))) == 0)))
122+ then throw("you have already voted")
123+ else true
124+
125+
126+func finishTaskProposalVotingConditions (taskId,address) = if ((tryGetString((("tasks_" + taskId) + "_status")) != "voting_started"))
127+ then throw("voting is not active")
128+ else if (isQuorumAchieved(taskId))
129+ then throw((("more than " + toString(QUORUM)) + "% members have to vote before finishing the voting"))
130+ else if (!(isGroupMember(address)))
131+ then throw("grants working group access only")
132+ else true
133+
134+
135+func acceptWorkResultConditions (address) = if (!(isGroupMember(address)))
136+ then throw("grants working group access only")
137+ else true
138+
139+
92140 @Callable(i)
93-func addTask (title,link) = if (!(isGroupMember(i.caller)))
94- then throw("grants working group access only")
95- else WriteSet([DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_title"), title), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_link"), link)])
141+func addTask (title,link) = WriteSet([DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_title"), title), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_link"), link), DataEntry((("tasks_" + toBase58String(i.transactionId)) + "_leader"), toString(i.caller))])
96142
97143
98144
99145 @Callable(i)
100-func addReward (taskId) = if (!(isGroupMember(i.caller)))
101- then throw("grants working group access only")
102- else {
103- let reward = extract(i.payment).amount
104- WriteSet([DataEntry((("tasks_" + taskId) + "_reward"), reward), DataEntry((("tasks_" + taskId) + "_status"), "proposed")])
105- }
146+func addReward (taskId,reward) = if (addRewardConditions(taskId, reward, i.caller))
147+ then WriteSet([DataEntry((("tasks_" + taskId) + "_reward"), reward)])
148+ else throw("checks are not passed")
106149
107150
108151
109152 @Callable(i)
110-func voteForTaskProposal (taskId,voteValue) = if (!(canMemberVote(i)))
111- then throw("you can't vote")
112- else if ((getStringValue(this, (("tasks_" + taskId) + "_status")) != "proposed"))
113- then throw("voting is closed or not started")
114- else if (if ((voteValue != "like"))
115- then (voteValue != "dislike")
116- else false)
117- then throw("you need to vote like or dislike")
118- else {
119- let valueVoteInt = getVoteValue(voteValue)
120- let voteKey = ((("tasks_" + taskId) + "_voted_") + toString(i.caller))
121- let previousVote = tryGetInteger(voteKey)
122- if (!((previousVote == 0)))
123- then throw("you have already voted")
124- else {
125- let votingKey = (("tasks_" + taskId) + "_voting_state")
126- let votingState = tryGetInteger(votingKey)
127- let votesAmountKey = (("tasks_" + taskId) + "_voting_amount")
128- let votesAmountState = (tryGetInteger(votingKey) + 1)
129- let newVotingState = (votingState + valueVoteInt)
130- ScriptResult(WriteSet([DataEntry(votingKey, newVotingState), DataEntry(voteKey, valueVoteInt), DataEntry(votesAmountKey, votesAmountState)]), TransferSet([ScriptTransfer(i.caller, 500000, unit)]))
131- }
132- }
153+func initTaskVoting (taskId) = if (initTaskVotingConditions(taskId, i.caller))
154+ then WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "voting_started")])
155+ else throw("checks are not passed")
133156
134157
135158
136159 @Callable(i)
137-func finishTaskProposalVoting (taskId) = if ((QUORUM > ((tryGetInteger((("tasks_" + taskId) + "_voting_amount")) * 100) / getDAOSize())))
138- then throw((("more than " + toString(QUORUM)) + "% members have to vote before finishing the voting"))
139- else if (!(isGroupMember(i.caller)))
140- then throw("grants working group access only")
141- else {
142- let votingKey = (("tasks_" + taskId) + "_voting_state")
143- let votingState = tryGetInteger(votingKey)
144- if ((votingState > 0))
145- then {
146- let votingResult = "ready_to_apply"
147- WriteSet([DataEntry((("tasks_" + taskId) + "_status"), votingResult)])
148- }
149- else {
150- let votingResult = "rejected"
151- WriteSet([DataEntry((("tasks_" + taskId) + "_status"), votingResult)])
152- }
153- }
160+func voteForTaskProposal (taskId,voteValueString) = if (voteForTaskProposalConditions(taskId, i))
161+ then {
162+ let voteKey = ((("tasks_" + taskId) + "_voted_") + toString(i.caller))
163+ let votingKey = (("tasks_" + taskId) + "_voting_state")
164+ let votesAmountKey = (("tasks_" + taskId) + "_voting_amount")
165+ let voteValue = getVoteValue(voteValueString)
166+ let votingState = tryGetInteger(votingKey)
167+ let votesAmountState = (tryGetInteger(votesAmountKey) + 1)
168+ WriteSet([DataEntry(votingKey, (votingState + voteValue)), DataEntry(voteKey, voteValue), DataEntry(votesAmountKey, votesAmountState)])
169+ }
170+ else throw("checks are not passed")
154171
155172
156173
157174 @Callable(i)
158-func applyForTask (taskId,teamName,link) = {
159- let status = tryGetString((("tasks_" + taskId) + "_status"))
160- if ((status != "ready_to_apply"))
161- then throw("This grant has not yet been approved")
162- else {
163- let listKey = (("tasks_" + taskId) + "_applicants")
164- let currentApplicantsList = tryGetString(listKey)
165- let applicantKey = drop(toString(i.caller), 10)
166- let leader = toString(i.caller)
167- let newApplicantsList = ((currentApplicantsList + ";") + leader)
168- 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)])
169- }
170- }
175+func finishTaskProposalVoting (taskId) = if (finishTaskProposalVotingConditions(taskId, i.caller))
176+ then {
177+ let statusKey = (("tasks_" + taskId) + "_status")
178+ let votingKey = (("tasks_" + taskId) + "_voting_state")
179+ WriteSet([DataEntry(statusKey, if ((tryGetInteger(votingKey) > 0))
180+ then "approved"
181+ else "rejected")])
182+ }
183+ else throw("checks are not passed")
171184
172185
173186
174187 @Callable(i)
175-func voteForApplicant (taskId,teamIdentifier,voteValue) = if (!(canMemberVote(i)))
176- then throw("you can't vote")
177- else {
178- let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
179- let voteKey = ((("tasks_" + taskId) + "_vote_") + voteHash)
180- let vote = tryGetInteger(voteKey)
181- if ((vote != 0))
182- then throw("you have already voted on this team")
183- else {
184- let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_votes")
185- let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_score")
186- let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
187- let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
188- WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
189- }
190- }
188+func startWork (taskId) = if (startWorkConditions(taskId, i.caller))
189+ then WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_started")])
190+ else throw("checks are not passed")
191191
192192
193193
194194 @Callable(i)
195-func finishApplicantsVoting (taskId) = {
196- let minVotesToApproveApplicant = 1
197- if (!(isGroupMember(i.caller)))
198- then throw("grants working group access only")
199- else {
200- let listKeys = tryGetString((("tasks_" + taskId) + "_applicants"))
201- let applicantsList = split(listKeys, ";")
202- if ((size(applicantsList) == 0))
203- then throw("No one has applied to the hackathon, yet")
204- else WriteSet([DataEntry((("tasks_" + taskId) + "_performer"), listKeys), DataEntry((("tasks_" + taskId) + "_status"), "ready_to_submit")])
205- }
206- }
195+func rejectTask (taskId) = if (isGroupMember(i.caller))
196+ then WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "rejected")])
197+ else throw("grants working group access only")
207198
208199
209200
210201 @Callable(i)
211-func enableSubmissions (taskId,juryList) = if (!(isGroupMember(i.caller)))
212- then throw("grants working group access only")
213- else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_started"), DataEntry((("tasks_" + taskId) + "_jury"), juryList)])
214-
215-
216-
217-@Callable(i)
218-func submitSolution (taskId,solutionLink) = {
219- func areSubmissionsEnabled (taskId) = (tryGetString((("tasks_" + taskId) + "_status")) == "work_started")
220-
221- let teamIdentifier = getStringValue(this, (("tasks_" + taskId) + "_performer"))
222- if (!(areSubmissionsEnabled(taskId)))
223- then throw("not possible to upload solution now")
224- else if ((toString(i.caller) != getStringValue(this, (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_leader"))))
225- then throw("team leader only")
226- else WriteSet([DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_process"), "work_submitted"), DataEntry((((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solution"), solutionLink)])
227- }
228-
229-
230-
231-@Callable(i)
232-func stopSubmissions (taskId) = if (!(isGroupMember(i.caller)))
233- then throw("grants working group access only")
234- else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished")])
235-
236-
237-
238-@Callable(i)
239-func voteForSolution (taskId,teamIdentifier,voteValue) = {
240- func isJuryMember (i,taskId) = true
241-
242- if (!(isJuryMember(i, taskId)))
243- then throw("you can't vote")
244- else {
245- let voteHash = (drop(toString(i.caller), 10) + drop(teamIdentifier, 10))
246- let voteKey = ((("tasks_" + taskId) + "_solutionvote_") + voteHash)
247- let vote = tryGetInteger(voteKey)
248- if ((vote != 0))
249- then throw("you have already voted on this solution")
250- else {
251- let teamVotesAmountKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionvotes")
252- let teamScoreKey = (((("tasks_" + taskId) + "_app_") + teamIdentifier) + "_solutionscore")
253- let teamVotesAmount = (1 + tryGetInteger(teamVotesAmountKey))
254- let newTeamScore = (voteValue + tryGetInteger(teamScoreKey))
255- WriteSet([DataEntry(voteKey, voteValue), DataEntry(teamScoreKey, newTeamScore)])
256- }
257- }
258- }
259-
260-
261-
262-@Callable(i)
263-func acceptWorkResult (taskId,winnerIdentifier,reportLink) = if (!(isGroupMember(i.caller)))
264- then throw("grants working group access only")
265- else {
202+func acceptWorkResult (taskId,reportLink) = if (acceptWorkResultConditions(i.caller))
203+ then {
266204 let rewardAmount = tryGetInteger((("tasks_" + taskId) + "_reward"))
267- let teamAddress = getStringValue(this, (((("tasks_" + taskId) + "_app_") + winnerIdentifier) + "_leader"))
268- 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)]))
205+ let teamAddress = getStringValue(this, (("tasks_" + taskId) + "_leader"))
206+ ScriptResult(WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "work_finished"), DataEntry((("tasks_" + taskId) + "_report"), reportLink)]), TransferSet([ScriptTransfer(addressFromStringValue(teamAddress), rewardAmount, unit)]))
269207 }
270-
271-
272-
273-@Callable(i)
274-func rejectTask (taskId) = if (!(isGroupMember(i.caller)))
275- then throw("grants working group access only")
276- else WriteSet([DataEntry((("tasks_" + taskId) + "_status"), "rejected")])
208+ else throw("grants working group access only")
277209
278210

github/deemru/w8io/3ef1775 
68.80 ms