tx · 8SW79yERkseQURvtRNdZpXn41YYvGyR7r9wgcsRYQe8h 3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs: -0.01000000 Waves 2023.09.01 15:52 [2736333] smart account 3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs > SELF 0.00000000 Waves
{ "type": 13, "id": "8SW79yERkseQURvtRNdZpXn41YYvGyR7r9wgcsRYQe8h", "fee": 1000000, "feeAssetId": null, "timestamp": 1693572747622, "version": 2, "chainId": 84, "sender": "3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs", "senderPublicKey": "8yQuxvQ2qLzXJrgbKZHbsfnNNjuU5wfHheyVujdALGsF", "proofs": [ "24vED4nXBsc6j7EcBBvPK1pbE77CUUFYPEWPaHF3QX5jzh1PVMyuDtmhD6a2sD8tCHQQY7Fd3M7i7ScivyPaPeci" ], "script": "base64:BgIfCAISABIECgIIARIGCgQIAQEIEgQKAggBEgUKAwgICBIADmxvdHRlcnlBc3NldElECQDZBAECLDNMejIzbVNVdlQxRXN3Y0JuMnNVUllKRzJhdDhyRzVhRnVVclRBd2FQTTZRAAp0aWNrZXRTaXplAAEBEGdldEludGVnZXJPckVsc2UCA2tleQN2YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUDa2V5BQN2YWwBD2dldFN0cmluZ09yRWxzZQIDa2V5A3ZhbAkBC3ZhbHVlT3JFbHNlAgkAoggBBQNrZXkFA3ZhbAECbWsBAXgJALkJAgUBeAIBXwERa2V5QWRyVG90YWxTdGFrZWQBA2FkcgkBAm1rAQkAzAgCAgNhZHIJAMwIAgUDYWRyCQDMCAICC3RvdGFsU3Rha2VkBQNuaWwBFWtleUxvdHRlcnlUb3RhbFN0YWtlZAELbG90dGVyeU5hbWUJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgt0b3RhbFN0YWtlZAUDbmlsARNrZXlMb3R0ZXJ5QWRyU3Rha2VkAgtsb3R0ZXJ5TmFtZQNhZHIJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgNhZHIJAMwIAgUDYWRyCQDMCAICBnN0YWtlZAUDbmlsARNrZXlMb3R0ZXJ5QWRyTG9ja2VkAgtsb3R0ZXJ5TmFtZQNhZHIJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgNhZHIJAMwIAgUDYWRyCQDMCAICBmxvY2tlZAUDbmlsARVrZXlMb3R0ZXJ5RmluYWxIZWlnaHQBC2xvdHRlcnlOYW1lCQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgILZmluYWxIZWlnaHQFA25pbAEUa2V5TG90dGVyeVByaXplVmFsdWUCC2xvdHRlcnlOYW1lB3ByaXplSUQJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgVwcml6ZQkAzAgCCQCkAwEFB3ByaXplSUQJAMwIAgIFdmFsdWUFA25pbAEYa2V5TG90dGVyeVByaXplVGhyZXNob2xkAgtsb3R0ZXJ5TmFtZQdwcml6ZUlECQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgIFcHJpemUJAMwIAgkApAMBBQdwcml6ZUlECQDMCAICCXRocmVzaG9sZAUDbmlsARVrZXlMb3R0ZXJ5UHJpemVDaG9pY2UCC2xvdHRlcnlOYW1lB3ByaXplSUQJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgVwcml6ZQkAzAgCCQCkAwEFB3ByaXplSUQJAMwIAgIGY2hvaWNlBQNuaWwBFWtleUxvdHRlcnlQcml6ZVJhbmRvbQILbG90dGVyeU5hbWUHcHJpemVJRAkBAm1rAQkAzAgCAgdsb3R0ZXJ5CQDMCAIFC2xvdHRlcnlOYW1lCQDMCAICBXByaXplCQDMCAIJAKQDAQUHcHJpemVJRAkAzAgCAgZyYW5kb20FA25pbAEWa2V5TG90dGVyeVRpY2tldHNPd25lcgMLbG90dGVyeU5hbWUEZnJvbQJ0bwkBAm1rAQkAzAgCAgdsb3R0ZXJ5CQDMCAIFC2xvdHRlcnlOYW1lCQDMCAICBGZyb20JAMwIAgkApAMBBQRmcm9tCQDMCAICAnRvCQDMCAIJAKQDAQUCdG8JAMwIAgIFb3duZXIFA25pbAASX2FjdGl2ZUxvdHRlcnlOYW1lCQECbWsBCQDMCAICBXBhcmFtCQDMCAICEWFjdGl2ZUxvdHRlcnlOYW1lBQNuaWwAEl9nbG9iYWxUb3RhbFN0YWtlZAkBAm1rAQkAzAgCAgVwYXJhbQkAzAgCAhFnbG9iYWxUb3RhbFN0YWtlZAUDbmlsARFhY3RpdmVMb3R0ZXJ5TmFtZQAEC2xvdHRlcnlOYW1lCQEPZ2V0U3RyaW5nT3JFbHNlAgUSX2FjdGl2ZUxvdHRlcnlOYW1lAgADCQAAAgULbG90dGVyeU5hbWUCAAIABBJsb3R0ZXJ5RmluYWxIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARVrZXlMb3R0ZXJ5RmluYWxIZWlnaHQBBQtsb3R0ZXJ5TmFtZQMJAGcCBQZoZWlnaHQFEmxvdHRlcnlGaW5hbEhlaWdodAIABQtsb3R0ZXJ5TmFtZQUBaQEFc3Rha2UABAtsb3R0ZXJ5TmFtZQkBEWFjdGl2ZUxvdHRlcnlOYW1lAAMJAAACBQtsb3R0ZXJ5TmFtZQIACQACAQISTG90dGVyeSBub3QgYWN0aXZlAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEE5vIHBheW1lbnQgYWRkZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhdUb28gbWFueSBwYXltZW50cyBhZGRlZAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUObG90dGVyeUFzc2V0SUQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0SWQEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDHRpY2tldEFtb3VudAkAaQIFBmFtb3VudAUKdGlja2V0U2l6ZQMJAAACBQx0aWNrZXRBbW91bnQAAAkAAgECJU5vdCBlbm91Z2ggdG8gYnV5IGF0IGxlYXN0IG9uZSB0aWNrZXQEDWNhbGxlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBBNfbG90dGVyeVRvdGFsU3Rha2VkCQEVa2V5TG90dGVyeVRvdGFsU3Rha2VkAQULbG90dGVyeU5hbWUEEmxvdHRlcnlUb3RhbFN0YWtlZAkBEGdldEludGVnZXJPckVsc2UCBRNfbG90dGVyeVRvdGFsU3Rha2VkAAAEBl9vd25lcgkBFmtleUxvdHRlcnlUaWNrZXRzT3duZXIDBQtsb3R0ZXJ5TmFtZQUSbG90dGVyeVRvdGFsU3Rha2VkCQBlAgkAZAIFEmxvdHRlcnlUb3RhbFN0YWtlZAUMdGlja2V0QW1vdW50AAEED19hZHJUb3RhbFN0YWtlZAkBEWtleUFkclRvdGFsU3Rha2VkAQUNY2FsbGVyQWRkcmVzcwQOYWRyVG90YWxTdGFrZWQJARBnZXRJbnRlZ2VyT3JFbHNlAgUPX2FkclRvdGFsU3Rha2VkAAAEEV9sb3R0ZXJ5QWRyU3Rha2VkCQETa2V5TG90dGVyeUFkclN0YWtlZAIFC2xvdHRlcnlOYW1lBQ1jYWxsZXJBZGRyZXNzBBVhZHJMb3R0ZXJ5VG90YWxTdGFrZWQJARBnZXRJbnRlZ2VyT3JFbHNlAgURX2xvdHRlcnlBZHJTdGFrZWQAAAQGY2hhbmdlCQBlAgUGYW1vdW50CQBoAgUMdGlja2V0QW1vdW50BQp0aWNrZXRTaXplBBFnbG9iYWxUb3RhbFN0YWtlZAkBEGdldEludGVnZXJPckVsc2UCBRJfZ2xvYmFsVG90YWxTdGFrZWQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmNoYW5nZQUObG90dGVyeUFzc2V0SUQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGX293bmVyBQ1jYWxsZXJBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJfZ2xvYmFsVG90YWxTdGFrZWQJAGQCBRFnbG9iYWxUb3RhbFN0YWtlZAUMdGlja2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNfbG90dGVyeVRvdGFsU3Rha2VkCQBkAgUSbG90dGVyeVRvdGFsU3Rha2VkBQx0aWNrZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFD19hZHJUb3RhbFN0YWtlZAkAZAIFDmFkclRvdGFsU3Rha2VkBQx0aWNrZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEV9sb3R0ZXJ5QWRyU3Rha2VkCQBkAgUVYWRyTG90dGVyeVRvdGFsU3Rha2VkBQx0aWNrZXRBbW91bnQFA25pbAFpAQxzdGFydExvdHRlcnkCC2xvdHRlcnlOYW1lEmxvdHRlcnlGaW5hbEhlaWdodAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgUSX2FjdGl2ZUxvdHRlcnlOYW1lBQtsb3R0ZXJ5TmFtZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleUxvdHRlcnlGaW5hbEhlaWdodAEFC2xvdHRlcnlOYW1lBRJsb3R0ZXJ5RmluYWxIZWlnaHQFA25pbAFpAQxkZWNsYXJlUHJpemUEC2xvdHRlcnlOYW1lB3ByaXplSWQOcHJpemVUaHJlc2hvbGQKcHJpemVWYWx1ZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlMb3R0ZXJ5UHJpemVUaHJlc2hvbGQCBQtsb3R0ZXJ5TmFtZQUHcHJpemVJZAUOcHJpemVUaHJlc2hvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUxvdHRlcnlQcml6ZVZhbHVlAgULbG90dGVyeU5hbWUFB3ByaXplSWQFCnByaXplVmFsdWUFA25pbAFpARRmaW5hbGFpemVQcml6ZVJhbmRvbQILbG90dGVyeU5hbWUHcHJpemVJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkEEmxvdHRlcnlGaW5hbEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBFWtleUxvdHRlcnlGaW5hbEhlaWdodAEFC2xvdHRlcnlOYW1lAwkAZgIJAGQCBRJsb3R0ZXJ5RmluYWxIZWlnaHQAAQUGaGVpZ2h0CQACAQIXTG90dGVyeSBpcyBub3Qgb3ZlciB5ZXQEEWxvdHRlcnlQcml6ZVZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleUxvdHRlcnlQcml6ZVZhbHVlAgULbG90dGVyeU5hbWUFB3ByaXplSWQCFFByaXplIGRvZXMgbm90IGV4aXN0BAtmaW5hbEJsb2NrMAkBBXZhbHVlAQkA7QcBBRJsb3R0ZXJ5RmluYWxIZWlnaHQEC2ZpbmFsQmxvY2sxCQEFdmFsdWUBCQDtBwEJAGQCBRJsb3R0ZXJ5RmluYWxIZWlnaHQAAQQOcHJpemVSYW5kb21SYXcJAJ4DAQkA9wMBCQDLAQIJAMsBAgkAywECAQl2h2WWWi216vIJAJoDAQUHcHJpemVJZAkBBXZhbHVlAQgFC2ZpbmFsQmxvY2swA3ZyZgkBBXZhbHVlAQgFC2ZpbmFsQmxvY2sxA3ZyZgQLcHJpemVSYW5kb20DCQC/AgIJALYCAQAABQ5wcml6ZVJhbmRvbVJhdwkAvgIBBQ5wcml6ZVJhbmRvbVJhdwUOcHJpemVSYW5kb21SYXcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxvdHRlcnlQcml6ZVJhbmRvbQIFC2xvdHRlcnlOYW1lBQdwcml6ZUlkCQCmAwEFC3ByaXplUmFuZG9tBQNuaWwBaQESZGVjbGFyZVByaXplV2lubmVyAwtsb3R0ZXJ5TmFtZQdwcml6ZUlkCXdpbm5lckFkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIAAgAFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXld86KR", "height": 2736333, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G7NkxgAfk2ZZCr5khc1QMJ5s799kj65gXxtJ7pm1dWZz Next: DN7jhGs21wgMBEH7XJMegDU6v1WdtCuPm2SnXkVY747P Diff:
Old | New | Differences | |
---|---|---|---|
20 | 20 | func k (l) = g(["lottery", l, "totalStaked"]) | |
21 | 21 | ||
22 | 22 | ||
23 | - | func m (l,j) = g(["lottery", l, "adr", j, " | |
23 | + | func m (l,j) = g(["lottery", l, "adr", j, "staked"]) | |
24 | 24 | ||
25 | 25 | ||
26 | - | func n (l) = g(["lottery", l, " | |
26 | + | func n (l,j) = g(["lottery", l, "adr", j, "locked"]) | |
27 | 27 | ||
28 | 28 | ||
29 | - | func o (l | |
29 | + | func o (l) = g(["lottery", l, "finalHeight"]) | |
30 | 30 | ||
31 | 31 | ||
32 | - | func | |
32 | + | func p (l,q) = g(["lottery", l, "prize", toString(q), "value"]) | |
33 | 33 | ||
34 | 34 | ||
35 | - | ||
35 | + | func r (l,q) = g(["lottery", l, "prize", toString(q), "threshold"]) | |
36 | 36 | ||
37 | - | func s () = { | |
38 | - | let l = f(r, "") | |
37 | + | ||
38 | + | func s (l,q) = g(["lottery", l, "prize", toString(q), "choice"]) | |
39 | + | ||
40 | + | ||
41 | + | func t (l,q) = g(["lottery", l, "prize", toString(q), "random"]) | |
42 | + | ||
43 | + | ||
44 | + | func u (l,v,w) = g(["lottery", l, "from", toString(v), "to", toString(w), "owner"]) | |
45 | + | ||
46 | + | ||
47 | + | let x = g(["param", "activeLotteryName"]) | |
48 | + | ||
49 | + | let y = g(["param", "globalTotalStaked"]) | |
50 | + | ||
51 | + | func z () = { | |
52 | + | let l = f(x, "") | |
39 | 53 | if ((l == "")) | |
40 | 54 | then "" | |
41 | 55 | else { | |
42 | - | let | |
43 | - | if (( | |
56 | + | let A = getIntegerValue(o(l)) | |
57 | + | if ((height >= A)) | |
44 | 58 | then "" | |
45 | 59 | else l | |
46 | 60 | } | |
47 | 61 | } | |
48 | 62 | ||
49 | 63 | ||
50 | - | @Callable( | |
64 | + | @Callable(B) | |
51 | 65 | func stake () = { | |
52 | - | let l = | |
66 | + | let l = z() | |
53 | 67 | if ((l == "")) | |
54 | 68 | then throw("Lottery not active") | |
55 | - | else if ((size( | |
69 | + | else if ((size(B.payments) == 0)) | |
56 | 70 | then throw("No payment added") | |
57 | - | else if ((size( | |
71 | + | else if ((size(B.payments) != 1)) | |
58 | 72 | then throw("Too many payments added") | |
59 | - | else if (( | |
73 | + | else if ((B.payments[0].assetId != a)) | |
60 | 74 | then throw("Wrong payment assetId") | |
61 | 75 | else { | |
62 | - | let | |
63 | - | let | |
64 | - | if (( | |
76 | + | let C = B.payments[0].amount | |
77 | + | let D = (C / b) | |
78 | + | if ((D == 0)) | |
65 | 79 | then throw("Not enough to buy at least one ticket") | |
66 | 80 | else { | |
67 | - | let x = toString(u.caller) | |
68 | - | let y = k(l) | |
69 | - | let z = getIntegerValue(y) | |
70 | - | let A = g(["lottery", l, "from", toString(z), "to", toString(((z + w) - 1)), "owner"]) | |
71 | - | let B = i(x) | |
72 | - | let C = c(B, 0) | |
73 | - | let D = m(l, x) | |
74 | - | let E = c(D, 0) | |
75 | - | let F = (v - (w * b)) | |
76 | - | [IntegerEntry(y, (z + w)), StringEntry(A, x), IntegerEntry(B, (C + w)), IntegerEntry(D, (E + w))] | |
81 | + | let E = toString(B.caller) | |
82 | + | let F = k(l) | |
83 | + | let G = c(F, 0) | |
84 | + | let H = u(l, G, ((G + D) - 1)) | |
85 | + | let I = i(E) | |
86 | + | let J = c(I, 0) | |
87 | + | let K = m(l, E) | |
88 | + | let L = c(K, 0) | |
89 | + | let M = (C - (D * b)) | |
90 | + | let N = c(y, 0) | |
91 | + | [ScriptTransfer(B.caller, M, a), StringEntry(H, E), IntegerEntry(y, (N + D)), IntegerEntry(F, (G + D)), IntegerEntry(I, (J + D)), IntegerEntry(K, (L + D))] | |
77 | 92 | } | |
78 | 93 | } | |
79 | 94 | } | |
80 | 95 | ||
81 | 96 | ||
82 | 97 | ||
83 | - | @Callable(u) | |
84 | - | func claim () = if ((size(u.payments) > 0)) | |
85 | - | then throw("No payments needed") | |
98 | + | @Callable(B) | |
99 | + | func startLottery (l,A) = if ((B.caller != this)) | |
100 | + | then throw("Admin only") | |
101 | + | else [StringEntry(x, l), IntegerEntry(o(l), A)] | |
102 | + | ||
103 | + | ||
104 | + | ||
105 | + | @Callable(B) | |
106 | + | func declarePrize (l,O,P,Q) = if ((B.caller != this)) | |
107 | + | then throw("Admin only") | |
108 | + | else [IntegerEntry(r(l, O), P), StringEntry(p(l, O), Q)] | |
109 | + | ||
110 | + | ||
111 | + | ||
112 | + | @Callable(B) | |
113 | + | func finalaizePrizeRandom (l,O) = if ((B.caller != this)) | |
114 | + | then throw("Admin only") | |
86 | 115 | else { | |
87 | - | let x = toString(u.caller) | |
88 | - | let l = s() | |
89 | - | let G = if ((l == "")) | |
90 | - | then 0 | |
91 | - | else c(m(l, x), 0) | |
92 | - | let B = i(x) | |
93 | - | let C = c(B, 0) | |
94 | - | let H = (C - G) | |
95 | - | if ((0 >= H)) | |
96 | - | then throw("No assets available for claim") | |
97 | - | else [ScriptTransfer(u.caller, H, a), IntegerEntry(B, (C - H))] | |
116 | + | let A = getIntegerValue(o(l)) | |
117 | + | if (((A + 1) > height)) | |
118 | + | then throw("Lottery is not over yet") | |
119 | + | else { | |
120 | + | let R = valueOrErrorMessage(getString(p(l, O)), "Prize does not exist") | |
121 | + | let S = value(blockInfoByHeight(A)) | |
122 | + | let T = value(blockInfoByHeight((A + 1))) | |
123 | + | let U = toBigInt(sha256((((base58'2WWKxchwx7zBB' + toBytes(O)) + value(S.vrf)) + value(T.vrf)))) | |
124 | + | let V = if ((toBigInt(0) > U)) | |
125 | + | then -(U) | |
126 | + | else U | |
127 | + | [StringEntry(t(l, O), toString(V))] | |
128 | + | } | |
98 | 129 | } | |
99 | 130 | ||
100 | 131 | ||
101 | 132 | ||
102 | - | @Callable( | |
103 | - | func | |
133 | + | @Callable(B) | |
134 | + | func declarePrizeWinner (l,O,W) = if ((B.caller != this)) | |
104 | 135 | then throw("Admin only") | |
105 | - | else [StringEntry( | |
136 | + | else [StringEntry("", "")] | |
106 | 137 | ||
107 | 138 | ||
108 | - | ||
109 | - | @Callable(u) | |
110 | - | func declarePrize (l,I,J) = if ((u.caller != this)) | |
111 | - | then throw("Admin only") | |
112 | - | else [StringEntry(o(l, I), J)] | |
113 | - | ||
114 | - | ||
115 | - | ||
116 | - | @Callable(u) | |
117 | - | func finalaizePrizeChoice (l,I) = if ((u.caller != this)) | |
118 | - | then throw("Admin only") | |
119 | - | else { | |
120 | - | let t = getIntegerValue(n(l)) | |
121 | - | if ((t > height)) | |
122 | - | then throw("Lottery is not over yet") | |
123 | - | else { | |
124 | - | let z = getIntegerValue(k(l)) | |
125 | - | if ((z == 0)) | |
126 | - | then throw("No one entered the lottery") | |
127 | - | else { | |
128 | - | let K = f(o(l, I), "") | |
129 | - | if ((K == "")) | |
130 | - | then throw("prize does not exist") | |
131 | - | else { | |
132 | - | let L = value(blockInfoByHeight(t)) | |
133 | - | let M = sha256(((toBytes(I) + value(L.vrf)) + base58'2WWKxchwx7zBB')) | |
134 | - | let N = toInt((toBigInt(M) % toBigInt(z))) | |
135 | - | let O = if ((0 > N)) | |
136 | - | then -(N) | |
137 | - | else N | |
138 | - | [StringEntry("lastHash", toString(toBigInt(M))), IntegerEntry(q(l, I), O)] | |
139 | - | } | |
140 | - | } | |
141 | - | } | |
142 | - | } | |
143 | - | ||
144 | - | ||
145 | - | @Verifier(P) | |
146 | - | func Q () = sigVerify(P.bodyBytes, P.proofs[0], P.senderPublicKey) | |
139 | + | @Verifier(X) | |
140 | + | func Y () = sigVerify(X.bodyBytes, X.proofs[0], X.senderPublicKey) | |
147 | 141 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = fromBase58String("3Lz23mSUvT1EswcBn2sURYJG2at8rG5aFuUrTAwaPM6Q") | |
5 | 5 | ||
6 | 6 | let b = 1 | |
7 | 7 | ||
8 | 8 | func c (d,e) = valueOrElse(getInteger(d), e) | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | func f (d,e) = valueOrElse(getString(d), e) | |
12 | 12 | ||
13 | 13 | ||
14 | 14 | func g (h) = makeString(h, "_") | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func i (j) = g(["adr", j, "totalStaked"]) | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func k (l) = g(["lottery", l, "totalStaked"]) | |
21 | 21 | ||
22 | 22 | ||
23 | - | func m (l,j) = g(["lottery", l, "adr", j, " | |
23 | + | func m (l,j) = g(["lottery", l, "adr", j, "staked"]) | |
24 | 24 | ||
25 | 25 | ||
26 | - | func n (l) = g(["lottery", l, " | |
26 | + | func n (l,j) = g(["lottery", l, "adr", j, "locked"]) | |
27 | 27 | ||
28 | 28 | ||
29 | - | func o (l | |
29 | + | func o (l) = g(["lottery", l, "finalHeight"]) | |
30 | 30 | ||
31 | 31 | ||
32 | - | func | |
32 | + | func p (l,q) = g(["lottery", l, "prize", toString(q), "value"]) | |
33 | 33 | ||
34 | 34 | ||
35 | - | ||
35 | + | func r (l,q) = g(["lottery", l, "prize", toString(q), "threshold"]) | |
36 | 36 | ||
37 | - | func s () = { | |
38 | - | let l = f(r, "") | |
37 | + | ||
38 | + | func s (l,q) = g(["lottery", l, "prize", toString(q), "choice"]) | |
39 | + | ||
40 | + | ||
41 | + | func t (l,q) = g(["lottery", l, "prize", toString(q), "random"]) | |
42 | + | ||
43 | + | ||
44 | + | func u (l,v,w) = g(["lottery", l, "from", toString(v), "to", toString(w), "owner"]) | |
45 | + | ||
46 | + | ||
47 | + | let x = g(["param", "activeLotteryName"]) | |
48 | + | ||
49 | + | let y = g(["param", "globalTotalStaked"]) | |
50 | + | ||
51 | + | func z () = { | |
52 | + | let l = f(x, "") | |
39 | 53 | if ((l == "")) | |
40 | 54 | then "" | |
41 | 55 | else { | |
42 | - | let | |
43 | - | if (( | |
56 | + | let A = getIntegerValue(o(l)) | |
57 | + | if ((height >= A)) | |
44 | 58 | then "" | |
45 | 59 | else l | |
46 | 60 | } | |
47 | 61 | } | |
48 | 62 | ||
49 | 63 | ||
50 | - | @Callable( | |
64 | + | @Callable(B) | |
51 | 65 | func stake () = { | |
52 | - | let l = | |
66 | + | let l = z() | |
53 | 67 | if ((l == "")) | |
54 | 68 | then throw("Lottery not active") | |
55 | - | else if ((size( | |
69 | + | else if ((size(B.payments) == 0)) | |
56 | 70 | then throw("No payment added") | |
57 | - | else if ((size( | |
71 | + | else if ((size(B.payments) != 1)) | |
58 | 72 | then throw("Too many payments added") | |
59 | - | else if (( | |
73 | + | else if ((B.payments[0].assetId != a)) | |
60 | 74 | then throw("Wrong payment assetId") | |
61 | 75 | else { | |
62 | - | let | |
63 | - | let | |
64 | - | if (( | |
76 | + | let C = B.payments[0].amount | |
77 | + | let D = (C / b) | |
78 | + | if ((D == 0)) | |
65 | 79 | then throw("Not enough to buy at least one ticket") | |
66 | 80 | else { | |
67 | - | let x = toString(u.caller) | |
68 | - | let y = k(l) | |
69 | - | let z = getIntegerValue(y) | |
70 | - | let A = g(["lottery", l, "from", toString(z), "to", toString(((z + w) - 1)), "owner"]) | |
71 | - | let B = i(x) | |
72 | - | let C = c(B, 0) | |
73 | - | let D = m(l, x) | |
74 | - | let E = c(D, 0) | |
75 | - | let F = (v - (w * b)) | |
76 | - | [IntegerEntry(y, (z + w)), StringEntry(A, x), IntegerEntry(B, (C + w)), IntegerEntry(D, (E + w))] | |
81 | + | let E = toString(B.caller) | |
82 | + | let F = k(l) | |
83 | + | let G = c(F, 0) | |
84 | + | let H = u(l, G, ((G + D) - 1)) | |
85 | + | let I = i(E) | |
86 | + | let J = c(I, 0) | |
87 | + | let K = m(l, E) | |
88 | + | let L = c(K, 0) | |
89 | + | let M = (C - (D * b)) | |
90 | + | let N = c(y, 0) | |
91 | + | [ScriptTransfer(B.caller, M, a), StringEntry(H, E), IntegerEntry(y, (N + D)), IntegerEntry(F, (G + D)), IntegerEntry(I, (J + D)), IntegerEntry(K, (L + D))] | |
77 | 92 | } | |
78 | 93 | } | |
79 | 94 | } | |
80 | 95 | ||
81 | 96 | ||
82 | 97 | ||
83 | - | @Callable(u) | |
84 | - | func claim () = if ((size(u.payments) > 0)) | |
85 | - | then throw("No payments needed") | |
98 | + | @Callable(B) | |
99 | + | func startLottery (l,A) = if ((B.caller != this)) | |
100 | + | then throw("Admin only") | |
101 | + | else [StringEntry(x, l), IntegerEntry(o(l), A)] | |
102 | + | ||
103 | + | ||
104 | + | ||
105 | + | @Callable(B) | |
106 | + | func declarePrize (l,O,P,Q) = if ((B.caller != this)) | |
107 | + | then throw("Admin only") | |
108 | + | else [IntegerEntry(r(l, O), P), StringEntry(p(l, O), Q)] | |
109 | + | ||
110 | + | ||
111 | + | ||
112 | + | @Callable(B) | |
113 | + | func finalaizePrizeRandom (l,O) = if ((B.caller != this)) | |
114 | + | then throw("Admin only") | |
86 | 115 | else { | |
87 | - | let x = toString(u.caller) | |
88 | - | let l = s() | |
89 | - | let G = if ((l == "")) | |
90 | - | then 0 | |
91 | - | else c(m(l, x), 0) | |
92 | - | let B = i(x) | |
93 | - | let C = c(B, 0) | |
94 | - | let H = (C - G) | |
95 | - | if ((0 >= H)) | |
96 | - | then throw("No assets available for claim") | |
97 | - | else [ScriptTransfer(u.caller, H, a), IntegerEntry(B, (C - H))] | |
116 | + | let A = getIntegerValue(o(l)) | |
117 | + | if (((A + 1) > height)) | |
118 | + | then throw("Lottery is not over yet") | |
119 | + | else { | |
120 | + | let R = valueOrErrorMessage(getString(p(l, O)), "Prize does not exist") | |
121 | + | let S = value(blockInfoByHeight(A)) | |
122 | + | let T = value(blockInfoByHeight((A + 1))) | |
123 | + | let U = toBigInt(sha256((((base58'2WWKxchwx7zBB' + toBytes(O)) + value(S.vrf)) + value(T.vrf)))) | |
124 | + | let V = if ((toBigInt(0) > U)) | |
125 | + | then -(U) | |
126 | + | else U | |
127 | + | [StringEntry(t(l, O), toString(V))] | |
128 | + | } | |
98 | 129 | } | |
99 | 130 | ||
100 | 131 | ||
101 | 132 | ||
102 | - | @Callable( | |
103 | - | func | |
133 | + | @Callable(B) | |
134 | + | func declarePrizeWinner (l,O,W) = if ((B.caller != this)) | |
104 | 135 | then throw("Admin only") | |
105 | - | else [StringEntry( | |
136 | + | else [StringEntry("", "")] | |
106 | 137 | ||
107 | 138 | ||
108 | - | ||
109 | - | @Callable(u) | |
110 | - | func declarePrize (l,I,J) = if ((u.caller != this)) | |
111 | - | then throw("Admin only") | |
112 | - | else [StringEntry(o(l, I), J)] | |
113 | - | ||
114 | - | ||
115 | - | ||
116 | - | @Callable(u) | |
117 | - | func finalaizePrizeChoice (l,I) = if ((u.caller != this)) | |
118 | - | then throw("Admin only") | |
119 | - | else { | |
120 | - | let t = getIntegerValue(n(l)) | |
121 | - | if ((t > height)) | |
122 | - | then throw("Lottery is not over yet") | |
123 | - | else { | |
124 | - | let z = getIntegerValue(k(l)) | |
125 | - | if ((z == 0)) | |
126 | - | then throw("No one entered the lottery") | |
127 | - | else { | |
128 | - | let K = f(o(l, I), "") | |
129 | - | if ((K == "")) | |
130 | - | then throw("prize does not exist") | |
131 | - | else { | |
132 | - | let L = value(blockInfoByHeight(t)) | |
133 | - | let M = sha256(((toBytes(I) + value(L.vrf)) + base58'2WWKxchwx7zBB')) | |
134 | - | let N = toInt((toBigInt(M) % toBigInt(z))) | |
135 | - | let O = if ((0 > N)) | |
136 | - | then -(N) | |
137 | - | else N | |
138 | - | [StringEntry("lastHash", toString(toBigInt(M))), IntegerEntry(q(l, I), O)] | |
139 | - | } | |
140 | - | } | |
141 | - | } | |
142 | - | } | |
143 | - | ||
144 | - | ||
145 | - | @Verifier(P) | |
146 | - | func Q () = sigVerify(P.bodyBytes, P.proofs[0], P.senderPublicKey) | |
139 | + | @Verifier(X) | |
140 | + | func Y () = sigVerify(X.bodyBytes, X.proofs[0], X.senderPublicKey) | |
147 | 141 |
github/deemru/w8io/169f3d6 40.62 ms ◑![]()