tx · BJryVDx5GgP89YYv4j7RCpZwaZpNWS7J4J1H39jg6Nf4 3N4boZRUJ2LxY5jLyp6hmxGktqnawQidu6H: -0.01000000 Waves 2023.01.10 16:25 [2398898] smart account 3N4boZRUJ2LxY5jLyp6hmxGktqnawQidu6H > SELF 0.00000000 Waves
{ "type": 13, "id": "BJryVDx5GgP89YYv4j7RCpZwaZpNWS7J4J1H39jg6Nf4", "fee": 1000000, "feeAssetId": null, "timestamp": 1673357166880, "version": 2, "chainId": 84, "sender": "3N4boZRUJ2LxY5jLyp6hmxGktqnawQidu6H", "senderPublicKey": "BDeCphaaC4MZvfmbJqQZ78EvuEBZTJ1VEW7fbxue8BUu", "proofs": [ "3dgeyFDpzDVk1N9Wd5rtFUU58CL3rr4sLCw1NL7jjLzWLWJicSUUxHHyYLT6bGDoYJLXbcEy1x82kYEHs9fEow3u" ], "script": "base64:BgIVCAISCQoHCAgBCAgIARIECgIBARIAGgAJc2VwYXJhdG9yAgFfAAdrR29hbFAxAgZnb2FsUDEAB2tHb2FsUDICBmdvYWxQMgALa0RlZmxlY3Rpb24CCmRlZmxlY3Rpb24ACGtWZXJ0ZXgxAgd2ZXJ0ZXgxAAhrVmVydGV4MgIHdmVydGV4MgAIa1ZlcnRleDMCB3ZlcnRleDMAB2tNYXhCZXQCBm1heEJldAEJcmFuZG9taXplAgVieXRlcwVyYW5nZQQEaGFzaAkA9wMBBQVieXRlcwQFaW5kZXgJALEJAQUEaGFzaAkAagIFBWluZGV4BQVyYW5nZQEIZ2V0UG9pbnQBBWJ5dGVzBAF4CQEJcmFuZG9taXplAgkAyQECBQVieXRlcwkAaQIJAMgBAQUFYnl0ZXMAAgBkBAF5CQEJcmFuZG9taXplAgkAzAECBQVieXRlcwkAaQIJAMgBAQUFYnl0ZXMAAgBkCQCUCgIFAXgFAXkBEWdldEdvYWxMaW5lUG9pbnRzAAQCcDEJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0dvYWxQMQUJc2VwYXJhdG9yBAJwMgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrR29hbFAyBQlzZXBhcmF0b3IJAJQKAgkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCcDEAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAnAxAAEJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAnAyAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJwMgABAQ1nZXREZWZsZWN0aW9uAAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwULa0RlZmxlY3Rpb24BCWdldE1heEJldAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFB2tNYXhCZXQBEGdldFBvbHlnb25Qb2ludHMABAJwMQkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQhrVmVydGV4MQUJc2VwYXJhdG9yBAJwMgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQhrVmVydGV4MgUJc2VwYXJhdG9yBAJwMwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykC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aW5lAgJwMQRsaW5lCQAAAgkAZAIJAGQCCQBoAggFAnAxAl8xCAUEbGluZQJfMQkAaAIIBQJwMQJfMggFBGxpbmUCXzIIBQRsaW5lAl8zAAABE2lzUG9pbnRJbkRlZmxlY3Rpb24CAnAxBGxpbmUECyR0MDU5NTQ2MDU2BQRsaW5lBAJhMQgFCyR0MDU5NTQ2MDU2Al8xBAJiMQgFCyR0MDU5NTQ2MDU2Al8yBAJjMQgFCyR0MDU5NTQ2MDU2Al8zBAskdDA2MDU5NjE5NAkBDGdldE9ydGhvTGluZQIFAnAxCQCUCgIFAmExBQJiMQQFYU5vcm0IBQskdDA2MDU5NjE5NAJfMQQFYk5vcm0IBQskdDA2MDU5NjE5NAJfMgQFY05vcm0IBQskdDA2MDU5NjE5NAJfMwQBZAkBCm11bFZlY3RvcnMCCQCUCgIFAmExBQJiMQkAlAoCBQVhTm9ybQUFYk5vcm0EAmR4CQEKbXVsVmVjdG9ycwIJAJQKAgkBAS0BBQJjMQUCYjEJAJQKAgkBAS0BBQVjTm9ybQUFYk5vcm0EAmR5CQEKbXVsVmVjdG9ycwIJAJQKAgUCYTEJAQEtAQUCYzEJAJQKAgUFYU5vcm0JAQEtAQUFY05vcm0EBHhSZXMJAGsDAAEFAmR4BQFkBAR5UmVzCQBrAwABBQJkeQUBZAQHbGluZUxlbgkBDWdldExpbmVMZW5ndGgCBQJwMQkAlAoCBQR4UmVzBQR5UmVzCQBnAgkBDWdldERlZmxlY3Rpb24ABQdsaW5lTGVuARBpc1BvaW50SW5Qb2x5Z29uBAJwMQd2ZXJ0ZXgxB3ZlcnRleDIHdmVydGV4MwQIc2VnbWVudDEJAJQKAgUHdmVydGV4MQUHdmVydGV4MgQIc2VnbWVudDIJAJQKAgUHdmVydGV4MgUHdmVydGV4MwQIc2VnbWVudDMJAJQKAgUHdmVydGV4MwUHdmVydGV4MQMDAwkAAAIFAnAxBQd2ZXJ0ZXgxBgkAAAIFAnAxBQd2ZXJ0ZXgyBgkAAAIFAnAxBQd2ZXJ0ZXgzBgkBCGlzSW5zaWRlBAUCcDEFCHNlZ21lbnQxBQhzZWdtZW50MgUIc2VnbWVudDMBFGNhbGNSZXdhcmRNdWx0aXBsaWVyAwZpbkxpbmUJaW5Qb2x5Z29uDGluRGVmbGVjdGlvbgMDBQZpbkxpbmUFCWluUG9seWdvbgcACgMDBQxpbkRlZmxlY3Rpb24FCWluUG9seWdvbgcACAMFBmluTGluZQAGAwUJaW5Qb2x5Z29uAAQDBQxpbkRlZmxlY3Rpb24AAgABAQ92YWxpZGF0ZVBheW1lbnQCDHBheW1lbnRBc3NldA1wYXltZW50QW1vdW50AwMJAAACBQxwYXltZW50QXNzZXQFBHVuaXQJAGcCCQEJZ2V0TWF4QmV0AAUNcGF5bWVudEFtb3VudAcFBHVuaXQJAAIBAhFJbmNvcnJlY3QgcGF5bWVudAMBaQEQc2V0TG90dGVyeVBhcmFtcwcGZ29hbFAxBmdvYWxQMgpkZWZsZWN0aW9uB3ZlcnRleDEHdmVydGV4Mgd2ZXJ0ZXgzBm1heEJldAkAzAgCCQELU3RyaW5nRW50cnkCBQdrR29hbFAxBQZnb2FsUDEJAMwIAgkBC1N0cmluZ0VudHJ5AgUHa0dvYWxQMgUGZ29hbFAyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrRGVmbGVjdGlvbgUKZGVmbGVjdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVydGV4MQUHdmVydGV4MQkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVydGV4MgUHdmVydGV4MgkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVydGV4MwUHdmVydGV4MwkAzAgCCQEMSW50ZWdlckVudHJ5AgUHa01heEJldAUGbWF4QmV0BQNuaWwBaQEIdHJ5VG9XaW4CA3AxeANwMXkECyR0MDg5MTA5MDI4CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDHBheW1lbnRBc3NldAgFCyR0MDg5MTA5MDI4Al8xBA1wYXltZW50QW1vdW50CAULJHQwODkxMDkwMjgCXzIJAQt2YWx1ZU9yRWxzZQIJAQ92YWxpZGF0ZVBheW1lbnQCBQxwYXltZW50QXNzZXQFDXBheW1lbnRBbW91bnQEAnAxCQCUCgIFA3AxeAUDcDF5BAskdDA5MjU4OTM3OQkBEWdldEdvYWxMaW5lUG9pbnRzAAQCcDIIBQskdDA5MjU4OTM3OQJfMQQCcDMIBQskdDA5MjU4OTM3OQJfMgQLJHQwOTM4NDk0ODMJARBnZXRQb2x5Z29uUG9pbnRzAAQCcDQIBQskdDA5Mzg0OTQ4MwJfMQQCcDUIBQskdDA5Mzg0OTQ4MwJfMgQCcDYIBQskdDA5Mzg0OTQ4MwJfMwQLJHQwOTQ4ODk1ODAJAQdnZXRMaW5lAgUCcDIFAnAzBAJhMQgFCyR0MDk0ODg5NTgwAl8xBAJiMQgFCyR0MDk0ODg5NTgwAl8yBAJjMQgFCyR0MDk0ODg5NTgwAl8zBAZpbkxpbmUJAQ1pc1BvaW50SW5MaW5lAgUCcDEJAJUKAwUCYTEFAmIxBQJjMQQJaW5Qb2x5Z29uCQEQaXNQb2ludEluUG9seWdvbgQFAnAxBQJwNAUCcDUFAnA2BAxpbkRlZmxlY3Rpb24JARNpc1BvaW50SW5EZWZsZWN0aW9uAgUCcDEJAJUKAwUCYTEFAmIxBQJjMQMDAwUGaW5MaW5lBgUMaW5EZWZsZWN0aW9uBgUJaW5Qb2x5Z29uBAptdWx0aXBsaWVyCQEUY2FsY1Jld2FyZE11bHRpcGxpZXIDBQZpbkxpbmUFCWluUG9seWdvbgUMaW5EZWZsZWN0aW9uBAZyZXdhcmQJAGgCBQ1wYXltZW50QW1vdW50BQptdWx0aXBsaWVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgptdWx0aXBsaWVyBQptdWx0aXBsaWVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcgUGcmV3YXJkBQR1bml0BQNuaWwFA25pbAFpAQlzdGFydEdhbWUABAJwMQkBCGdldFBvaW50AQgFAWkNdHJhbnNhY3Rpb25JZAQDcmVzCQD8BwQFBHRoaXMCCHRyeVRvV2luCQDMCAIIBQJwMQJfMQkAzAgCCAUCcDECXzIFA25pbAkAzAgCCQCRAwIIBQFpCHBheW1lbnRzAAAFA25pbAMJAAACBQNyZXMFA3JlcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAHyEf6w=", "height": 2398898, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7mficiXwiKk9tvrfwUvsw7cA26M9V6o6SfMNmVzeBZY5 Next: BaKhAD5RipGUyouCee65jYzkxiULD75dML129Q86xZzk Diff:
Old | New | Differences | |
---|---|---|---|
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let separator = "_" | |
5 | 5 | ||
6 | - | let | |
6 | + | let kGoalP1 = "goalP1" | |
7 | 7 | ||
8 | - | let | |
8 | + | let kGoalP2 = "goalP2" | |
9 | 9 | ||
10 | - | let | |
10 | + | let kDeflection = "deflection" | |
11 | 11 | ||
12 | - | let | |
12 | + | let kVertex1 = "vertex1" | |
13 | 13 | ||
14 | - | ||
14 | + | let kVertex2 = "vertex2" | |
15 | 15 | ||
16 | + | let kVertex3 = "vertex3" | |
16 | 17 | ||
17 | - | ||
18 | + | let kMaxBet = "maxBet" | |
18 | 19 | ||
19 | - | ||
20 | - | func getSellKey (nftId) = ((kSell + separator) + toBase58String(nftId)) | |
21 | - | ||
22 | - | ||
23 | - | func getAuctionKey (nftId) = ((kAuction + separator) + toBase58String(nftId)) | |
24 | - | ||
25 | - | ||
26 | - | func getTrustedKey (issuer) = ((kTrusted + separator) + toString(issuer)) | |
27 | - | ||
28 | - | ||
29 | - | func addToList (accum,nextValue) = (accum ++ [nextValue]) | |
30 | - | ||
31 | - | ||
32 | - | func joinString (params) = { | |
33 | - | let length = size(params) | |
34 | - | if ((length == 0)) | |
35 | - | then throw("Empty params") | |
36 | - | else if ((length == 1)) | |
37 | - | then makeString({ | |
38 | - | let $l = params | |
39 | - | let $s = size($l) | |
40 | - | let $acc0 = nil | |
41 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
42 | - | then $a | |
43 | - | else addToList($a, $l[$i]) | |
44 | - | ||
45 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
46 | - | then $a | |
47 | - | else throw("List size exceeds 1") | |
48 | - | ||
49 | - | $f0_2($f0_1($acc0, 0), 1) | |
50 | - | }, separator) | |
51 | - | else if ((length == 2)) | |
52 | - | then makeString({ | |
53 | - | let $l = params | |
54 | - | let $s = size($l) | |
55 | - | let $acc0 = nil | |
56 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
57 | - | then $a | |
58 | - | else addToList($a, $l[$i]) | |
59 | - | ||
60 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
61 | - | then $a | |
62 | - | else throw("List size exceeds 2") | |
63 | - | ||
64 | - | $f0_2($f0_1($f0_1($acc0, 0), 1), 2) | |
65 | - | }, separator) | |
66 | - | else if ((length == 3)) | |
67 | - | then makeString({ | |
68 | - | let $l = params | |
69 | - | let $s = size($l) | |
70 | - | let $acc0 = nil | |
71 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
72 | - | then $a | |
73 | - | else addToList($a, $l[$i]) | |
74 | - | ||
75 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
76 | - | then $a | |
77 | - | else throw("List size exceeds 3") | |
78 | - | ||
79 | - | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
80 | - | }, separator) | |
81 | - | else if ((length == 4)) | |
82 | - | then makeString({ | |
83 | - | let $l = params | |
84 | - | let $s = size($l) | |
85 | - | let $acc0 = nil | |
86 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
87 | - | then $a | |
88 | - | else addToList($a, $l[$i]) | |
89 | - | ||
90 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
91 | - | then $a | |
92 | - | else throw("List size exceeds 4") | |
93 | - | ||
94 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4) | |
95 | - | }, separator) | |
96 | - | else if ((length == 5)) | |
97 | - | then makeString({ | |
98 | - | let $l = params | |
99 | - | let $s = size($l) | |
100 | - | let $acc0 = nil | |
101 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
102 | - | then $a | |
103 | - | else addToList($a, $l[$i]) | |
104 | - | ||
105 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
106 | - | then $a | |
107 | - | else throw("List size exceeds 5") | |
108 | - | ||
109 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5) | |
110 | - | }, separator) | |
111 | - | else throw("Max number of parameters exceeded") | |
20 | + | func randomize (bytes,range) = { | |
21 | + | let hash = sha256(bytes) | |
22 | + | let index = toInt(hash) | |
23 | + | (index % range) | |
112 | 24 | } | |
113 | 25 | ||
114 | 26 | ||
115 | - | func parseAsAuction (details) = { | |
116 | - | let res = split(details, separator) | |
117 | - | $Tuple5(addressFromStringValue(res[0]), parseIntValue(res[1]), parseIntValue(res[2]), parseIntValue(res[3]), parseIntValue(res[4])) | |
27 | + | func getPoint (bytes) = { | |
28 | + | let x = randomize(take(bytes, (size(bytes) / 2)), 100) | |
29 | + | let y = randomize(takeRight(bytes, (size(bytes) / 2)), 100) | |
30 | + | $Tuple2(x, y) | |
118 | 31 | } | |
119 | 32 | ||
120 | 33 | ||
121 | - | func parseAsSell (details) = { | |
122 | - | let res = split(details, separator) | |
123 | - | $Tuple2(addressFromStringValue(res[0]), parseIntValue(res[1])) | |
34 | + | func getGoalLinePoints () = { | |
35 | + | let p1 = split(getStringValue(this, kGoalP1), separator) | |
36 | + | let p2 = split(getStringValue(this, kGoalP2), separator) | |
37 | + | $Tuple2($Tuple2(parseIntValue(p1[0]), parseIntValue(p1[1])), $Tuple2(parseIntValue(p2[0]), parseIntValue(p2[1]))) | |
124 | 38 | } | |
125 | 39 | ||
126 | 40 | ||
127 | - | func joinStruct (params) = match params { | |
128 | - | case auction: (Address, Int, String, String) => | |
129 | - | joinString([toString(auction._1), toString(auction._2), auction._3, auction._4]) | |
130 | - | case sell: (Address, Int) => | |
131 | - | joinString([toString(sell._1), toString(sell._2)]) | |
132 | - | case _ => | |
133 | - | throw("Wrong params tupple") | |
134 | - | } | |
41 | + | func getDeflection () = getIntegerValue(this, kDeflection) | |
135 | 42 | ||
136 | 43 | ||
137 | - | func | |
44 | + | func getMaxBet () = getIntegerValue(this, kMaxBet) | |
138 | 45 | ||
139 | 46 | ||
140 | - | func setSell (nftId,celler,price) = StringEntry(getSellKey(nftId), joinStruct($Tuple2(celler, price))) | |
141 | - | ||
142 | - | ||
143 | - | func getAuction (nftId) = value(getString(this, getAuctionKey(nftId))) | |
144 | - | ||
145 | - | ||
146 | - | func getSell (nftId) = value(getString(this, getSellKey(nftId))) | |
147 | - | ||
148 | - | ||
149 | - | func calcPriceAtCurrentMoment (assetId,moment) = { | |
150 | - | let details = getAuction(assetId) | |
151 | - | let $t027552859 = parseAsAuction(details) | |
152 | - | let seller = $t027552859._1 | |
153 | - | let startPriceValue = $t027552859._2 | |
154 | - | let endPriceValue = $t027552859._3 | |
155 | - | let startPeriodValue = $t027552859._4 | |
156 | - | let endPeriodValue = $t027552859._5 | |
157 | - | if ((moment >= endPeriodValue)) | |
158 | - | then $Tuple2(seller, endPriceValue) | |
159 | - | else { | |
160 | - | let deltaPrice = (startPriceValue - endPriceValue) | |
161 | - | let period = (endPeriodValue - startPeriodValue) | |
162 | - | let spended = (moment - startPeriodValue) | |
163 | - | $Tuple2(seller, (startPriceValue - fraction(spended, deltaPrice, period))) | |
164 | - | } | |
47 | + | func getPolygonPoints () = { | |
48 | + | let p1 = split(getStringValue(this, kVertex1), separator) | |
49 | + | let p2 = split(getStringValue(this, kVertex2), separator) | |
50 | + | let p3 = split(getStringValue(this, kVertex3), separator) | |
51 | + | $Tuple3($Tuple2(parseIntValue(p1[0]), parseIntValue(p1[1])), $Tuple2(parseIntValue(p2[0]), parseIntValue(p2[1])), $Tuple2(parseIntValue(p3[0]), parseIntValue(p3[1]))) | |
165 | 52 | } | |
166 | 53 | ||
167 | 54 | ||
168 | - | func isNft (assetId) = match assetInfo(assetId) { | |
169 | - | case token: Asset => | |
170 | - | if (if ((token.decimals == 0)) | |
171 | - | then (token.quantity == 1) | |
172 | - | else false) | |
173 | - | then (token.reissuable == false) | |
174 | - | else false | |
175 | - | case _ => | |
176 | - | false | |
177 | - | } | |
178 | - | ||
179 | - | ||
180 | - | func isTrustedNft (assetId) = { | |
181 | - | let issuer = value(assetInfo(assetId)).issuer | |
182 | - | valueOrElse(getBoolean(this, getTrustedKey(issuer)), false) | |
55 | + | func getLine (p1,p2) = { | |
56 | + | let a = (p2._2 - p1._2) | |
57 | + | let b = (p1._1 - p2._1) | |
58 | + | let c = ((p1._2 * (p2._1 + p1._1)) - (p1._1 * (p1._2 + p2._2))) | |
59 | + | $Tuple3(a, b, c) | |
183 | 60 | } | |
184 | 61 | ||
185 | 62 | ||
186 | - | func isSellExist (assetId) = isDefined(getString(this, getSellKey(assetId))) | |
63 | + | func getOrthoLine (p1,nVec) = { | |
64 | + | let a = nVec._2 | |
65 | + | let b = -(nVec._1) | |
66 | + | let c = ((nVec._1 * p1._2) - (nVec._2 * p1._1)) | |
67 | + | $Tuple3(a, b, c) | |
68 | + | } | |
187 | 69 | ||
188 | 70 | ||
189 | - | func isAuctionExist (assetId) = isDefined(getString(this, getAuctionKey(assetId))) | |
71 | + | func getVec (start,end) = { | |
72 | + | let x = (end._1 - start._1) | |
73 | + | let y = (end._2 - start._2) | |
74 | + | $Tuple2(x, y) | |
75 | + | } | |
190 | 76 | ||
191 | 77 | ||
192 | - | func | |
78 | + | func mulVectors (vA,vB) = ((vA._1 * vB._2) - (vA._2 * vB._1)) | |
193 | 79 | ||
194 | 80 | ||
195 | - | func isCorrectAuctionPrices (startPrice,endPrice) = (startPrice > endPrice) | |
81 | + | func getLineLength (p1,p2) = { | |
82 | + | let a = pow((p2._1 - p1._1), 0, 2, 0, 0, DOWN) | |
83 | + | let b = pow((p2._2 - p1._2), 0, 2, 0, 0, DOWN) | |
84 | + | sqrt((a + b), 0, 0, DOWN) | |
85 | + | } | |
196 | 86 | ||
197 | 87 | ||
198 | - | func isAdmin (caller) = (caller == this) | |
88 | + | func calcCrosses (accum,nextValue) = { | |
89 | + | let vp1p2 = getVec(nextValue[0]._1, nextValue[0]._2) | |
90 | + | let vp1p3 = getVec(nextValue[0]._1, nextValue[1]._1) | |
91 | + | let vp1p4 = getVec(nextValue[0]._1, nextValue[1]._2) | |
92 | + | let vp3p4 = getVec(nextValue[1]._1, nextValue[1]._2) | |
93 | + | let vp3p1 = getVec(nextValue[1]._1, nextValue[0]._1) | |
94 | + | let vp3p2 = getVec(nextValue[1]._1, nextValue[0]._2) | |
95 | + | let v1 = mulVectors(vp3p4, vp3p1) | |
96 | + | let v2 = mulVectors(vp3p4, vp3p2) | |
97 | + | let v3 = mulVectors(vp1p2, vp1p3) | |
98 | + | let v4 = mulVectors(vp1p2, vp1p4) | |
99 | + | if (if ((0 > (v1 * v2))) | |
100 | + | then (0 > (v3 * v4)) | |
101 | + | else false) | |
102 | + | then (accum + 1) | |
103 | + | else accum | |
104 | + | } | |
199 | 105 | ||
200 | 106 | ||
201 | - | func isValidCaller (caller,seller) = if ((caller == this)) | |
202 | - | then true | |
203 | - | else (caller == seller) | |
107 | + | func isInside (p1,segment1,segment2,segment3) = { | |
108 | + | let segmentRay = $Tuple2(p1, $Tuple2(p1._1, 0)) | |
109 | + | let arr = [[segmentRay, segment1], [segmentRay, segment2], [segmentRay, segment3]] | |
110 | + | let count = { | |
111 | + | let $l = arr | |
112 | + | let $s = size($l) | |
113 | + | let $acc0 = 0 | |
114 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
115 | + | then $a | |
116 | + | else calcCrosses($a, $l[$i]) | |
117 | + | ||
118 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
119 | + | then $a | |
120 | + | else throw("List size exceeds 3") | |
121 | + | ||
122 | + | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
123 | + | } | |
124 | + | ((count % 2) == 1) | |
125 | + | } | |
204 | 126 | ||
205 | 127 | ||
206 | - | func | |
128 | + | func isPointInLine (p1,line) = ((((p1._1 * line._1) + (p1._2 * line._2)) + line._3) == 0) | |
207 | 129 | ||
208 | 130 | ||
209 | - | func isEnoughFunds (payment,currentMomentPrice) = (payment >= currentMomentPrice) | |
131 | + | func isPointInDeflection (p1,line) = { | |
132 | + | let $t059546056 = line | |
133 | + | let a1 = $t059546056._1 | |
134 | + | let b1 = $t059546056._2 | |
135 | + | let c1 = $t059546056._3 | |
136 | + | let $t060596194 = getOrthoLine(p1, $Tuple2(a1, b1)) | |
137 | + | let aNorm = $t060596194._1 | |
138 | + | let bNorm = $t060596194._2 | |
139 | + | let cNorm = $t060596194._3 | |
140 | + | let d = mulVectors($Tuple2(a1, b1), $Tuple2(aNorm, bNorm)) | |
141 | + | let dx = mulVectors($Tuple2(-(c1), b1), $Tuple2(-(cNorm), bNorm)) | |
142 | + | let dy = mulVectors($Tuple2(a1, -(c1)), $Tuple2(aNorm, -(cNorm))) | |
143 | + | let xRes = fraction(1, dx, d) | |
144 | + | let yRes = fraction(1, dy, d) | |
145 | + | let lineLen = getLineLength(p1, $Tuple2(xRes, yRes)) | |
146 | + | (getDeflection() >= lineLen) | |
147 | + | } | |
210 | 148 | ||
211 | 149 | ||
212 | - | func isWawes (assetId) = (assetId == unit) | |
150 | + | func isPointInPolygon (p1,vertex1,vertex2,vertex3) = { | |
151 | + | let segment1 = $Tuple2(vertex1, vertex2) | |
152 | + | let segment2 = $Tuple2(vertex2, vertex3) | |
153 | + | let segment3 = $Tuple2(vertex3, vertex1) | |
154 | + | if (if (if ((p1 == vertex1)) | |
155 | + | then true | |
156 | + | else (p1 == vertex2)) | |
157 | + | then true | |
158 | + | else (p1 == vertex3)) | |
159 | + | then true | |
160 | + | else isInside(p1, segment1, segment2, segment3) | |
161 | + | } | |
213 | 162 | ||
214 | 163 | ||
215 | - | func isCorrectNft (nftId) = if (!(isNft(nftId))) | |
216 | - | then throw("Token is not Nft") | |
217 | - | else if (isSellExist(nftId)) | |
218 | - | then throw("Sell already exists") | |
219 | - | else if (isAuctionExist(nftId)) | |
220 | - | then throw("Auction already exists") | |
221 | - | else unit | |
164 | + | func calcRewardMultiplier (inLine,inPolygon,inDeflection) = if (if (inLine) | |
165 | + | then inPolygon | |
166 | + | else false) | |
167 | + | then 10 | |
168 | + | else if (if (inDeflection) | |
169 | + | then inPolygon | |
170 | + | else false) | |
171 | + | then 8 | |
172 | + | else if (inLine) | |
173 | + | then 6 | |
174 | + | else if (inPolygon) | |
175 | + | then 4 | |
176 | + | else if (inDeflection) | |
177 | + | then 2 | |
178 | + | else 1 | |
222 | 179 | ||
223 | 180 | ||
224 | - | func | |
225 | - | then | |
226 | - | else | |
227 | - | ||
228 | - | ||
181 | + | func validatePayment (paymentAsset,paymentAmount) = if (if ((paymentAsset == unit)) | |
182 | + | then (getMaxBet() >= paymentAmount) | |
183 | + | else false) | |
184 | + | then unit | |
185 | + | else throw("Incorrect payment") | |
229 | 186 | ||
230 | 187 | ||
231 | - | func calcFee () = 0 | |
188 | + | @Callable(i) | |
189 | + | func setLotteryParams (goalP1,goalP2,deflection,vertex1,vertex2,vertex3,maxBet) = [StringEntry(kGoalP1, goalP1), StringEntry(kGoalP2, goalP2), IntegerEntry(kDeflection, deflection), StringEntry(kVertex1, vertex1), StringEntry(kVertex2, vertex2), StringEntry(kVertex3, vertex3), IntegerEntry(kMaxBet, maxBet)] | |
232 | 190 | ||
233 | 191 | ||
234 | - | func calcTrustedFee () = 0 | |
235 | - | ||
236 | - | ||
237 | - | func resultFundsAmounts (isTrusted,paymentAmount,actualPrice) = if (isTrusted) | |
238 | - | then $Tuple2((actualPrice - calcTrustedFee()), (paymentAmount - actualPrice)) | |
239 | - | else $Tuple2((actualPrice - calcFee()), (paymentAmount - actualPrice)) | |
240 | - | ||
241 | - | ||
242 | - | func getSlot (nftId) = if (isSellExist(nftId)) | |
243 | - | then $Tuple2(kSell, getSell(nftId)) | |
244 | - | else if (isAuctionExist(nftId)) | |
245 | - | then $Tuple2(kAuction, getAuction(nftId)) | |
246 | - | else throw("Slot doesn`t exist") | |
247 | - | ||
248 | - | ||
249 | - | let kBuy = "buy" | |
250 | - | ||
251 | - | let ASIMI_TOKEN = base58'EbLVSrAi6vS3AkLwBinzZCvAXP2yYiFJEzj1MBVHcwZ5' | |
252 | 192 | ||
253 | 193 | @Callable(i) | |
254 | - | func createNft (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = { | |
255 | - | let newToken = Issue(nft_name, nft_description, 1, 0, false) | |
256 | - | let issueId = calculateAssetId(newToken) | |
257 | - | [newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller)), StringEntry(((toBase58String(issueId) + separator) + "nft_type"), nft_type), StringEntry(((toBase58String(issueId) + separator) + "nft_tags"), nft_tags), StringEntry(((toBase58String(issueId) + separator) + "nft_dAppAddress"), nft_dAppAddress), IntegerEntry(((toBase58String(issueId) + separator) + "nft_selling_price"), nft_selling_price), StringEntry(((toBase58String(issueId) + separator) + "nft_onSell"), nft_onSell), StringEntry(((toBase58String(issueId) + separator) + "nft_data"), nft_data)] | |
194 | + | func tryToWin (p1x,p1y) = { | |
195 | + | let $t089109028 = $Tuple2(i.payments[0].assetId, value(i.payments[0].amount)) | |
196 | + | let paymentAsset = $t089109028._1 | |
197 | + | let paymentAmount = $t089109028._2 | |
198 | + | valueOrElse(validatePayment(paymentAsset, paymentAmount), { | |
199 | + | let p1 = $Tuple2(p1x, p1y) | |
200 | + | let $t092589379 = getGoalLinePoints() | |
201 | + | let p2 = $t092589379._1 | |
202 | + | let p3 = $t092589379._2 | |
203 | + | let $t093849483 = getPolygonPoints() | |
204 | + | let p4 = $t093849483._1 | |
205 | + | let p5 = $t093849483._2 | |
206 | + | let p6 = $t093849483._3 | |
207 | + | let $t094889580 = getLine(p2, p3) | |
208 | + | let a1 = $t094889580._1 | |
209 | + | let b1 = $t094889580._2 | |
210 | + | let c1 = $t094889580._3 | |
211 | + | let inLine = isPointInLine(p1, $Tuple3(a1, b1, c1)) | |
212 | + | let inPolygon = isPointInPolygon(p1, p4, p5, p6) | |
213 | + | let inDeflection = isPointInDeflection(p1, $Tuple3(a1, b1, c1)) | |
214 | + | if (if (if (inLine) | |
215 | + | then true | |
216 | + | else inDeflection) | |
217 | + | then true | |
218 | + | else inPolygon) | |
219 | + | then { | |
220 | + | let multiplier = calcRewardMultiplier(inLine, inPolygon, inDeflection) | |
221 | + | let reward = (paymentAmount * multiplier) | |
222 | + | [IntegerEntry("multiplier", multiplier), ScriptTransfer(i.originCaller, reward, unit)] | |
223 | + | } | |
224 | + | else nil | |
225 | + | }) | |
258 | 226 | } | |
259 | 227 | ||
260 | 228 | ||
261 | 229 | ||
262 | 230 | @Callable(i) | |
263 | - | func issueNft (name,meta) = { | |
264 | - | let newToken = Issue(name, meta, 1, 0, false) | |
265 | - | let issueId = calculateAssetId(newToken) | |
266 | - | [newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller))] | |
267 | - | } | |
268 | - | ||
269 | - | ||
270 | - | ||
271 | - | @Callable(i) | |
272 | - | func buyNFT (nftID) = { | |
273 | - | let assetId = fromBase58String(nftID) | |
274 | - | let amount = value(i.payments[0].amount) | |
275 | - | let amount1 = value(i.payments[1].amount) | |
276 | - | let price = valueOrErrorMessage(getString(((kPrice + separator) + nftID)), "There is no price for this NFT") | |
277 | - | let owner = valueOrErrorMessage(getStringValue(((nftID + separator) + "Owner")), "No owner") | |
278 | - | if ((i.payments[0].assetId != unit)) | |
279 | - | then throw("Pay in waves") | |
280 | - | else if ((i.payments[1].assetId != ASIMI_TOKEN)) | |
281 | - | then throw("Pay in ASIMI") | |
282 | - | else if ((parseIntValue(price) > amount)) | |
283 | - | then throw("Invalid payment WAVES") | |
284 | - | else [ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(value(addressFromString(owner)), parseIntValue(price), unit), StringEntry(((toString(i.caller) + separator) + kBuy), ((nftID + separator) + toString(amount)))] | |
285 | - | } | |
286 | - | ||
287 | - | ||
288 | - | ||
289 | - | @Callable(i) | |
290 | - | func sellNFT (price) = { | |
291 | - | let $t074127497 = $Tuple2(value(i.payments[0].assetId), value(i.payments[0].amount)) | |
292 | - | let token0 = $t074127497._1 | |
293 | - | let amount0 = $t074127497._2 | |
294 | - | if (!(isNft(token0))) | |
295 | - | then throw("Token is not NFT") | |
296 | - | else [StringEntry(((kPrice + separator) + toBase58String(value(i.payments[0].assetId))), toString(price)), StringEntry(((toString(i.caller) + separator) + kSell), ((toBase58String(token0) + separator) + toString(amount0)))] | |
297 | - | } | |
298 | - | ||
299 | - | ||
300 | - | ||
301 | - | @Callable(i) | |
302 | - | func addSell (price) = { | |
303 | - | let nftId = value(i.payments[0].assetId) | |
304 | - | valueOrElse(isCorrectNft(nftId), if (!(isCorrectSellPrice(price))) | |
305 | - | then throw("Price must be > 0") | |
306 | - | else [setSell(nftId, i.caller, price)]) | |
307 | - | } | |
308 | - | ||
309 | - | ||
310 | - | ||
311 | - | @Callable(i) | |
312 | - | func addAuction (startPrice,start,end) = { | |
313 | - | let nftId = value(i.payments[0].assetId) | |
314 | - | valueOrElse(isCorrectNft(nftId), [setAuction(i.caller, nftId, startPrice, start, end), StringEntry(((toBase58String(nftId) + separator) + "nft_owner"), toString(i.caller))]) | |
315 | - | } | |
316 | - | ||
317 | - | ||
318 | - | ||
319 | - | @Callable(i) | |
320 | - | func buyFromSlot (nftId) = { | |
321 | - | let $t084178506 = $Tuple2(i.payments[0].assetId, value(i.payments[0].amount)) | |
322 | - | let paymentAsset = $t084178506._1 | |
323 | - | let paymentAmount = $t084178506._2 | |
324 | - | let assetId = fromBase58String(nftId) | |
325 | - | let $t085508588 = getSlot(assetId) | |
326 | - | let type = $t085508588._1 | |
327 | - | let details = $t085508588._2 | |
328 | - | let baseRes = [ScriptTransfer(i.caller, 1, assetId), DeleteEntry(getSlotKey(type, assetId))] | |
329 | - | if ((type == kSell)) | |
330 | - | then { | |
331 | - | let $t087308777 = parseAsSell(details) | |
332 | - | let seller = $t087308777._1 | |
333 | - | let priceValue = $t087308777._2 | |
334 | - | valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, priceValue), { | |
335 | - | let $t088628964 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, priceValue) | |
336 | - | let sellerAmount = $t088628964._1 | |
337 | - | let buyerAmount = $t088628964._2 | |
338 | - | let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)]) | |
339 | - | if ((buyerAmount > 0)) | |
340 | - | then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)]) | |
341 | - | else updatedRes | |
342 | - | }) | |
343 | - | } | |
344 | - | else { | |
345 | - | let $t091819250 = calcPriceAtCurrentMoment(assetId, height) | |
346 | - | let seller = $t091819250._1 | |
347 | - | let actualPrice = $t091819250._2 | |
348 | - | valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, actualPrice), { | |
349 | - | let $t093369439 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, actualPrice) | |
350 | - | let sellerAmount = $t093369439._1 | |
351 | - | let buyerAmount = $t093369439._2 | |
352 | - | let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)]) | |
353 | - | if ((buyerAmount > 0)) | |
354 | - | then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)]) | |
355 | - | else updatedRes | |
356 | - | }) | |
357 | - | } | |
358 | - | } | |
359 | - | ||
360 | - | ||
361 | - | ||
362 | - | @Callable(i) | |
363 | - | func declineSlot (nftId) = { | |
364 | - | let assetId = fromBase58String(nftId) | |
365 | - | let $t097409778 = getSlot(assetId) | |
366 | - | let type = $t097409778._1 | |
367 | - | let details = $t097409778._2 | |
368 | - | let baseRes = [DeleteEntry(getSlotKey(type, assetId))] | |
369 | - | if ((type == kSell)) | |
370 | - | then { | |
371 | - | let $t098709917 = parseAsSell(details) | |
372 | - | let seller = $t098709917._1 | |
373 | - | let priceValue = $t098709917._2 | |
374 | - | if (!(isValidCaller(i.caller, seller))) | |
375 | - | then throw("Invalid caller") | |
376 | - | else (baseRes ++ [ScriptTransfer(seller, 1, assetId)]) | |
377 | - | } | |
378 | - | else { | |
379 | - | let $t01006210166 = parseAsAuction(details) | |
380 | - | let seller = $t01006210166._1 | |
381 | - | let startPriceValue = $t01006210166._2 | |
382 | - | let endPriceValue = $t01006210166._3 | |
383 | - | let startPeriodValue = $t01006210166._4 | |
384 | - | let endPeriodValue = $t01006210166._5 | |
385 | - | if (!(isValidCaller(i.caller, seller))) | |
386 | - | then throw("Invalid caller") | |
387 | - | else if (!(isAuctionEnded(height, endPeriodValue))) | |
388 | - | then throw("Wait for end of auction") | |
389 | - | else (baseRes ++ [ScriptTransfer(seller, 1, assetId)]) | |
390 | - | } | |
391 | - | } | |
392 | - | ||
393 | - | ||
394 | - | ||
395 | - | @Callable(i) | |
396 | - | func setTrustedIssuer (trustedAddr) = if (!(isAdmin(i.caller))) | |
397 | - | then throw("Only admin") | |
398 | - | else [BooleanEntry(getTrustedKey(addressFromStringValue(trustedAddr)), true)] | |
399 | - | ||
400 | - | ||
401 | - | ||
402 | - | @Callable(i) | |
403 | - | func getPriceAtCurrentMoment (nftId,moment) = { | |
404 | - | let assetId = fromBase58String(nftId) | |
405 | - | let $t01070710770 = calcPriceAtCurrentMoment(assetId, moment) | |
406 | - | let seller = $t01070710770._1 | |
407 | - | let price = $t01070710770._2 | |
408 | - | [IntegerEntry(getPriceKey(assetId), price)] | |
231 | + | func startGame () = { | |
232 | + | let p1 = getPoint(i.transactionId) | |
233 | + | let res = invoke(this, "tryToWin", [p1._1, p1._2], [i.payments[0]]) | |
234 | + | if ((res == res)) | |
235 | + | then nil | |
236 | + | else throw("Strict value is not equal to itself.") | |
409 | 237 | } | |
410 | 238 | ||
411 | 239 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let separator = "_" | |
5 | 5 | ||
6 | - | let | |
6 | + | let kGoalP1 = "goalP1" | |
7 | 7 | ||
8 | - | let | |
8 | + | let kGoalP2 = "goalP2" | |
9 | 9 | ||
10 | - | let | |
10 | + | let kDeflection = "deflection" | |
11 | 11 | ||
12 | - | let | |
12 | + | let kVertex1 = "vertex1" | |
13 | 13 | ||
14 | - | ||
14 | + | let kVertex2 = "vertex2" | |
15 | 15 | ||
16 | + | let kVertex3 = "vertex3" | |
16 | 17 | ||
17 | - | ||
18 | + | let kMaxBet = "maxBet" | |
18 | 19 | ||
19 | - | ||
20 | - | func getSellKey (nftId) = ((kSell + separator) + toBase58String(nftId)) | |
21 | - | ||
22 | - | ||
23 | - | func getAuctionKey (nftId) = ((kAuction + separator) + toBase58String(nftId)) | |
24 | - | ||
25 | - | ||
26 | - | func getTrustedKey (issuer) = ((kTrusted + separator) + toString(issuer)) | |
27 | - | ||
28 | - | ||
29 | - | func addToList (accum,nextValue) = (accum ++ [nextValue]) | |
30 | - | ||
31 | - | ||
32 | - | func joinString (params) = { | |
33 | - | let length = size(params) | |
34 | - | if ((length == 0)) | |
35 | - | then throw("Empty params") | |
36 | - | else if ((length == 1)) | |
37 | - | then makeString({ | |
38 | - | let $l = params | |
39 | - | let $s = size($l) | |
40 | - | let $acc0 = nil | |
41 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
42 | - | then $a | |
43 | - | else addToList($a, $l[$i]) | |
44 | - | ||
45 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
46 | - | then $a | |
47 | - | else throw("List size exceeds 1") | |
48 | - | ||
49 | - | $f0_2($f0_1($acc0, 0), 1) | |
50 | - | }, separator) | |
51 | - | else if ((length == 2)) | |
52 | - | then makeString({ | |
53 | - | let $l = params | |
54 | - | let $s = size($l) | |
55 | - | let $acc0 = nil | |
56 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
57 | - | then $a | |
58 | - | else addToList($a, $l[$i]) | |
59 | - | ||
60 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
61 | - | then $a | |
62 | - | else throw("List size exceeds 2") | |
63 | - | ||
64 | - | $f0_2($f0_1($f0_1($acc0, 0), 1), 2) | |
65 | - | }, separator) | |
66 | - | else if ((length == 3)) | |
67 | - | then makeString({ | |
68 | - | let $l = params | |
69 | - | let $s = size($l) | |
70 | - | let $acc0 = nil | |
71 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
72 | - | then $a | |
73 | - | else addToList($a, $l[$i]) | |
74 | - | ||
75 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
76 | - | then $a | |
77 | - | else throw("List size exceeds 3") | |
78 | - | ||
79 | - | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
80 | - | }, separator) | |
81 | - | else if ((length == 4)) | |
82 | - | then makeString({ | |
83 | - | let $l = params | |
84 | - | let $s = size($l) | |
85 | - | let $acc0 = nil | |
86 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
87 | - | then $a | |
88 | - | else addToList($a, $l[$i]) | |
89 | - | ||
90 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
91 | - | then $a | |
92 | - | else throw("List size exceeds 4") | |
93 | - | ||
94 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4) | |
95 | - | }, separator) | |
96 | - | else if ((length == 5)) | |
97 | - | then makeString({ | |
98 | - | let $l = params | |
99 | - | let $s = size($l) | |
100 | - | let $acc0 = nil | |
101 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
102 | - | then $a | |
103 | - | else addToList($a, $l[$i]) | |
104 | - | ||
105 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
106 | - | then $a | |
107 | - | else throw("List size exceeds 5") | |
108 | - | ||
109 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5) | |
110 | - | }, separator) | |
111 | - | else throw("Max number of parameters exceeded") | |
20 | + | func randomize (bytes,range) = { | |
21 | + | let hash = sha256(bytes) | |
22 | + | let index = toInt(hash) | |
23 | + | (index % range) | |
112 | 24 | } | |
113 | 25 | ||
114 | 26 | ||
115 | - | func parseAsAuction (details) = { | |
116 | - | let res = split(details, separator) | |
117 | - | $Tuple5(addressFromStringValue(res[0]), parseIntValue(res[1]), parseIntValue(res[2]), parseIntValue(res[3]), parseIntValue(res[4])) | |
27 | + | func getPoint (bytes) = { | |
28 | + | let x = randomize(take(bytes, (size(bytes) / 2)), 100) | |
29 | + | let y = randomize(takeRight(bytes, (size(bytes) / 2)), 100) | |
30 | + | $Tuple2(x, y) | |
118 | 31 | } | |
119 | 32 | ||
120 | 33 | ||
121 | - | func parseAsSell (details) = { | |
122 | - | let res = split(details, separator) | |
123 | - | $Tuple2(addressFromStringValue(res[0]), parseIntValue(res[1])) | |
34 | + | func getGoalLinePoints () = { | |
35 | + | let p1 = split(getStringValue(this, kGoalP1), separator) | |
36 | + | let p2 = split(getStringValue(this, kGoalP2), separator) | |
37 | + | $Tuple2($Tuple2(parseIntValue(p1[0]), parseIntValue(p1[1])), $Tuple2(parseIntValue(p2[0]), parseIntValue(p2[1]))) | |
124 | 38 | } | |
125 | 39 | ||
126 | 40 | ||
127 | - | func joinStruct (params) = match params { | |
128 | - | case auction: (Address, Int, String, String) => | |
129 | - | joinString([toString(auction._1), toString(auction._2), auction._3, auction._4]) | |
130 | - | case sell: (Address, Int) => | |
131 | - | joinString([toString(sell._1), toString(sell._2)]) | |
132 | - | case _ => | |
133 | - | throw("Wrong params tupple") | |
134 | - | } | |
41 | + | func getDeflection () = getIntegerValue(this, kDeflection) | |
135 | 42 | ||
136 | 43 | ||
137 | - | func | |
44 | + | func getMaxBet () = getIntegerValue(this, kMaxBet) | |
138 | 45 | ||
139 | 46 | ||
140 | - | func setSell (nftId,celler,price) = StringEntry(getSellKey(nftId), joinStruct($Tuple2(celler, price))) | |
141 | - | ||
142 | - | ||
143 | - | func getAuction (nftId) = value(getString(this, getAuctionKey(nftId))) | |
144 | - | ||
145 | - | ||
146 | - | func getSell (nftId) = value(getString(this, getSellKey(nftId))) | |
147 | - | ||
148 | - | ||
149 | - | func calcPriceAtCurrentMoment (assetId,moment) = { | |
150 | - | let details = getAuction(assetId) | |
151 | - | let $t027552859 = parseAsAuction(details) | |
152 | - | let seller = $t027552859._1 | |
153 | - | let startPriceValue = $t027552859._2 | |
154 | - | let endPriceValue = $t027552859._3 | |
155 | - | let startPeriodValue = $t027552859._4 | |
156 | - | let endPeriodValue = $t027552859._5 | |
157 | - | if ((moment >= endPeriodValue)) | |
158 | - | then $Tuple2(seller, endPriceValue) | |
159 | - | else { | |
160 | - | let deltaPrice = (startPriceValue - endPriceValue) | |
161 | - | let period = (endPeriodValue - startPeriodValue) | |
162 | - | let spended = (moment - startPeriodValue) | |
163 | - | $Tuple2(seller, (startPriceValue - fraction(spended, deltaPrice, period))) | |
164 | - | } | |
47 | + | func getPolygonPoints () = { | |
48 | + | let p1 = split(getStringValue(this, kVertex1), separator) | |
49 | + | let p2 = split(getStringValue(this, kVertex2), separator) | |
50 | + | let p3 = split(getStringValue(this, kVertex3), separator) | |
51 | + | $Tuple3($Tuple2(parseIntValue(p1[0]), parseIntValue(p1[1])), $Tuple2(parseIntValue(p2[0]), parseIntValue(p2[1])), $Tuple2(parseIntValue(p3[0]), parseIntValue(p3[1]))) | |
165 | 52 | } | |
166 | 53 | ||
167 | 54 | ||
168 | - | func isNft (assetId) = match assetInfo(assetId) { | |
169 | - | case token: Asset => | |
170 | - | if (if ((token.decimals == 0)) | |
171 | - | then (token.quantity == 1) | |
172 | - | else false) | |
173 | - | then (token.reissuable == false) | |
174 | - | else false | |
175 | - | case _ => | |
176 | - | false | |
177 | - | } | |
178 | - | ||
179 | - | ||
180 | - | func isTrustedNft (assetId) = { | |
181 | - | let issuer = value(assetInfo(assetId)).issuer | |
182 | - | valueOrElse(getBoolean(this, getTrustedKey(issuer)), false) | |
55 | + | func getLine (p1,p2) = { | |
56 | + | let a = (p2._2 - p1._2) | |
57 | + | let b = (p1._1 - p2._1) | |
58 | + | let c = ((p1._2 * (p2._1 + p1._1)) - (p1._1 * (p1._2 + p2._2))) | |
59 | + | $Tuple3(a, b, c) | |
183 | 60 | } | |
184 | 61 | ||
185 | 62 | ||
186 | - | func isSellExist (assetId) = isDefined(getString(this, getSellKey(assetId))) | |
63 | + | func getOrthoLine (p1,nVec) = { | |
64 | + | let a = nVec._2 | |
65 | + | let b = -(nVec._1) | |
66 | + | let c = ((nVec._1 * p1._2) - (nVec._2 * p1._1)) | |
67 | + | $Tuple3(a, b, c) | |
68 | + | } | |
187 | 69 | ||
188 | 70 | ||
189 | - | func isAuctionExist (assetId) = isDefined(getString(this, getAuctionKey(assetId))) | |
71 | + | func getVec (start,end) = { | |
72 | + | let x = (end._1 - start._1) | |
73 | + | let y = (end._2 - start._2) | |
74 | + | $Tuple2(x, y) | |
75 | + | } | |
190 | 76 | ||
191 | 77 | ||
192 | - | func | |
78 | + | func mulVectors (vA,vB) = ((vA._1 * vB._2) - (vA._2 * vB._1)) | |
193 | 79 | ||
194 | 80 | ||
195 | - | func isCorrectAuctionPrices (startPrice,endPrice) = (startPrice > endPrice) | |
81 | + | func getLineLength (p1,p2) = { | |
82 | + | let a = pow((p2._1 - p1._1), 0, 2, 0, 0, DOWN) | |
83 | + | let b = pow((p2._2 - p1._2), 0, 2, 0, 0, DOWN) | |
84 | + | sqrt((a + b), 0, 0, DOWN) | |
85 | + | } | |
196 | 86 | ||
197 | 87 | ||
198 | - | func isAdmin (caller) = (caller == this) | |
88 | + | func calcCrosses (accum,nextValue) = { | |
89 | + | let vp1p2 = getVec(nextValue[0]._1, nextValue[0]._2) | |
90 | + | let vp1p3 = getVec(nextValue[0]._1, nextValue[1]._1) | |
91 | + | let vp1p4 = getVec(nextValue[0]._1, nextValue[1]._2) | |
92 | + | let vp3p4 = getVec(nextValue[1]._1, nextValue[1]._2) | |
93 | + | let vp3p1 = getVec(nextValue[1]._1, nextValue[0]._1) | |
94 | + | let vp3p2 = getVec(nextValue[1]._1, nextValue[0]._2) | |
95 | + | let v1 = mulVectors(vp3p4, vp3p1) | |
96 | + | let v2 = mulVectors(vp3p4, vp3p2) | |
97 | + | let v3 = mulVectors(vp1p2, vp1p3) | |
98 | + | let v4 = mulVectors(vp1p2, vp1p4) | |
99 | + | if (if ((0 > (v1 * v2))) | |
100 | + | then (0 > (v3 * v4)) | |
101 | + | else false) | |
102 | + | then (accum + 1) | |
103 | + | else accum | |
104 | + | } | |
199 | 105 | ||
200 | 106 | ||
201 | - | func isValidCaller (caller,seller) = if ((caller == this)) | |
202 | - | then true | |
203 | - | else (caller == seller) | |
107 | + | func isInside (p1,segment1,segment2,segment3) = { | |
108 | + | let segmentRay = $Tuple2(p1, $Tuple2(p1._1, 0)) | |
109 | + | let arr = [[segmentRay, segment1], [segmentRay, segment2], [segmentRay, segment3]] | |
110 | + | let count = { | |
111 | + | let $l = arr | |
112 | + | let $s = size($l) | |
113 | + | let $acc0 = 0 | |
114 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
115 | + | then $a | |
116 | + | else calcCrosses($a, $l[$i]) | |
117 | + | ||
118 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
119 | + | then $a | |
120 | + | else throw("List size exceeds 3") | |
121 | + | ||
122 | + | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
123 | + | } | |
124 | + | ((count % 2) == 1) | |
125 | + | } | |
204 | 126 | ||
205 | 127 | ||
206 | - | func | |
128 | + | func isPointInLine (p1,line) = ((((p1._1 * line._1) + (p1._2 * line._2)) + line._3) == 0) | |
207 | 129 | ||
208 | 130 | ||
209 | - | func isEnoughFunds (payment,currentMomentPrice) = (payment >= currentMomentPrice) | |
131 | + | func isPointInDeflection (p1,line) = { | |
132 | + | let $t059546056 = line | |
133 | + | let a1 = $t059546056._1 | |
134 | + | let b1 = $t059546056._2 | |
135 | + | let c1 = $t059546056._3 | |
136 | + | let $t060596194 = getOrthoLine(p1, $Tuple2(a1, b1)) | |
137 | + | let aNorm = $t060596194._1 | |
138 | + | let bNorm = $t060596194._2 | |
139 | + | let cNorm = $t060596194._3 | |
140 | + | let d = mulVectors($Tuple2(a1, b1), $Tuple2(aNorm, bNorm)) | |
141 | + | let dx = mulVectors($Tuple2(-(c1), b1), $Tuple2(-(cNorm), bNorm)) | |
142 | + | let dy = mulVectors($Tuple2(a1, -(c1)), $Tuple2(aNorm, -(cNorm))) | |
143 | + | let xRes = fraction(1, dx, d) | |
144 | + | let yRes = fraction(1, dy, d) | |
145 | + | let lineLen = getLineLength(p1, $Tuple2(xRes, yRes)) | |
146 | + | (getDeflection() >= lineLen) | |
147 | + | } | |
210 | 148 | ||
211 | 149 | ||
212 | - | func isWawes (assetId) = (assetId == unit) | |
150 | + | func isPointInPolygon (p1,vertex1,vertex2,vertex3) = { | |
151 | + | let segment1 = $Tuple2(vertex1, vertex2) | |
152 | + | let segment2 = $Tuple2(vertex2, vertex3) | |
153 | + | let segment3 = $Tuple2(vertex3, vertex1) | |
154 | + | if (if (if ((p1 == vertex1)) | |
155 | + | then true | |
156 | + | else (p1 == vertex2)) | |
157 | + | then true | |
158 | + | else (p1 == vertex3)) | |
159 | + | then true | |
160 | + | else isInside(p1, segment1, segment2, segment3) | |
161 | + | } | |
213 | 162 | ||
214 | 163 | ||
215 | - | func isCorrectNft (nftId) = if (!(isNft(nftId))) | |
216 | - | then throw("Token is not Nft") | |
217 | - | else if (isSellExist(nftId)) | |
218 | - | then throw("Sell already exists") | |
219 | - | else if (isAuctionExist(nftId)) | |
220 | - | then throw("Auction already exists") | |
221 | - | else unit | |
164 | + | func calcRewardMultiplier (inLine,inPolygon,inDeflection) = if (if (inLine) | |
165 | + | then inPolygon | |
166 | + | else false) | |
167 | + | then 10 | |
168 | + | else if (if (inDeflection) | |
169 | + | then inPolygon | |
170 | + | else false) | |
171 | + | then 8 | |
172 | + | else if (inLine) | |
173 | + | then 6 | |
174 | + | else if (inPolygon) | |
175 | + | then 4 | |
176 | + | else if (inDeflection) | |
177 | + | then 2 | |
178 | + | else 1 | |
222 | 179 | ||
223 | 180 | ||
224 | - | func | |
225 | - | then | |
226 | - | else | |
227 | - | ||
228 | - | ||
181 | + | func validatePayment (paymentAsset,paymentAmount) = if (if ((paymentAsset == unit)) | |
182 | + | then (getMaxBet() >= paymentAmount) | |
183 | + | else false) | |
184 | + | then unit | |
185 | + | else throw("Incorrect payment") | |
229 | 186 | ||
230 | 187 | ||
231 | - | func calcFee () = 0 | |
188 | + | @Callable(i) | |
189 | + | func setLotteryParams (goalP1,goalP2,deflection,vertex1,vertex2,vertex3,maxBet) = [StringEntry(kGoalP1, goalP1), StringEntry(kGoalP2, goalP2), IntegerEntry(kDeflection, deflection), StringEntry(kVertex1, vertex1), StringEntry(kVertex2, vertex2), StringEntry(kVertex3, vertex3), IntegerEntry(kMaxBet, maxBet)] | |
232 | 190 | ||
233 | 191 | ||
234 | - | func calcTrustedFee () = 0 | |
235 | - | ||
236 | - | ||
237 | - | func resultFundsAmounts (isTrusted,paymentAmount,actualPrice) = if (isTrusted) | |
238 | - | then $Tuple2((actualPrice - calcTrustedFee()), (paymentAmount - actualPrice)) | |
239 | - | else $Tuple2((actualPrice - calcFee()), (paymentAmount - actualPrice)) | |
240 | - | ||
241 | - | ||
242 | - | func getSlot (nftId) = if (isSellExist(nftId)) | |
243 | - | then $Tuple2(kSell, getSell(nftId)) | |
244 | - | else if (isAuctionExist(nftId)) | |
245 | - | then $Tuple2(kAuction, getAuction(nftId)) | |
246 | - | else throw("Slot doesn`t exist") | |
247 | - | ||
248 | - | ||
249 | - | let kBuy = "buy" | |
250 | - | ||
251 | - | let ASIMI_TOKEN = base58'EbLVSrAi6vS3AkLwBinzZCvAXP2yYiFJEzj1MBVHcwZ5' | |
252 | 192 | ||
253 | 193 | @Callable(i) | |
254 | - | func createNft (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = { | |
255 | - | let newToken = Issue(nft_name, nft_description, 1, 0, false) | |
256 | - | let issueId = calculateAssetId(newToken) | |
257 | - | [newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller)), StringEntry(((toBase58String(issueId) + separator) + "nft_type"), nft_type), StringEntry(((toBase58String(issueId) + separator) + "nft_tags"), nft_tags), StringEntry(((toBase58String(issueId) + separator) + "nft_dAppAddress"), nft_dAppAddress), IntegerEntry(((toBase58String(issueId) + separator) + "nft_selling_price"), nft_selling_price), StringEntry(((toBase58String(issueId) + separator) + "nft_onSell"), nft_onSell), StringEntry(((toBase58String(issueId) + separator) + "nft_data"), nft_data)] | |
194 | + | func tryToWin (p1x,p1y) = { | |
195 | + | let $t089109028 = $Tuple2(i.payments[0].assetId, value(i.payments[0].amount)) | |
196 | + | let paymentAsset = $t089109028._1 | |
197 | + | let paymentAmount = $t089109028._2 | |
198 | + | valueOrElse(validatePayment(paymentAsset, paymentAmount), { | |
199 | + | let p1 = $Tuple2(p1x, p1y) | |
200 | + | let $t092589379 = getGoalLinePoints() | |
201 | + | let p2 = $t092589379._1 | |
202 | + | let p3 = $t092589379._2 | |
203 | + | let $t093849483 = getPolygonPoints() | |
204 | + | let p4 = $t093849483._1 | |
205 | + | let p5 = $t093849483._2 | |
206 | + | let p6 = $t093849483._3 | |
207 | + | let $t094889580 = getLine(p2, p3) | |
208 | + | let a1 = $t094889580._1 | |
209 | + | let b1 = $t094889580._2 | |
210 | + | let c1 = $t094889580._3 | |
211 | + | let inLine = isPointInLine(p1, $Tuple3(a1, b1, c1)) | |
212 | + | let inPolygon = isPointInPolygon(p1, p4, p5, p6) | |
213 | + | let inDeflection = isPointInDeflection(p1, $Tuple3(a1, b1, c1)) | |
214 | + | if (if (if (inLine) | |
215 | + | then true | |
216 | + | else inDeflection) | |
217 | + | then true | |
218 | + | else inPolygon) | |
219 | + | then { | |
220 | + | let multiplier = calcRewardMultiplier(inLine, inPolygon, inDeflection) | |
221 | + | let reward = (paymentAmount * multiplier) | |
222 | + | [IntegerEntry("multiplier", multiplier), ScriptTransfer(i.originCaller, reward, unit)] | |
223 | + | } | |
224 | + | else nil | |
225 | + | }) | |
258 | 226 | } | |
259 | 227 | ||
260 | 228 | ||
261 | 229 | ||
262 | 230 | @Callable(i) | |
263 | - | func issueNft (name,meta) = { | |
264 | - | let newToken = Issue(name, meta, 1, 0, false) | |
265 | - | let issueId = calculateAssetId(newToken) | |
266 | - | [newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller))] | |
267 | - | } | |
268 | - | ||
269 | - | ||
270 | - | ||
271 | - | @Callable(i) | |
272 | - | func buyNFT (nftID) = { | |
273 | - | let assetId = fromBase58String(nftID) | |
274 | - | let amount = value(i.payments[0].amount) | |
275 | - | let amount1 = value(i.payments[1].amount) | |
276 | - | let price = valueOrErrorMessage(getString(((kPrice + separator) + nftID)), "There is no price for this NFT") | |
277 | - | let owner = valueOrErrorMessage(getStringValue(((nftID + separator) + "Owner")), "No owner") | |
278 | - | if ((i.payments[0].assetId != unit)) | |
279 | - | then throw("Pay in waves") | |
280 | - | else if ((i.payments[1].assetId != ASIMI_TOKEN)) | |
281 | - | then throw("Pay in ASIMI") | |
282 | - | else if ((parseIntValue(price) > amount)) | |
283 | - | then throw("Invalid payment WAVES") | |
284 | - | else [ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(value(addressFromString(owner)), parseIntValue(price), unit), StringEntry(((toString(i.caller) + separator) + kBuy), ((nftID + separator) + toString(amount)))] | |
285 | - | } | |
286 | - | ||
287 | - | ||
288 | - | ||
289 | - | @Callable(i) | |
290 | - | func sellNFT (price) = { | |
291 | - | let $t074127497 = $Tuple2(value(i.payments[0].assetId), value(i.payments[0].amount)) | |
292 | - | let token0 = $t074127497._1 | |
293 | - | let amount0 = $t074127497._2 | |
294 | - | if (!(isNft(token0))) | |
295 | - | then throw("Token is not NFT") | |
296 | - | else [StringEntry(((kPrice + separator) + toBase58String(value(i.payments[0].assetId))), toString(price)), StringEntry(((toString(i.caller) + separator) + kSell), ((toBase58String(token0) + separator) + toString(amount0)))] | |
297 | - | } | |
298 | - | ||
299 | - | ||
300 | - | ||
301 | - | @Callable(i) | |
302 | - | func addSell (price) = { | |
303 | - | let nftId = value(i.payments[0].assetId) | |
304 | - | valueOrElse(isCorrectNft(nftId), if (!(isCorrectSellPrice(price))) | |
305 | - | then throw("Price must be > 0") | |
306 | - | else [setSell(nftId, i.caller, price)]) | |
307 | - | } | |
308 | - | ||
309 | - | ||
310 | - | ||
311 | - | @Callable(i) | |
312 | - | func addAuction (startPrice,start,end) = { | |
313 | - | let nftId = value(i.payments[0].assetId) | |
314 | - | valueOrElse(isCorrectNft(nftId), [setAuction(i.caller, nftId, startPrice, start, end), StringEntry(((toBase58String(nftId) + separator) + "nft_owner"), toString(i.caller))]) | |
315 | - | } | |
316 | - | ||
317 | - | ||
318 | - | ||
319 | - | @Callable(i) | |
320 | - | func buyFromSlot (nftId) = { | |
321 | - | let $t084178506 = $Tuple2(i.payments[0].assetId, value(i.payments[0].amount)) | |
322 | - | let paymentAsset = $t084178506._1 | |
323 | - | let paymentAmount = $t084178506._2 | |
324 | - | let assetId = fromBase58String(nftId) | |
325 | - | let $t085508588 = getSlot(assetId) | |
326 | - | let type = $t085508588._1 | |
327 | - | let details = $t085508588._2 | |
328 | - | let baseRes = [ScriptTransfer(i.caller, 1, assetId), DeleteEntry(getSlotKey(type, assetId))] | |
329 | - | if ((type == kSell)) | |
330 | - | then { | |
331 | - | let $t087308777 = parseAsSell(details) | |
332 | - | let seller = $t087308777._1 | |
333 | - | let priceValue = $t087308777._2 | |
334 | - | valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, priceValue), { | |
335 | - | let $t088628964 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, priceValue) | |
336 | - | let sellerAmount = $t088628964._1 | |
337 | - | let buyerAmount = $t088628964._2 | |
338 | - | let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)]) | |
339 | - | if ((buyerAmount > 0)) | |
340 | - | then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)]) | |
341 | - | else updatedRes | |
342 | - | }) | |
343 | - | } | |
344 | - | else { | |
345 | - | let $t091819250 = calcPriceAtCurrentMoment(assetId, height) | |
346 | - | let seller = $t091819250._1 | |
347 | - | let actualPrice = $t091819250._2 | |
348 | - | valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, actualPrice), { | |
349 | - | let $t093369439 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, actualPrice) | |
350 | - | let sellerAmount = $t093369439._1 | |
351 | - | let buyerAmount = $t093369439._2 | |
352 | - | let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)]) | |
353 | - | if ((buyerAmount > 0)) | |
354 | - | then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)]) | |
355 | - | else updatedRes | |
356 | - | }) | |
357 | - | } | |
358 | - | } | |
359 | - | ||
360 | - | ||
361 | - | ||
362 | - | @Callable(i) | |
363 | - | func declineSlot (nftId) = { | |
364 | - | let assetId = fromBase58String(nftId) | |
365 | - | let $t097409778 = getSlot(assetId) | |
366 | - | let type = $t097409778._1 | |
367 | - | let details = $t097409778._2 | |
368 | - | let baseRes = [DeleteEntry(getSlotKey(type, assetId))] | |
369 | - | if ((type == kSell)) | |
370 | - | then { | |
371 | - | let $t098709917 = parseAsSell(details) | |
372 | - | let seller = $t098709917._1 | |
373 | - | let priceValue = $t098709917._2 | |
374 | - | if (!(isValidCaller(i.caller, seller))) | |
375 | - | then throw("Invalid caller") | |
376 | - | else (baseRes ++ [ScriptTransfer(seller, 1, assetId)]) | |
377 | - | } | |
378 | - | else { | |
379 | - | let $t01006210166 = parseAsAuction(details) | |
380 | - | let seller = $t01006210166._1 | |
381 | - | let startPriceValue = $t01006210166._2 | |
382 | - | let endPriceValue = $t01006210166._3 | |
383 | - | let startPeriodValue = $t01006210166._4 | |
384 | - | let endPeriodValue = $t01006210166._5 | |
385 | - | if (!(isValidCaller(i.caller, seller))) | |
386 | - | then throw("Invalid caller") | |
387 | - | else if (!(isAuctionEnded(height, endPeriodValue))) | |
388 | - | then throw("Wait for end of auction") | |
389 | - | else (baseRes ++ [ScriptTransfer(seller, 1, assetId)]) | |
390 | - | } | |
391 | - | } | |
392 | - | ||
393 | - | ||
394 | - | ||
395 | - | @Callable(i) | |
396 | - | func setTrustedIssuer (trustedAddr) = if (!(isAdmin(i.caller))) | |
397 | - | then throw("Only admin") | |
398 | - | else [BooleanEntry(getTrustedKey(addressFromStringValue(trustedAddr)), true)] | |
399 | - | ||
400 | - | ||
401 | - | ||
402 | - | @Callable(i) | |
403 | - | func getPriceAtCurrentMoment (nftId,moment) = { | |
404 | - | let assetId = fromBase58String(nftId) | |
405 | - | let $t01070710770 = calcPriceAtCurrentMoment(assetId, moment) | |
406 | - | let seller = $t01070710770._1 | |
407 | - | let price = $t01070710770._2 | |
408 | - | [IntegerEntry(getPriceKey(assetId), price)] | |
231 | + | func startGame () = { | |
232 | + | let p1 = getPoint(i.transactionId) | |
233 | + | let res = invoke(this, "tryToWin", [p1._1, p1._2], [i.payments[0]]) | |
234 | + | if ((res == res)) | |
235 | + | then nil | |
236 | + | else throw("Strict value is not equal to itself.") | |
409 | 237 | } | |
410 | 238 | ||
411 | 239 |
github/deemru/w8io/169f3d6 66.51 ms ◑