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:
OldNewDifferences
2020 func k (l) = g(["lottery", l, "totalStaked"])
2121
2222
23-func m (l,j) = g(["lottery", l, "adr", j, "totalStaked"])
23+func m (l,j) = g(["lottery", l, "adr", j, "staked"])
2424
2525
26-func n (l) = g(["lottery", l, "finalHeight"])
26+func n (l,j) = g(["lottery", l, "adr", j, "locked"])
2727
2828
29-func o (l,p) = g(["lottery", l, "prize", p, "value"])
29+func o (l) = g(["lottery", l, "finalHeight"])
3030
3131
32-func q (l,p) = g(["lottery", l, "prize", p, "choice"])
32+func p (l,q) = g(["lottery", l, "prize", toString(q), "value"])
3333
3434
35-let r = g(["param", "activeLotteryName"])
35+func r (l,q) = g(["lottery", l, "prize", toString(q), "threshold"])
3636
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, "")
3953 if ((l == ""))
4054 then ""
4155 else {
42- let t = getIntegerValue(n(l))
43- if (((height - 1) >= t))
56+ let A = getIntegerValue(o(l))
57+ if ((height >= A))
4458 then ""
4559 else l
4660 }
4761 }
4862
4963
50-@Callable(u)
64+@Callable(B)
5165 func stake () = {
52- let l = s()
66+ let l = z()
5367 if ((l == ""))
5468 then throw("Lottery not active")
55- else if ((size(u.payments) == 0))
69+ else if ((size(B.payments) == 0))
5670 then throw("No payment added")
57- else if ((size(u.payments) != 1))
71+ else if ((size(B.payments) != 1))
5872 then throw("Too many payments added")
59- else if ((u.payments[0].assetId != a))
73+ else if ((B.payments[0].assetId != a))
6074 then throw("Wrong payment assetId")
6175 else {
62- let v = u.payments[0].amount
63- let w = 2305843009213688951
64- if ((w == 0))
76+ let C = B.payments[0].amount
77+ let D = (C / b)
78+ if ((D == 0))
6579 then throw("Not enough to buy at least one ticket")
6680 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))]
7792 }
7893 }
7994 }
8095
8196
8297
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")
86115 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+ }
98129 }
99130
100131
101132
102-@Callable(u)
103-func startLottery (l,t) = if ((u.caller != this))
133+@Callable(B)
134+func declarePrizeWinner (l,O,W) = if ((B.caller != this))
104135 then throw("Admin only")
105- else [StringEntry(r, l), IntegerEntry(n(l), t), IntegerEntry(k(l), 0)]
136+ else [StringEntry("", "")]
106137
107138
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)
147141
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = fromBase58String("3Lz23mSUvT1EswcBn2sURYJG2at8rG5aFuUrTAwaPM6Q")
55
66 let b = 1
77
88 func c (d,e) = valueOrElse(getInteger(d), e)
99
1010
1111 func f (d,e) = valueOrElse(getString(d), e)
1212
1313
1414 func g (h) = makeString(h, "_")
1515
1616
1717 func i (j) = g(["adr", j, "totalStaked"])
1818
1919
2020 func k (l) = g(["lottery", l, "totalStaked"])
2121
2222
23-func m (l,j) = g(["lottery", l, "adr", j, "totalStaked"])
23+func m (l,j) = g(["lottery", l, "adr", j, "staked"])
2424
2525
26-func n (l) = g(["lottery", l, "finalHeight"])
26+func n (l,j) = g(["lottery", l, "adr", j, "locked"])
2727
2828
29-func o (l,p) = g(["lottery", l, "prize", p, "value"])
29+func o (l) = g(["lottery", l, "finalHeight"])
3030
3131
32-func q (l,p) = g(["lottery", l, "prize", p, "choice"])
32+func p (l,q) = g(["lottery", l, "prize", toString(q), "value"])
3333
3434
35-let r = g(["param", "activeLotteryName"])
35+func r (l,q) = g(["lottery", l, "prize", toString(q), "threshold"])
3636
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, "")
3953 if ((l == ""))
4054 then ""
4155 else {
42- let t = getIntegerValue(n(l))
43- if (((height - 1) >= t))
56+ let A = getIntegerValue(o(l))
57+ if ((height >= A))
4458 then ""
4559 else l
4660 }
4761 }
4862
4963
50-@Callable(u)
64+@Callable(B)
5165 func stake () = {
52- let l = s()
66+ let l = z()
5367 if ((l == ""))
5468 then throw("Lottery not active")
55- else if ((size(u.payments) == 0))
69+ else if ((size(B.payments) == 0))
5670 then throw("No payment added")
57- else if ((size(u.payments) != 1))
71+ else if ((size(B.payments) != 1))
5872 then throw("Too many payments added")
59- else if ((u.payments[0].assetId != a))
73+ else if ((B.payments[0].assetId != a))
6074 then throw("Wrong payment assetId")
6175 else {
62- let v = u.payments[0].amount
63- let w = 2305843009213688951
64- if ((w == 0))
76+ let C = B.payments[0].amount
77+ let D = (C / b)
78+ if ((D == 0))
6579 then throw("Not enough to buy at least one ticket")
6680 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))]
7792 }
7893 }
7994 }
8095
8196
8297
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")
86115 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+ }
98129 }
99130
100131
101132
102-@Callable(u)
103-func startLottery (l,t) = if ((u.caller != this))
133+@Callable(B)
134+func declarePrizeWinner (l,O,W) = if ((B.caller != this))
104135 then throw("Admin only")
105- else [StringEntry(r, l), IntegerEntry(n(l), t), IntegerEntry(k(l), 0)]
136+ else [StringEntry("", "")]
106137
107138
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)
147141

github/deemru/w8io/169f3d6 
40.62 ms