tx · C65NVkb7e5uaftUpZ7dAgaicUhjiUDUn6ggQQd3Aueqd 3PMnUb4sdmj8EdXHEXejv1SSayFyvQAezYZ: -0.05000000 Waves 2021.02.05 17:32 [2448770] smart account 3PMnUb4sdmj8EdXHEXejv1SSayFyvQAezYZ > SELF 0.00000000 Waves
{ "type": 13, "id": "C65NVkb7e5uaftUpZ7dAgaicUhjiUDUn6ggQQd3Aueqd", "fee": 5000000, "feeAssetId": null, "timestamp": 1612535621363, "version": 2, "chainId": 87, "sender": "3PMnUb4sdmj8EdXHEXejv1SSayFyvQAezYZ", "senderPublicKey": "8mTioppAL28oraN6ndifcjFcihYgA3mTyEaKXE42Ms5W", "proofs": [ "4iszCRVpsPatCJuzguvvV3KoaoxjqamnDaUKPbfn56io57h9YLqdNJ7rLFCaXbheYoAM6uDqoqUFbxiLCXPc6dD7" ], "script": "base64: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AwkAAAAAAAACBQAAAA0kc2l6ZTExNzIxMjEyAAAAAAAAAAACBQAAAA0kYWNjMjExNzIxMjEyBAAAAA0kYWNjMzExNzIxMjEyCQEAAAAUY29tcGFyZVByaWNlQXRIZWlnaHQAAAACBQAAAA0kYWNjMjExNzIxMjEyCQABkQAAAAIFAAAADSRsaXN0MTE3MjEyMTIAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplMTE3MjEyMTIAAAAAAAAAAAMFAAAADSRhY2MzMTE3MjEyMTIEAAAADSRhY2M0MTE3MjEyMTIJAQAAABRjb21wYXJlUHJpY2VBdEhlaWdodAAAAAIFAAAADSRhY2MzMTE3MjEyMTIJAAGRAAAAAgUAAAANJGxpc3QxMTcyMTIxMgAAAAAAAAAAAwMJAAAAAAAAAgUAAAANJHNpemUxMTcyMTIxMgAAAAAAAAAABAUAAAANJGFjYzQxMTcyMTIxMgQAAAANJGFjYzUxMTcyMTIxMgkBAAAAFGNvbXBhcmVQcmljZUF0SGVpZ2h0AAAAAgUAAAANJGFjYzQxMTcyMTIxMgkAAZEAAAACBQAAAA0kbGlzdDExNzIxMjEyAAAAAAAAAAAEAwkAAAAAAAACBQAAAA0kc2l6ZTExNzIxMjEyAAAAAAAAAAAFBQAAAA0kYWNjNTExNzIxMjEyBAAAAA0kYWNjNjExNzIxMjEyCQEAAAAUY29tcGFyZVByaWNlQXRIZWlnaHQAAAACBQAAAA0kYWNjNTExNzIxMjEyCQABkQAAAAIFAAAADSRsaXN0MTE3MjEyMTIAAAAAAAAAAAUDCQAAAAAAAAIFAAAADSRzaXplMTE3MjEyMTIAAAAAAAAAAAYFAAAADSRhY2M2MTE3MjEyMTIEAAAADSRhY2M3MTE3MjEyMTIJAQAAABRjb21wYXJlUHJpY2VBdEhlaWdodAAAAAIFAAAADSRhY2M2MTE3MjEyMTIJAAGRAAAAAgUAAAANJGxpc3QxMTcyMTIxMgAAAAAAAAAABgMJAAAAAAAAAgUAAAANJHNpemUxMTcyMTIxMgAAAAAAAAAABwUAAAANJGFjYzcxMTcyMTIxMgQAAAANJGFjYzgxMTcyMTIxMgkBAAAAFGNvbXBhcmVQcmljZUF0SGVpZ2h0AAAAAgUAAAANJGFjYzcxMTcyMTIxMgkAAZEA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BQAAAAFpAAAABmNhbGxlcgQAAAAObG9uZ0FkZHJlc3NLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABWxvbmdfCQABpAAAAAEFAAAACmxvbmdUYXJnZXQCAAAAAV8FAAAABmNhbGxlcgQAAAANbG9uZ3NUb3RhbEtleQkAASwAAAACAgAAAAxsb25nc190b3RhbF8JAAGkAAAAAQUAAAAKbG9uZ1RhcmdldAQAAAAbY3VycmVudExvbmdBbW91bnRGb3JBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAADmxvbmdBZGRyZXNzS2V5AAAAAAAAAAAABAAAAAxjdXJyZW50TG9uZ3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAANbG9uZ3NUb3RhbEtleQAAAAAAAAAAAAQAAAAHcGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAGYW1vdW50CAUAAAAHcGF5bWVudAAAAAZhbW91bnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACZPbmx5IFdhdmVzIHBheW1lbnRzIGFsbG93ZWQgY3VycmVudGx5IQMJAABnAAAAAgkAAGQAAAACBQAAAAZoZWlnaHQFAAAADkNPT0xET1dOUEVSSU9EBQAAAApsb25nVGFyZ2V0CQAAAgAAAAECAAAAU1JlY292ZXJ5IHBoYXNlIGFjdGl2ZS4gWW91IGNhbiBubyBsb25nZXIgZ28gbG9uZyB0b3dhcmRzIHRoaXMgbG9uZyB0YXJnZXQgLyBoZWlnaHQhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA5sb25nQWRkcmVzc0tleQkAAGQAAAACBQAAABtjdXJyZW50TG9uZ0Ftb3VudEZvckFkZHJlc3MFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANbG9uZ3NUb3RhbEtleQkAAGQAAAACBQAAAAxjdXJyZW50TG9uZ3MFAAAABmFtb3VudAUAAAADbmlsAAAAAAy2xsQ=", "height": 2448770, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6CqqmhsjRvMq2QauBxceyqyPoneprNPWsGkr1wafHsKq Next: 22rhVxtSR5SNzmqdVfqjbtnZMZPE14jX9EMqfxSJPP5s Diff:
Old | New | Differences | |
---|---|---|---|
8 | 8 | func payCaller (target,caller,amoung) = [IntegerEntry(((("long_" + toString(target)) + "_") + toString(caller)), 0), IntegerEntry(((("short_" + toString(target)) + "_") + toString(caller)), 0), ScriptTransfer(caller, amoung, unit)] | |
9 | 9 | ||
10 | 10 | ||
11 | - | func getPriceAtHeight ( | |
11 | + | func getPriceAtHeight (relevantHeight) = { | |
12 | 12 | let address = addressFromStringValue(PRICINGORACLE) | |
13 | - | let key = ("price_" + toString( | |
13 | + | let key = ("price_" + toString(relevantHeight)) | |
14 | 14 | valueOrElse(getInteger(address, key), 0) | |
15 | 15 | } | |
16 | 16 | ||
17 | 17 | ||
18 | - | func comparePriceAtHeight (result,step) = valueOrElse(getPriceAtHeight((height - step)), result) | |
18 | + | func comparePriceAtHeight (result,relevantHeight) = { | |
19 | + | let priceAtHeight = getPriceAtHeight(relevantHeight) | |
20 | + | if ((priceAtHeight > 0)) | |
21 | + | then priceAtHeight | |
22 | + | else result | |
23 | + | } | |
19 | 24 | ||
20 | 25 | ||
21 | - | func getClosestPrice ( | |
22 | - | let steps = [ | |
26 | + | func getClosestPrice (relevantHeight) = { | |
27 | + | let steps = [(relevantHeight - 9), (relevantHeight - 8), (relevantHeight - 7), (relevantHeight - 6), (relevantHeight - 5), (relevantHeight - 4), (relevantHeight - 3), (relevantHeight - 2), (relevantHeight - 1), (relevantHeight - 0)] | |
23 | 28 | let closestPrice = { | |
24 | - | let $ | |
25 | - | let $ | |
26 | - | let $ | |
27 | - | if (($ | |
28 | - | then $ | |
29 | + | let $list11721212 = steps | |
30 | + | let $size11721212 = size($list11721212) | |
31 | + | let $acc011721212 = 0 | |
32 | + | if (($size11721212 == 0)) | |
33 | + | then $acc011721212 | |
29 | 34 | else { | |
30 | - | let $ | |
31 | - | if (($ | |
32 | - | then $ | |
35 | + | let $acc111721212 = comparePriceAtHeight($acc011721212, $list11721212[0]) | |
36 | + | if (($size11721212 == 1)) | |
37 | + | then $acc111721212 | |
33 | 38 | else { | |
34 | - | let $ | |
35 | - | if (($ | |
36 | - | then $ | |
39 | + | let $acc211721212 = comparePriceAtHeight($acc111721212, $list11721212[1]) | |
40 | + | if (($size11721212 == 2)) | |
41 | + | then $acc211721212 | |
37 | 42 | else { | |
38 | - | let $ | |
39 | - | if (($ | |
40 | - | then $ | |
43 | + | let $acc311721212 = comparePriceAtHeight($acc211721212, $list11721212[2]) | |
44 | + | if (($size11721212 == 3)) | |
45 | + | then $acc311721212 | |
41 | 46 | else { | |
42 | - | let $ | |
43 | - | if (($ | |
44 | - | then $ | |
47 | + | let $acc411721212 = comparePriceAtHeight($acc311721212, $list11721212[3]) | |
48 | + | if (($size11721212 == 4)) | |
49 | + | then $acc411721212 | |
45 | 50 | else { | |
46 | - | let $ | |
47 | - | if (($ | |
48 | - | then $ | |
51 | + | let $acc511721212 = comparePriceAtHeight($acc411721212, $list11721212[4]) | |
52 | + | if (($size11721212 == 5)) | |
53 | + | then $acc511721212 | |
49 | 54 | else { | |
50 | - | let $ | |
51 | - | if (($ | |
52 | - | then $ | |
55 | + | let $acc611721212 = comparePriceAtHeight($acc511721212, $list11721212[5]) | |
56 | + | if (($size11721212 == 6)) | |
57 | + | then $acc611721212 | |
53 | 58 | else { | |
54 | - | let $ | |
55 | - | if (($ | |
56 | - | then $ | |
59 | + | let $acc711721212 = comparePriceAtHeight($acc611721212, $list11721212[6]) | |
60 | + | if (($size11721212 == 7)) | |
61 | + | then $acc711721212 | |
57 | 62 | else { | |
58 | - | let $ | |
59 | - | if (($ | |
60 | - | then $ | |
63 | + | let $acc811721212 = comparePriceAtHeight($acc711721212, $list11721212[7]) | |
64 | + | if (($size11721212 == 8)) | |
65 | + | then $acc811721212 | |
61 | 66 | else { | |
62 | - | let $ | |
63 | - | if (($ | |
64 | - | then $ | |
67 | + | let $acc911721212 = comparePriceAtHeight($acc811721212, $list11721212[8]) | |
68 | + | if (($size11721212 == 9)) | |
69 | + | then $acc911721212 | |
65 | 70 | else { | |
66 | - | let $ | |
67 | - | if (($ | |
68 | - | then $ | |
71 | + | let $acc1011721212 = comparePriceAtHeight($acc911721212, $list11721212[9]) | |
72 | + | if (($size11721212 == 10)) | |
73 | + | then $acc1011721212 | |
69 | 74 | else { | |
70 | - | let $ | |
75 | + | let $acc1111721212 = comparePriceAtHeight($acc1011721212, $list11721212[10]) | |
71 | 76 | throw("List size exceed 10") | |
72 | 77 | } | |
73 | 78 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let COOLDOWNPERIOD = 6000 | |
5 | 5 | ||
6 | 6 | let PRICINGORACLE = "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP" | |
7 | 7 | ||
8 | 8 | func payCaller (target,caller,amoung) = [IntegerEntry(((("long_" + toString(target)) + "_") + toString(caller)), 0), IntegerEntry(((("short_" + toString(target)) + "_") + toString(caller)), 0), ScriptTransfer(caller, amoung, unit)] | |
9 | 9 | ||
10 | 10 | ||
11 | - | func getPriceAtHeight ( | |
11 | + | func getPriceAtHeight (relevantHeight) = { | |
12 | 12 | let address = addressFromStringValue(PRICINGORACLE) | |
13 | - | let key = ("price_" + toString( | |
13 | + | let key = ("price_" + toString(relevantHeight)) | |
14 | 14 | valueOrElse(getInteger(address, key), 0) | |
15 | 15 | } | |
16 | 16 | ||
17 | 17 | ||
18 | - | func comparePriceAtHeight (result,step) = valueOrElse(getPriceAtHeight((height - step)), result) | |
18 | + | func comparePriceAtHeight (result,relevantHeight) = { | |
19 | + | let priceAtHeight = getPriceAtHeight(relevantHeight) | |
20 | + | if ((priceAtHeight > 0)) | |
21 | + | then priceAtHeight | |
22 | + | else result | |
23 | + | } | |
19 | 24 | ||
20 | 25 | ||
21 | - | func getClosestPrice ( | |
22 | - | let steps = [ | |
26 | + | func getClosestPrice (relevantHeight) = { | |
27 | + | let steps = [(relevantHeight - 9), (relevantHeight - 8), (relevantHeight - 7), (relevantHeight - 6), (relevantHeight - 5), (relevantHeight - 4), (relevantHeight - 3), (relevantHeight - 2), (relevantHeight - 1), (relevantHeight - 0)] | |
23 | 28 | let closestPrice = { | |
24 | - | let $ | |
25 | - | let $ | |
26 | - | let $ | |
27 | - | if (($ | |
28 | - | then $ | |
29 | + | let $list11721212 = steps | |
30 | + | let $size11721212 = size($list11721212) | |
31 | + | let $acc011721212 = 0 | |
32 | + | if (($size11721212 == 0)) | |
33 | + | then $acc011721212 | |
29 | 34 | else { | |
30 | - | let $ | |
31 | - | if (($ | |
32 | - | then $ | |
35 | + | let $acc111721212 = comparePriceAtHeight($acc011721212, $list11721212[0]) | |
36 | + | if (($size11721212 == 1)) | |
37 | + | then $acc111721212 | |
33 | 38 | else { | |
34 | - | let $ | |
35 | - | if (($ | |
36 | - | then $ | |
39 | + | let $acc211721212 = comparePriceAtHeight($acc111721212, $list11721212[1]) | |
40 | + | if (($size11721212 == 2)) | |
41 | + | then $acc211721212 | |
37 | 42 | else { | |
38 | - | let $ | |
39 | - | if (($ | |
40 | - | then $ | |
43 | + | let $acc311721212 = comparePriceAtHeight($acc211721212, $list11721212[2]) | |
44 | + | if (($size11721212 == 3)) | |
45 | + | then $acc311721212 | |
41 | 46 | else { | |
42 | - | let $ | |
43 | - | if (($ | |
44 | - | then $ | |
47 | + | let $acc411721212 = comparePriceAtHeight($acc311721212, $list11721212[3]) | |
48 | + | if (($size11721212 == 4)) | |
49 | + | then $acc411721212 | |
45 | 50 | else { | |
46 | - | let $ | |
47 | - | if (($ | |
48 | - | then $ | |
51 | + | let $acc511721212 = comparePriceAtHeight($acc411721212, $list11721212[4]) | |
52 | + | if (($size11721212 == 5)) | |
53 | + | then $acc511721212 | |
49 | 54 | else { | |
50 | - | let $ | |
51 | - | if (($ | |
52 | - | then $ | |
55 | + | let $acc611721212 = comparePriceAtHeight($acc511721212, $list11721212[5]) | |
56 | + | if (($size11721212 == 6)) | |
57 | + | then $acc611721212 | |
53 | 58 | else { | |
54 | - | let $ | |
55 | - | if (($ | |
56 | - | then $ | |
59 | + | let $acc711721212 = comparePriceAtHeight($acc611721212, $list11721212[6]) | |
60 | + | if (($size11721212 == 7)) | |
61 | + | then $acc711721212 | |
57 | 62 | else { | |
58 | - | let $ | |
59 | - | if (($ | |
60 | - | then $ | |
63 | + | let $acc811721212 = comparePriceAtHeight($acc711721212, $list11721212[7]) | |
64 | + | if (($size11721212 == 8)) | |
65 | + | then $acc811721212 | |
61 | 66 | else { | |
62 | - | let $ | |
63 | - | if (($ | |
64 | - | then $ | |
67 | + | let $acc911721212 = comparePriceAtHeight($acc811721212, $list11721212[8]) | |
68 | + | if (($size11721212 == 9)) | |
69 | + | then $acc911721212 | |
65 | 70 | else { | |
66 | - | let $ | |
67 | - | if (($ | |
68 | - | then $ | |
71 | + | let $acc1011721212 = comparePriceAtHeight($acc911721212, $list11721212[9]) | |
72 | + | if (($size11721212 == 10)) | |
73 | + | then $acc1011721212 | |
69 | 74 | else { | |
70 | - | let $ | |
75 | + | let $acc1111721212 = comparePriceAtHeight($acc1011721212, $list11721212[10]) | |
71 | 76 | throw("List size exceed 10") | |
72 | 77 | } | |
73 | 78 | } | |
74 | 79 | } | |
75 | 80 | } | |
76 | 81 | } | |
77 | 82 | } | |
78 | 83 | } | |
79 | 84 | } | |
80 | 85 | } | |
81 | 86 | } | |
82 | 87 | } | |
83 | 88 | } | |
84 | 89 | closestPrice | |
85 | 90 | } | |
86 | 91 | ||
87 | 92 | ||
88 | 93 | @Callable(i) | |
89 | 94 | func withdraw (target) = if (((target + 1) > height)) | |
90 | 95 | then throw("End of predictions for this height not reached yet!") | |
91 | 96 | else { | |
92 | 97 | let priceAtTarget = getClosestPrice(height) | |
93 | 98 | if ((priceAtTarget == 0)) | |
94 | 99 | then throw("Could not determine price at target height!") | |
95 | 100 | else { | |
96 | 101 | let caller = i.caller | |
97 | 102 | let targetPrice = getIntegerValue(this, ("target_price_" + toString(target))) | |
98 | 103 | let totalLongs = valueOrElse(getInteger(this, ("longs_total_" + toString(target))), 0) | |
99 | 104 | let totalShorts = valueOrElse(getInteger(this, ("shorts_total_" + toString(target))), 0) | |
100 | 105 | if ((priceAtTarget > targetPrice)) | |
101 | 106 | then { | |
102 | 107 | let precept = valueOrElse(getInteger(this, ((("long_" + toString(target)) + "_") + toString(caller))), 0) | |
103 | 108 | let payout = fraction(precept, (totalLongs + totalShorts), totalLongs) | |
104 | 109 | throw(((((("long won: " + toString(payout)) + " ") + toString(priceAtTarget)) + " ") + toString(targetPrice))) | |
105 | 110 | } | |
106 | 111 | else if ((targetPrice > priceAtTarget)) | |
107 | 112 | then { | |
108 | 113 | let precept = valueOrElse(getInteger(this, ((("short_" + toString(target)) + "_") + toString(caller))), 0) | |
109 | 114 | let payout = fraction(precept, (totalLongs + totalShorts), totalShorts) | |
110 | 115 | throw(("short won: " + toString(payout))) | |
111 | 116 | } | |
112 | 117 | else { | |
113 | 118 | let preceptLong = valueOrElse(getInteger(this, ((("long_" + toString(target)) + "_") + toString(caller))), 0) | |
114 | 119 | let preceptShort = valueOrElse(getInteger(this, ((("short_" + toString(target)) + "_") + toString(caller))), 0) | |
115 | 120 | let payout = (preceptLong + preceptShort) | |
116 | 121 | payCaller(target, caller, payout) | |
117 | 122 | } | |
118 | 123 | } | |
119 | 124 | } | |
120 | 125 | ||
121 | 126 | ||
122 | 127 | ||
123 | 128 | @Callable(i) | |
124 | 129 | func initiate (target) = { | |
125 | 130 | let currentPrice = getIntegerValue(addressFromStringValue(PRICINGORACLE), "price") | |
126 | 131 | let initiated = match getInteger(this, ("target_price_" + toString(target))) { | |
127 | 132 | case x: Int => | |
128 | 133 | (x != 0) | |
129 | 134 | case _: Unit => | |
130 | 135 | false | |
131 | 136 | case _ => | |
132 | 137 | throw("Match error") | |
133 | 138 | } | |
134 | 139 | if (((height + COOLDOWNPERIOD) >= target)) | |
135 | 140 | then throw(("No new future instantiable for the given height: " + toString(target))) | |
136 | 141 | else if (initiated) | |
137 | 142 | then throw("Target already initiated!") | |
138 | 143 | else [IntegerEntry(("target_price_" + toString(target)), currentPrice), IntegerEntry(("shorts_total_" + toString(target)), 0), IntegerEntry(("longs_total_" + toString(target)), 0)] | |
139 | 144 | } | |
140 | 145 | ||
141 | 146 | ||
142 | 147 | ||
143 | 148 | @Callable(i) | |
144 | 149 | func goShort (shortTarget) = { | |
145 | 150 | let targetPrice = valueOrElse(getInteger(this, ("target_price_" + toString(shortTarget))), 0) | |
146 | 151 | if ((targetPrice == 0)) | |
147 | 152 | then throw("Target not initialized!") | |
148 | 153 | else { | |
149 | 154 | let caller = toString(i.caller) | |
150 | 155 | let shortAddressKey = ((("short_" + toString(shortTarget)) + "_") + caller) | |
151 | 156 | let shortsTotalKey = ("shorts_total_" + toString(shortTarget)) | |
152 | 157 | let currentShortAmountForAddress = valueOrElse(getInteger(this, shortAddressKey), 0) | |
153 | 158 | let currentShorts = valueOrElse(getInteger(this, shortsTotalKey), 0) | |
154 | 159 | let payment = value(i.payments[0]) | |
155 | 160 | let amount = payment.amount | |
156 | 161 | if (isDefined(payment.assetId)) | |
157 | 162 | then throw("Only Waves payments allowed currently!") | |
158 | 163 | else if (((height + COOLDOWNPERIOD) >= shortTarget)) | |
159 | 164 | then throw("Recovery phase active. You can no longer go short towards this short target / height!") | |
160 | 165 | else [IntegerEntry(shortAddressKey, (currentShortAmountForAddress + amount)), IntegerEntry(shortsTotalKey, (currentShorts + amount))] | |
161 | 166 | } | |
162 | 167 | } | |
163 | 168 | ||
164 | 169 | ||
165 | 170 | ||
166 | 171 | @Callable(i) | |
167 | 172 | func goLong (longTarget) = { | |
168 | 173 | let targetPrice = valueOrElse(getInteger(this, ("target_price_" + toString(longTarget))), 0) | |
169 | 174 | if ((targetPrice == 0)) | |
170 | 175 | then throw("Target not initialized!") | |
171 | 176 | else { | |
172 | 177 | let caller = toString(i.caller) | |
173 | 178 | let longAddressKey = ((("long_" + toString(longTarget)) + "_") + caller) | |
174 | 179 | let longsTotalKey = ("longs_total_" + toString(longTarget)) | |
175 | 180 | let currentLongAmountForAddress = valueOrElse(getInteger(this, longAddressKey), 0) | |
176 | 181 | let currentLongs = valueOrElse(getInteger(this, longsTotalKey), 0) | |
177 | 182 | let payment = value(i.payments[0]) | |
178 | 183 | let amount = payment.amount | |
179 | 184 | if (isDefined(payment.assetId)) | |
180 | 185 | then throw("Only Waves payments allowed currently!") | |
181 | 186 | else if (((height + COOLDOWNPERIOD) >= longTarget)) | |
182 | 187 | then throw("Recovery phase active. You can no longer go long towards this long target / height!") | |
183 | 188 | else [IntegerEntry(longAddressKey, (currentLongAmountForAddress + amount)), IntegerEntry(longsTotalKey, (currentLongs + amount))] | |
184 | 189 | } | |
185 | 190 | } | |
186 | 191 | ||
187 | 192 |
github/deemru/w8io/3ef1775 109.40 ms ◑