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:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "_"
55
6-let kAuction = "auction"
6+let kGoalP1 = "goalP1"
77
8-let kSell = "sell"
8+let kGoalP2 = "goalP2"
99
10-let kTrusted = "trusted"
10+let kDeflection = "deflection"
1111
12-let kPrice = "price"
12+let kVertex1 = "vertex1"
1313
14-func getSlotKey (prefix,nftId) = ((prefix + separator) + toBase58String(nftId))
14+let kVertex2 = "vertex2"
1515
16+let kVertex3 = "vertex3"
1617
17-func getPriceKey (nftId) = ((kPrice + separator) + toBase58String(nftId))
18+let kMaxBet = "maxBet"
1819
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)
11224 }
11325
11426
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)
11831 }
11932
12033
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])))
12438 }
12539
12640
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)
13542
13643
137-func setAuction (seller,nftId,startPrice,start,end) = StringEntry(getAuctionKey(nftId), joinStruct($Tuple4(seller, startPrice, start, end)))
44+func getMaxBet () = getIntegerValue(this, kMaxBet)
13845
13946
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])))
16552 }
16653
16754
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)
18360 }
18461
18562
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+ }
18769
18870
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+ }
19076
19177
192-func isCorrectSellPrice (price) = (price > 0)
78+func mulVectors (vA,vB) = ((vA._1 * vB._2) - (vA._2 * vB._1))
19379
19480
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+ }
19686
19787
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+ }
199105
200106
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+ }
204126
205127
206-func isAuctionEnded (now,end) = (now > end)
128+func isPointInLine (p1,line) = ((((p1._1 * line._1) + (p1._2 * line._2)) + line._3) == 0)
207129
208130
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+ }
210148
211149
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+ }
213162
214163
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
222179
223180
224-func isCorrectPayments (paymentAsset,paymentAmount,price) = if (!(isWawes(paymentAsset)))
225- then throw("Payment must be at WAVES")
226- else if (!(isEnoughFunds(paymentAmount, price)))
227- then throw("Not enough funds")
228- else unit
181+func validatePayment (paymentAsset,paymentAmount) = if (if ((paymentAsset == unit))
182+ then (getMaxBet() >= paymentAmount)
183+ else false)
184+ then unit
185+ else throw("Incorrect payment")
229186
230187
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)]
232190
233191
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'
252192
253193 @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+ })
258226 }
259227
260228
261229
262230 @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.")
409237 }
410238
411239
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "_"
55
6-let kAuction = "auction"
6+let kGoalP1 = "goalP1"
77
8-let kSell = "sell"
8+let kGoalP2 = "goalP2"
99
10-let kTrusted = "trusted"
10+let kDeflection = "deflection"
1111
12-let kPrice = "price"
12+let kVertex1 = "vertex1"
1313
14-func getSlotKey (prefix,nftId) = ((prefix + separator) + toBase58String(nftId))
14+let kVertex2 = "vertex2"
1515
16+let kVertex3 = "vertex3"
1617
17-func getPriceKey (nftId) = ((kPrice + separator) + toBase58String(nftId))
18+let kMaxBet = "maxBet"
1819
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)
11224 }
11325
11426
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)
11831 }
11932
12033
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])))
12438 }
12539
12640
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)
13542
13643
137-func setAuction (seller,nftId,startPrice,start,end) = StringEntry(getAuctionKey(nftId), joinStruct($Tuple4(seller, startPrice, start, end)))
44+func getMaxBet () = getIntegerValue(this, kMaxBet)
13845
13946
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])))
16552 }
16653
16754
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)
18360 }
18461
18562
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+ }
18769
18870
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+ }
19076
19177
192-func isCorrectSellPrice (price) = (price > 0)
78+func mulVectors (vA,vB) = ((vA._1 * vB._2) - (vA._2 * vB._1))
19379
19480
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+ }
19686
19787
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+ }
199105
200106
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+ }
204126
205127
206-func isAuctionEnded (now,end) = (now > end)
128+func isPointInLine (p1,line) = ((((p1._1 * line._1) + (p1._2 * line._2)) + line._3) == 0)
207129
208130
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+ }
210148
211149
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+ }
213162
214163
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
222179
223180
224-func isCorrectPayments (paymentAsset,paymentAmount,price) = if (!(isWawes(paymentAsset)))
225- then throw("Payment must be at WAVES")
226- else if (!(isEnoughFunds(paymentAmount, price)))
227- then throw("Not enough funds")
228- else unit
181+func validatePayment (paymentAsset,paymentAmount) = if (if ((paymentAsset == unit))
182+ then (getMaxBet() >= paymentAmount)
183+ else false)
184+ then unit
185+ else throw("Incorrect payment")
229186
230187
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)]
232190
233191
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'
252192
253193 @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+ })
258226 }
259227
260228
261229
262230 @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.")
409237 }
410238
411239

github/deemru/w8io/169f3d6 
66.51 ms