tx · CELRGYBHp7rymFnbB5mrNQuEznF64AbNmaCm7zzytQ6G

3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2:  -0.01500000 Waves

2019.09.05 20:51 [663058] smart account 3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2 > SELF 0.00000000 Waves

{ "type": 13, "id": "CELRGYBHp7rymFnbB5mrNQuEznF64AbNmaCm7zzytQ6G", "fee": 1500000, "feeAssetId": null, "timestamp": 1567705901898, "version": 1, "sender": "3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2", "senderPublicKey": "8y2Uc9uYf5gRD6Dzm1aC73zYe3LZvtVDUVAnAhNdN2mg", "proofs": [ "3UvGkCLm2xzxssbkXQHLEto8KdAj5KMGJW3DSTMHysxz8N5Lz1XdYLcDouLmdRA4dDPD5yTcRjApUjcuzo5UogtY" ], "script": "base64:AAIDAAAAAAAAAAAAAAAdAAAAAAthdWN0aW9uVGltZQAAAAAAAAAQ4AAAAAADZGF5AAAAAAAAAAWgAAAAAAljb21pc3Npb24AAAAAAAAAAAMAAAAABVdBVkVTBQAAAAR1bml0AAAAAAR3QlRDAQAAACBs+mr/xe2qjAt/tSqT0qIML4KC23R6BIxT+/0TH3Og/wAAAAAEd0VVUgEAAAAg7BZhBF97kSFBBjs38+fX1Pjz08YOqoCX85C/0PoVupkAAAAABHdVU0QBAAAAIN0cvQHwz3UFMHgHsqi2OJjRRd1cH7ozWuNAb/pmWXD9AAAAAAlzdGF0ZU9wZW4CAAAABk9wZW5lZAAAAAAOc3RhdGVTdWdnZXN0ZWQCAAAACVN1Z2dlc3RlZAAAAAALc3RhdGVDYW5jZWwCAAAACENhbmNlbGVkAAAAAA9zdGF0ZUluUHJvZ3Jlc3MCAAAACkluUHJvZ3Jlc3MAAAAAEXN0YXRlV2FpdDRDb25maXJtAgAAABNXYWl0Rm9yQ29uZmlybWF0aW9uAAAAAA1zdGF0ZUNvbXBsZXRlAgAAAAlDb21wbGV0ZWQAAAAADHN0YXRlRGlzcHV0ZQIAAAAHRGlzcHV0ZQAAAAAUc3RhdGVEaXNwdXRlUmVzb2x2ZWQCAAAAD0Rpc3B1dGVSZXNvbHZlZAAAAAAIY3VzdG9tZXICAAAAA0NNUgAAAAAKZnJlZWxhbmNlcgIAAAACRkwAAAAAC2FtYmFzc2Fkb3IxAQAAAAEAAAAAAAthbWJhc3NhZG9yMgEAAAABAAAAAAALYW1iYXNzYWRvcjMBAAAAAQAAAAAAC2FtYmFzc2Fkb3I0AQAAAAEAAAAAAAthbWJhc3NhZG9yNQEAAAABAAEAAAALZ2V0RGF0YUxpc3QAAAABAAAACWF1Y3Rpb25JZAQAAAANZ2V0RGF0YVN0cmluZwkABB0AAAACBQAAAAR0aGlzBQAAAAlhdWN0aW9uSWQEAAAAAWEEAAAAByRtYXRjaDAFAAAADWdldERhdGFTdHJpbmcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABdBdWN0aW9uSWQgd2FzIG5vdCBmb3VuZAkABLUAAAACBQAAAAFhAgAAAAFfAQAAABJnZXREaXNwdXRlRGF0YUxpc3QAAAABAAAACWF1Y3Rpb25JZAQAAAAOa2V5RGlzcHV0ZURhdGEJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAAV8FAAAADHN0YXRlRGlzcHV0ZQQAAAAUZ2V0RGlzcHV0ZURhdGFTdHJpbmcJAAQdAAAAAgUAAAAEdGhpcwUAAAAOa2V5RGlzcHV0ZURhdGEEAAAAAWEEAAAAByRtYXRjaDAFAAAAFGdldERpc3B1dGVEYXRhU3RyaW5nAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAaRGlzcHV0ZSBkYXRhIHdhcyBub3QgZm91bmQJAAS1AAAAAgUAAAABYQIAAAABLwEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABAAAAEGF1Y3Rpb25Bc3NldE5hbWUDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAABVdBVkVTBQAAAAVXQVZFUwMJAAAAAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAADQlRDBQAAAAR3QlRDAwkAAAAAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAANFVVIFAAAABHdFVVIDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAA1VTRAUAAAAEd1VTRAkAAAIAAAABAgAAABJJbmNvcnJlY3QgQXNzZXQgSWQBAAAADWJldFByaWNlQ2hlY2sAAAACAAAACGJldFByaWNlAAAADGF1Y3Rpb25QcmljZQMJAABmAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAAhiZXRQcmljZQUAAAAIYmV0UHJpY2UJAAACAAAAAQkAASwAAAACAgAAADlCZXQgcHJpY2UgbXVzdCBiZSBsb3dlciB0aGFuIGFjdHVhbCBwcmljZS4gQWN0dWFsIHByaWNlOiAJAAGkAAAAAQUAAAAMYXVjdGlvblByaWNlAQAAAAl0aW1lQ2hlY2sAAAADAAAAC2N1cnJlbnRUaW1lAAAACXN0YXJ0VGltZQAAAA5leHBpcmF0aW9uVGltZQkAAGYAAAACCQAAZQAAAAIFAAAAC2N1cnJlbnRUaW1lBQAAAAlzdGFydFRpbWUFAAAADmV4cGlyYXRpb25UaW1lAQAAAAtmcmVlemVGdW5kcwAAAAMAAAAMcG10QXNzZXROYW1lAAAADGF1Y3Rpb25QcmljZQAAAA5kQXBwQ29tbWlzc2lvbgQAAAAPa2V5RnJlZXplZEZ1bmRzCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAMcG10QXNzZXROYW1lAgAAAAhfRnJlZXplZAQAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBAAAAAckbWF0Y2gwBQAAAA9rZXlGcmVlemVkRnVuZHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAkAAGUAAAACCQAAZAAAAAIFAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQUAAAAMYXVjdGlvblByaWNlBQAAAA5kQXBwQ29tbWlzc2lvbgEAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAAAAAEAAAAGY2FsbGVyBAAAABZmcmVlbGFuY2VySXNSZWdpc3RlcmVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAGY2FsbGVyAgAAAAdfU3RhdHVzBAAAAAckbWF0Y2gwBQAAABZmcmVlbGFuY2VySXNSZWdpc3RlcmVkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAjT25seSByZWdpc3RlcmVkIHVzZXJzIGNhbiBtYWtlIGJldHMAAAAJAAAAAWkBAAAABnNpZ25VcAAAAAEAAAAEaW5mbwQAAAANdXNlclB1YmxpY0tleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAEWFscmVhZHlSZWdpc3RlcmVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAALX1JlZ2lzdGVyZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAARYWxyZWFkeVJlZ2lzdGVyZWQJAAACAAAAAQIAAAAXVXNlciBhbHJlYWR5IHJlZ2lzdGVyZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkB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LAAAAAICAAAAE1BheW1lbnQgbXVzdCBiZSBpbiAFAAAAEGF1Y3Rpb25Bc3NldE5hbWUAAAABaQEAAAAVaW5jcmVhc2VFeGVjdXRpb25UaW1lAAAAAgAAAAlhdWN0aW9uSWQAAAANZXhlY3V0aW9uRGF5cwQAAAAGY2FsbGVyCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAPYXVjdGlvbkRhdGFMaXN0CQEAAAALZ2V0RGF0YUxpc3QAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25TdGF0ZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAAEAAAAD2F1Y3Rpb25DdXN0b21lcgkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAEEAAAAFGF1Y3Rpb25FeGVjdXRpb25UaW1lCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAADBAAAABduZXdBdWN0aW9uRXhlY3V0aW9uVGltZQQAAAAQbmV3RXhlY3V0aW9uVGltZQkAAGgAAAACBQAAAA1leGVjdXRpb25EYXlzBQAAAANkYXkDCQAAZgAAAAIFAAAAEG5ld0V4ZWN1dGlvblRpbWUFAAAAFGF1Y3Rpb25FeGVjdXRpb25UaW1lBQAAABBuZXdFeGVjdXRpb25UaW1lCQAAAgAAAAECAAAAOE5ldyBleGVjdXRpb24gdGltZSBtdXN0IG1vcmUgdGhhbiBjdXJyZW50IGV4ZWN1dGlvbiB0aW1lAwkAAAAAAAACBQAAAAZjYWxsZXIFAAAAD2F1Y3Rpb25DdXN0b21lcgMDAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgYJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAYJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA9zdGF0ZUluUHJvZ3Jlc3MEAAAADW5ld0RhdGFTdHJpbmcJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAA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", "chainId": 84, "height": 663058, "spentComplexity": 0 } View: original | compacted Prev: 3VKqRx4Uzk77ktaLWwwxj5dDeVSpm8e1Vk2PCADF1MGV Next: EntXs9xrRnEXHcdroPfb913ypGj4173xsXC5oHw6VoRc Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let wBTC = base58'1'
4+let auctionTime = 4320
5+
6+let day = 1440
7+
8+let comission = 3
9+
10+let WAVES = unit
11+
12+let wBTC = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
13+
14+let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
15+
16+let wUSD = base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'
17+
18+let stateOpen = "Opened"
19+
20+let stateSuggested = "Suggested"
21+
22+let stateCancel = "Canceled"
23+
24+let stateInProgress = "InProgress"
25+
26+let stateWait4Confirm = "WaitForConfirmation"
27+
28+let stateComplete = "Completed"
29+
30+let stateDispute = "Dispute"
31+
32+let stateDisputeResolved = "DisputeResolved"
33+
34+let customer = "CMR"
35+
36+let freelancer = "FL"
37+
38+let ambassador1 = base58'1'
39+
40+let ambassador2 = base58'1'
41+
42+let ambassador3 = base58'1'
43+
44+let ambassador4 = base58'1'
45+
46+let ambassador5 = base58'1'
47+
48+func getDataList (auctionId) = {
49+ let getDataString = getString(this, auctionId)
50+ let a = match getDataString {
51+ case a: String =>
52+ a
53+ case _ =>
54+ throw("AuctionId was not found")
55+ }
56+ split(a, "_")
57+ }
58+
59+
60+func getDisputeDataList (auctionId) = {
61+ let keyDisputeData = ((auctionId + "_") + stateDispute)
62+ let getDisputeDataString = getString(this, keyDisputeData)
63+ let a = match getDisputeDataString {
64+ case a: String =>
65+ a
66+ case _ =>
67+ throw("Dispute data was not found")
68+ }
69+ split(a, "/")
70+ }
71+
72+
73+func AssetNameToBase58 (auctionAssetName) = if ((auctionAssetName == "WAVES"))
74+ then WAVES
75+ else if ((auctionAssetName == "BTC"))
76+ then wBTC
77+ else if ((auctionAssetName == "EUR"))
78+ then wEUR
79+ else if ((auctionAssetName == "USD"))
80+ then wUSD
81+ else throw("Incorrect Asset Id")
82+
83+
84+func betPriceCheck (betPrice,auctionPrice) = if ((auctionPrice > betPrice))
85+ then betPrice
86+ else throw(("Bet price must be lower than actual price. Actual price: " + toString(auctionPrice)))
87+
88+
89+func timeCheck (currentTime,startTime,expirationTime) = ((currentTime - startTime) > expirationTime)
90+
91+
92+func freezeFunds (pmtAssetName,auctionPrice,dAppCommission) = {
93+ let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
94+ let currentFreezedBalance = match keyFreezedFunds {
95+ case a: Int =>
96+ a
97+ case _ =>
98+ 0
99+ }
100+ ((currentFreezedBalance + auctionPrice) - dAppCommission)
101+ }
102+
103+
104+func freelancerIsRegistered (caller) = {
105+ let freelancerIsRegistered = getString(this, (caller + "_Status"))
106+ match freelancerIsRegistered {
107+ case a: String =>
108+ a
109+ case _ =>
110+ throw("Only registered users can make bets")
111+ }
112+ }
113+
5114
6115 @Callable(i)
7-func function (auctionAssetName) = {
8- let pmt = extract(i.payment)
9- let assetId = pmt.assetId
10- let AssetIdCheck = if ((auctionAssetName == "WAVES"))
11- then unit
12- else if ((auctionAssetName == "BTC"))
13- then wBTC
14- else throw("Incorrect Asset Id")
15- ScriptResult(WriteSet([DataEntry("asset", auctionAssetName)]), TransferSet([ScriptTransfer(i.caller, 1, AssetIdCheck)]))
116+func signUp (info) = {
117+ let userPublicKey = toBase58String(i.callerPublicKey)
118+ let alreadyRegistered = getString(this, (userPublicKey + "_Registered"))
119+ if (isDefined(alreadyRegistered))
120+ then throw("User already registered")
121+ else WriteSet([DataEntry((userPublicKey + "_Registered"), info)])
16122 }
17123
124+
125+
126+@Callable(i)
127+func createAuction (executionDays) = {
128+ let auctionId = toBase58String(i.transactionId)
129+ let auctionCustomer = toBase58String(i.callerPublicKey)
130+ let pmt = extract(i.payment)
131+ let auctionPrice = if ((pmt.amount > 0))
132+ then pmt.amount
133+ else throw("Amount must be higher then 0")
134+ let auctionStart = height
135+ let blocksForExecution = (executionDays * day)
136+ let dAppCommission = ((auctionPrice * 3) / 100)
137+ let pmtAssetName = if (!(isDefined(pmt.assetId)))
138+ then "WAVES"
139+ else if ((pmt.assetId == wBTC))
140+ then "BTC"
141+ else if ((pmt.assetId == wEUR))
142+ then "EUR"
143+ else if ((pmt.assetId == wUSD))
144+ then "USD"
145+ else throw("AssetId is incorrect")
146+ let newFreezedBalance = freezeFunds(pmtAssetName, auctionPrice, dAppCommission)
147+ WriteSet([DataEntry(auctionId, ((((((((((stateOpen + "_") + auctionCustomer) + "_") + toString(auctionStart)) + "_") + toString(blocksForExecution)) + "_") + pmtAssetName) + "_") + toString(auctionPrice))), DataEntry((pmtAssetName + "_Freezed"), newFreezedBalance)])
148+ }
149+
150+
151+
152+@Callable(i)
153+func makeBet (auctionId,betPrice) = {
154+ let pmt = extract(i.payment)
155+ let pmtAssetId = pmt.assetId
156+ let caller = toBase58String(i.callerPublicKey)
157+ let betTime = height
158+ let auctionDataList = getDataList(auctionId)
159+ let auctionState = auctionDataList[0]
160+ let auctionCustomer = fromBase58String(auctionDataList[1])
161+ let auctionStart = parseIntValue(auctionDataList[2])
162+ let auctionAssetName = auctionDataList[4]
163+ let auctionPrice = parseIntValue(auctionDataList[5])
164+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
165+ let newBet = betPriceCheck(betPrice, auctionPrice)
166+ let newFreelancer = freelancerIsRegistered(caller)
167+ let pmtAssetName = if ((pmtAssetId == WAVES))
168+ then "WAVES"
169+ else if ((pmtAssetId == wBTC))
170+ then "BTC"
171+ else if ((pmtAssetId == wEUR))
172+ then "EUR"
173+ else if ((pmtAssetId == wUSD))
174+ then "USD"
175+ else throw("AssetId is incorrect")
176+ let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionTime)
177+ if ((pmtAssetId == auctionAssetId58))
178+ then if (auctionTimeisOver)
179+ then if ((auctionState == stateOpen))
180+ then {
181+ let dataString = ((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5])
182+ let amountWithoutComm = (auctionPrice - ((auctionPrice * 3) / 100))
183+ ScriptResult(WriteSet([DataEntry(auctionId, ((stateCancel + "_") + dataString))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), amountWithoutComm, auctionAssetId58)]))
184+ }
185+ else if ((auctionState == stateSuggested))
186+ then {
187+ let dataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
188+ WriteSet([DataEntry(auctionId, ((stateInProgress + "_") + dataString))])
189+ }
190+ else throw(((((("Incorrect auctionId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
191+ else if (if ((auctionState == stateOpen))
192+ then true
193+ else (auctionState == stateSuggested))
194+ then {
195+ let dataString = ((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4])
196+ WriteSet([DataEntry(auctionId, ((((((stateSuggested + "_") + dataString) + "_") + toString(newBet)) + "_") + newFreelancer))])
197+ }
198+ else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
199+ else throw(("Payment must be in " + auctionAssetName))
200+ }
201+
202+
203+
204+@Callable(i)
205+func increaseExecutionTime (auctionId,executionDays) = {
206+ let caller = toBase58String(i.callerPublicKey)
207+ let auctionDataList = getDataList(auctionId)
208+ let auctionState = auctionDataList[0]
209+ let auctionCustomer = auctionDataList[1]
210+ let auctionExecutionTime = parseIntValue(auctionDataList[3])
211+ let newAuctionExecutionTime = {
212+ let newExecutionTime = (executionDays * day)
213+ if ((newExecutionTime > auctionExecutionTime))
214+ then newExecutionTime
215+ else throw("New execution time must more than current execution time")
216+ }
217+ if ((caller == auctionCustomer))
218+ then if (if (if ((auctionState == stateOpen))
219+ then true
220+ else (auctionState == stateSuggested))
221+ then true
222+ else (auctionState == stateInProgress))
223+ then {
224+ let newDataString = ((((((((((((auctionState + "_") + auctionCustomer) + "_") + auctionDataList[2]) + "_") + toString(newAuctionExecutionTime)) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
225+ WriteSet([DataEntry(auctionId, newDataString)])
226+ }
227+ else throw("Incorrect state")
228+ else throw("Only customer can increase execution time")
229+ }
230+
231+
232+
233+@Callable(i)
234+func cancelAuction (auctionId) = {
235+ let auctionDataList = getDataList(auctionId)
236+ let auctionState = auctionDataList[0]
237+ let auctionCustomer = fromBase58String(auctionDataList[1])
238+ let auctionIdOwnerCheck = if ((i.callerPublicKey == auctionCustomer))
239+ then true
240+ else throw("Auction can be canceled only by owner.")
241+ if ((auctionState == stateOpen))
242+ then {
243+ let dataString = ((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5])
244+ WriteSet([DataEntry(auctionId, ((stateCancel + "_") + dataString))])
245+ }
246+ else throw("Incorrect auction state.")
247+ }
248+
249+
250+
251+@Callable(i)
252+func openDispute (auctionId) = {
253+ let caller = toBase58String(i.callerPublicKey)
254+ let auctionDataList = getDataList(auctionId)
255+ let auctionState = auctionDataList[0]
256+ let auctionCustomer = auctionDataList[1]
257+ let auctionFreelancer = auctionDataList[6]
258+ if (if ((caller == auctionCustomer))
259+ then true
260+ else (caller == auctionFreelancer))
261+ then {
262+ let dataString = "1"
263+ WriteSet([DataEntry(auctionId, (stateDispute + dataString)), DataEntry((auctionId + "_Dispute"), "0")])
264+ }
265+ else throw("Only customer and freelancer can open dispute")
266+ }
267+
268+
269+
270+@Callable(i)
271+func voteDispute (auctionId,vote) = {
272+ let auctionDataList = getDataList(auctionId)
273+ let auctionStateCheck = {
274+ let auctionState = auctionDataList[0]
275+ if ((auctionState == stateDispute))
276+ then true
277+ else throw(("Incorrect state. Must be: " + stateDispute))
278+ }
279+ let auctionAssetId = auctionDataList[4]
280+ let auctionPrice = parseIntValue(auctionDataList[5])
281+ let newVote = if (if ((vote == customer))
282+ then true
283+ else (vote == freelancer))
284+ then vote
285+ else throw(((("Vote is incorrect. Must be: " + customer) + " or ") + freelancer))
286+ let newVoter = if (if (if (if (if ((i.callerPublicKey == ambassador1))
287+ then true
288+ else (i.callerPublicKey == ambassador2))
289+ then true
290+ else (i.callerPublicKey == ambassador3))
291+ then true
292+ else (i.callerPublicKey == ambassador4))
293+ then true
294+ else (i.callerPublicKey == ambassador5))
295+ then toBase58String(i.callerPublicKey)
296+ else throw("You have no rights for disputes resolving")
297+ let disputeData = {
298+ let keyDispute = ((auctionId + "_") + stateDispute)
299+ let valueDispute = getString(this, keyDispute)
300+ match valueDispute {
301+ case a: String =>
302+ a
303+ case _ =>
304+ throw("Cannot find data of dispute in storage")
305+ }
306+ }
307+ let disputeDataList = split(disputeData, "/")
308+ let votesCounter = disputeDataList[0]
309+ if ((votesCounter == "4"))
310+ then {
311+ let votersList = split(disputeDataList[1], "_")
312+ let votesList = split(disputeDataList[2], "_")
313+ let alreadyVoted = if ((newVoter == votersList[0]))
314+ then true
315+ else (newVoter == votersList[1])
316+ if (alreadyVoted)
317+ then throw("You already voted")
318+ else {
319+ let newVotesCounter = "5"
320+ let newVoters = ((disputeDataList[1] + "_") + newVoter)
321+ let newVotes = ((disputeDataList[2] + "_") + newVote)
322+ let newDisputeDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
323+ let disputeWinner = {
324+ let vote1 = if ((votesList[0] == customer))
325+ then 1
326+ else 0
327+ let vote2 = if ((votesList[1] == customer))
328+ then 1
329+ else 0
330+ let vote3 = if ((votesList[2] == customer))
331+ then 1
332+ else 0
333+ let vote4 = if ((votesList[3] == customer))
334+ then 1
335+ else 0
336+ let vote5 = if ((newVote == customer))
337+ then 1
338+ else 0
339+ let customerVotes = ((((vote1 + vote2) + vote3) + vote4) + vote5)
340+ if ((customerVotes > 2))
341+ then customer
342+ else freelancer
343+ }
344+ let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
345+ let DisputeWinnerAddress = if ((disputeWinner == customer))
346+ then auctionDataList[1]
347+ else auctionDataList[6]
348+ let amountWithoutComm = (auctionPrice - ((auctionPrice * 3) / 100))
349+ ScriptResult(WriteSet([DataEntry(auctionId, (stateDisputeResolved + newDataString)), DataEntry(((auctionId + "_") + stateDispute), newDisputeDataString)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(DisputeWinnerAddress)), amountWithoutComm, fromBase58String(auctionAssetId))]))
350+ }
351+ }
352+ else {
353+ let newDisputeDataString = if ((votesCounter == "0"))
354+ then {
355+ let newVotesCounter = "1"
356+ let newVoters = newVoter
357+ let newVotes = newVote
358+ let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
359+ newDataString
360+ }
361+ else if ((votesCounter == "1"))
362+ then {
363+ let voter1 = disputeDataList[1]
364+ let vote1 = disputeDataList[2]
365+ let alreadyVoted = (newVoter == voter1)
366+ if (alreadyVoted)
367+ then throw("You already voted")
368+ else {
369+ let newVotesCounter = "1"
370+ let newVoters = (voter1 + newVoter)
371+ let newVotes = (vote1 + newVote)
372+ let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
373+ newDataString
374+ }
375+ }
376+ else if ((votesCounter == "2"))
377+ then {
378+ let votersList = split(disputeDataList[1], "_")
379+ let votesList = split(disputeDataList[2], "_")
380+ let alreadyVoted = if ((newVoter == votersList[0]))
381+ then true
382+ else (newVoter == votersList[1])
383+ if (alreadyVoted)
384+ then throw("You already voted")
385+ else {
386+ let newVotesCounter = "3"
387+ let newVoters = ((disputeDataList[1] + "_") + newVoter)
388+ let newVotes = ((disputeDataList[2] + "_") + newVote)
389+ let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
390+ newDataString
391+ }
392+ }
393+ else if ((votesCounter == "3"))
394+ then {
395+ let votersList = split(disputeDataList[1], "_")
396+ let votesList = split(disputeDataList[2], "_")
397+ let alreadyVoted = if (if ((newVoter == votersList[0]))
398+ then true
399+ else (newVoter == votersList[1]))
400+ then true
401+ else (newVoter == votersList[2])
402+ if (alreadyVoted)
403+ then throw("You already voted")
404+ else {
405+ let newVotesCounter = "4"
406+ let newVoters = ((disputeDataList[1] + "_") + newVoter)
407+ let newVotes = ((disputeDataList[2] + "_") + newVote)
408+ let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
409+ newDataString
410+ }
411+ }
412+ else throw("Dispute has been already resolved")
413+ WriteSet([DataEntry(((auctionId + "_") + stateDispute), newDisputeDataString)])
414+ }
415+ }
416+
417+
418+
419+@Callable(i)
420+func workIsDone (auctionId) = {
421+ let auctionDataList = getDataList(auctionId)
422+ let auctionState = auctionDataList[0]
423+ let auctionStart = parseIntValue(auctionDataList[2])
424+ let auctionExecutionTime = parseIntValue(auctionDataList[3])
425+ let currentTime = height
426+ let freelancerPubCheck = {
427+ let caller = toBase58String(i.callerPublicKey)
428+ let auctionFreelancer = auctionDataList[6]
429+ if ((caller == auctionFreelancer))
430+ then caller
431+ else throw("Only a freelancer can indicate that the work is done")
432+ }
433+ let timeIsOver = ((currentTime - auctionStart) > auctionExecutionTime)
434+ if ((auctionState == stateInProgress))
435+ then if (timeIsOver)
436+ then {
437+ let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
438+ WriteSet([DataEntry(auctionId, (stateDispute + newDataString))])
439+ }
440+ else {
441+ let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
442+ WriteSet([DataEntry(auctionId, (stateWait4Confirm + newDataString))])
443+ }
444+ else throw("Auction state is incorrect")
445+ }
446+
447+
448+
449+@Callable(i)
450+func acceptByCustomer (auctionId) = {
451+ let auctionDataList = getDataList(auctionId)
452+ let auctionState = auctionDataList[0]
453+ let auctionCustomer = auctionDataList[1]
454+ let auctionAssetName = auctionDataList[4]
455+ let auctionPrice = parseIntValue(auctionDataList[5])
456+ let auctionFreelancer = auctionDataList[6]
457+ let caller = toBase58String(i.callerPublicKey)
458+ let dAppCommission = ((auctionPrice * 3) / 100)
459+ let amountWithoutComm = (auctionPrice - dAppCommission)
460+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
461+ let newRating = {
462+ let valueRating = getInteger(this, (auctionFreelancer + "_Rating"))
463+ let currentRating = match valueRating {
464+ case a: Int =>
465+ a
466+ case _ =>
467+ 0
468+ }
469+ (currentRating + 1)
470+ }
471+ if ((caller == auctionCustomer))
472+ then if ((auctionState == stateWait4Confirm))
473+ then {
474+ let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
475+ ScriptResult(WriteSet([DataEntry(auctionId, (stateComplete + newDataString)), DataEntry((auctionFreelancer + "_Rating"), newRating)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionFreelancer)), amountWithoutComm, auctionAssetId58)]))
476+ }
477+ else throw(("Incorrect state. Must be: " + stateWait4Confirm))
478+ else throw("Only auction customer can use this function")
479+ }
480+
481+
482+@Verifier(tx)
483+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
484+ then match tx {
485+ case ttx: TransferTransaction =>
486+ true
487+ case stx: SetScriptTransaction =>
488+ true
489+ case _ =>
490+ false
491+ }
492+ else false
18493

github/deemru/w8io/873ac7e 
42.67 ms