tx · 7AHHT3XXpje6pfzqQLGsDR2wQHWDUgxkH36ajRVLms2c 3N8nB5XeXcXTUDeiH6657UHa3wHa2rbZfDk: -0.01500000 Waves 2021.06.04 18:29 [1555802] smart account 3N8nB5XeXcXTUDeiH6657UHa3wHa2rbZfDk > SELF 0.00000000 Waves
{ "type": 13, "id": "7AHHT3XXpje6pfzqQLGsDR2wQHWDUgxkH36ajRVLms2c", "fee": 1500000, "feeAssetId": null, "timestamp": 1622820583821, "version": 2, "chainId": 84, "sender": "3N8nB5XeXcXTUDeiH6657UHa3wHa2rbZfDk", "senderPublicKey": "BfXK2ez9xjdgWtoFNsnaGPRFjHcFixy3UUrQ2iN8wVfX", "proofs": [ "4nJvvw8uFpBvqjBnRmjEPxjGLmPmcHvqWU1FGra1BgXyJUB6x5xFj5NSV1i9jvCEQCph7tp2rZvTsmswEw5rJs6i" ], "script": "base64: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", "height": 1555802, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2muLREsdsNEzCcWV3TmizEMrKD2DrZhhQJkoKh9R19J3 Next: 5TxjzkFww5CU9Uiqtggwwj6RcrRUrbKQh26ZbedTpcDu Diff:
Old | New | Differences | |
---|---|---|---|
6 | 6 | ||
7 | 7 | @Callable(i) | |
8 | 8 | func createParkingSpot (owner,lat,long,startTime,endTime,cost) = { | |
9 | - | let | |
10 | - | let | |
11 | - | let data = createParkingSpotSlice(toBase64String(i.transactionId), | |
9 | + | let bookedStartTime = (startTime - (startTime % 3600)) | |
10 | + | let bookedEndTime = (endTime - (endTime % 3600)) | |
11 | + | let data = createParkingSpotSlice(toBase64String(i.transactionId), bookedStartTime, bookedEndTime, 0) | |
12 | 12 | ([StringEntry((toBase58String(i.transactionId) + "_owner"), owner), IntegerEntry((toBase58String(i.transactionId) + "_lat"), lat), IntegerEntry((toBase58String(i.transactionId) + "_long"), long), IntegerEntry((toBase58String(i.transactionId) + "_cost"), cost), IntegerEntry((toBase58String(i.transactionId) + "_slice"), 0)] ++ data) | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | ||
17 | 17 | @Callable(i) | |
18 | - | func | |
19 | - | let | |
20 | - | let | |
18 | + | func bookParkingSpotSlice (parkingSpotId,slice,startTime,endTime,renter) = { | |
19 | + | let bookedStartTime = (startTime - (startTime % 3600)) | |
20 | + | let bookedEndTime = (startTime - (startTime % 3600)) | |
21 | 21 | let parkingSpotStartTime = getIntegerValue(this, (((parkingSpotId + "_slice_") + toString(slice)) + "_startTime")) | |
22 | 22 | let parkingSpotEndTime = getIntegerValue(this, (((parkingSpotId + "_slice_") + toString(slice)) + "_endTime")) | |
23 | - | if (if ((parkingSpotStartTime > | |
23 | + | if (if ((parkingSpotStartTime > bookedStartTime)) | |
24 | 24 | then true | |
25 | - | else (( | |
25 | + | else ((bookedStartTime + 3600) > parkingSpotEndTime)) | |
26 | 26 | then throw("time is out of range for parking spot") | |
27 | 27 | else { | |
28 | 28 | let existingRenter = getString(this, (((parkingSpotId + "_slice_") + toString(slice)) + "_renter")) | |
29 | 29 | if ((existingRenter != unit)) | |
30 | 30 | then throw("parking spot has already been booked") | |
31 | - | else if (if (( | |
32 | - | then ( | |
31 | + | else if (if ((bookedStartTime == parkingSpotStartTime)) | |
32 | + | then (bookedStartTime == parkingSpotEndTime) | |
33 | 33 | else false) | |
34 | 34 | then [StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] | |
35 | - | else if ((roundedStartTime == parkingSpotStartTime)) | |
36 | - | then ([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, roundedEndTime, parkingSpotEndTime, (slice + 1))) | |
37 | - | else if ((roundedEndTime == parkingSpotEndTime)) | |
38 | - | then [StringEntry((((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked"), renter)] | |
39 | - | else [StringEntry((((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked"), renter)] | |
40 | - | } | |
41 | - | } | |
42 | - | ||
43 | - | ||
44 | - | ||
45 | - | @Callable(i) | |
46 | - | func rentParkingSpot (parkingSpotId,startTime,renter) = { | |
47 | - | let roundedStartTime = (startTime - (startTime % 3600)) | |
48 | - | let parkingSpotStartTime = getIntegerValue(this, (parkingSpotId + "_startTime")) | |
49 | - | let parkingSpotEndTime = getIntegerValue(this, (parkingSpotId + "_endTime")) | |
50 | - | if (if ((parkingSpotStartTime > roundedStartTime)) | |
51 | - | then true | |
52 | - | else ((roundedStartTime + 3600) > parkingSpotEndTime)) | |
53 | - | then throw("time is out of range for parking spot") | |
54 | - | else { | |
55 | - | let bookingEntry = getString(this, (((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked")) | |
56 | - | if ((bookingEntry != unit)) | |
57 | - | then throw("timeslot has already been booked") | |
58 | - | else [StringEntry((((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked"), renter)] | |
35 | + | else if ((bookedStartTime == parkingSpotStartTime)) | |
36 | + | then ([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, bookedEndTime, parkingSpotEndTime, (slice + 1))) | |
37 | + | else if ((bookedEndTime == parkingSpotEndTime)) | |
38 | + | then ([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, parkingSpotStartTime, bookedStartTime, (slice + 1))) | |
39 | + | else (([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, parkingSpotStartTime, bookedStartTime, (slice + 1))) ++ createParkingSpotSlice(parkingSpotId, bookedEndTime, parkingSpotEndTime, (slice + 2))) | |
59 | 40 | } | |
60 | 41 | } | |
61 | 42 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func createParkingSpotSlice (parkingSpotId,startTime,endTime,slice) = [IntegerEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_startTime"), startTime), IntegerEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_endTime"), endTime)] | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | @Callable(i) | |
8 | 8 | func createParkingSpot (owner,lat,long,startTime,endTime,cost) = { | |
9 | - | let | |
10 | - | let | |
11 | - | let data = createParkingSpotSlice(toBase64String(i.transactionId), | |
9 | + | let bookedStartTime = (startTime - (startTime % 3600)) | |
10 | + | let bookedEndTime = (endTime - (endTime % 3600)) | |
11 | + | let data = createParkingSpotSlice(toBase64String(i.transactionId), bookedStartTime, bookedEndTime, 0) | |
12 | 12 | ([StringEntry((toBase58String(i.transactionId) + "_owner"), owner), IntegerEntry((toBase58String(i.transactionId) + "_lat"), lat), IntegerEntry((toBase58String(i.transactionId) + "_long"), long), IntegerEntry((toBase58String(i.transactionId) + "_cost"), cost), IntegerEntry((toBase58String(i.transactionId) + "_slice"), 0)] ++ data) | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | ||
17 | 17 | @Callable(i) | |
18 | - | func | |
19 | - | let | |
20 | - | let | |
18 | + | func bookParkingSpotSlice (parkingSpotId,slice,startTime,endTime,renter) = { | |
19 | + | let bookedStartTime = (startTime - (startTime % 3600)) | |
20 | + | let bookedEndTime = (startTime - (startTime % 3600)) | |
21 | 21 | let parkingSpotStartTime = getIntegerValue(this, (((parkingSpotId + "_slice_") + toString(slice)) + "_startTime")) | |
22 | 22 | let parkingSpotEndTime = getIntegerValue(this, (((parkingSpotId + "_slice_") + toString(slice)) + "_endTime")) | |
23 | - | if (if ((parkingSpotStartTime > | |
23 | + | if (if ((parkingSpotStartTime > bookedStartTime)) | |
24 | 24 | then true | |
25 | - | else (( | |
25 | + | else ((bookedStartTime + 3600) > parkingSpotEndTime)) | |
26 | 26 | then throw("time is out of range for parking spot") | |
27 | 27 | else { | |
28 | 28 | let existingRenter = getString(this, (((parkingSpotId + "_slice_") + toString(slice)) + "_renter")) | |
29 | 29 | if ((existingRenter != unit)) | |
30 | 30 | then throw("parking spot has already been booked") | |
31 | - | else if (if (( | |
32 | - | then ( | |
31 | + | else if (if ((bookedStartTime == parkingSpotStartTime)) | |
32 | + | then (bookedStartTime == parkingSpotEndTime) | |
33 | 33 | else false) | |
34 | 34 | then [StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] | |
35 | - | else if ((roundedStartTime == parkingSpotStartTime)) | |
36 | - | then ([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, roundedEndTime, parkingSpotEndTime, (slice + 1))) | |
37 | - | else if ((roundedEndTime == parkingSpotEndTime)) | |
38 | - | then [StringEntry((((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked"), renter)] | |
39 | - | else [StringEntry((((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked"), renter)] | |
40 | - | } | |
41 | - | } | |
42 | - | ||
43 | - | ||
44 | - | ||
45 | - | @Callable(i) | |
46 | - | func rentParkingSpot (parkingSpotId,startTime,renter) = { | |
47 | - | let roundedStartTime = (startTime - (startTime % 3600)) | |
48 | - | let parkingSpotStartTime = getIntegerValue(this, (parkingSpotId + "_startTime")) | |
49 | - | let parkingSpotEndTime = getIntegerValue(this, (parkingSpotId + "_endTime")) | |
50 | - | if (if ((parkingSpotStartTime > roundedStartTime)) | |
51 | - | then true | |
52 | - | else ((roundedStartTime + 3600) > parkingSpotEndTime)) | |
53 | - | then throw("time is out of range for parking spot") | |
54 | - | else { | |
55 | - | let bookingEntry = getString(this, (((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked")) | |
56 | - | if ((bookingEntry != unit)) | |
57 | - | then throw("timeslot has already been booked") | |
58 | - | else [StringEntry((((parkingSpotId + "_") + toString(roundedStartTime)) + "_booked"), renter)] | |
35 | + | else if ((bookedStartTime == parkingSpotStartTime)) | |
36 | + | then ([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, bookedEndTime, parkingSpotEndTime, (slice + 1))) | |
37 | + | else if ((bookedEndTime == parkingSpotEndTime)) | |
38 | + | then ([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, parkingSpotStartTime, bookedStartTime, (slice + 1))) | |
39 | + | else (([StringEntry((((parkingSpotId + "_slice_") + toString(slice)) + "_renter"), renter)] ++ createParkingSpotSlice(parkingSpotId, parkingSpotStartTime, bookedStartTime, (slice + 1))) ++ createParkingSpotSlice(parkingSpotId, bookedEndTime, parkingSpotEndTime, (slice + 2))) | |
59 | 40 | } | |
60 | 41 | } | |
61 | 42 | ||
62 | 43 | ||
63 | 44 | @Verifier(tx) | |
64 | 45 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
65 | 46 |
github/deemru/w8io/169f3d6 43.96 ms ◑