tx · FfBePy2UWoi5qZupAfnemCZbZ9oVvwi9fxiV5TGYq3hE

3N4tMD7TM6PavYEM1H9TZwJ3iibvrQzRYCr:  -0.00600000 Waves

2024.06.04 14:17 [3135885] smart account 3N4tMD7TM6PavYEM1H9TZwJ3iibvrQzRYCr > SELF 0.00000000 Waves

{ "type": 13, "id": "FfBePy2UWoi5qZupAfnemCZbZ9oVvwi9fxiV5TGYq3hE", "fee": 600000, "feeAssetId": null, "timestamp": 1717499965032, "version": 2, "chainId": 84, "sender": "3N4tMD7TM6PavYEM1H9TZwJ3iibvrQzRYCr", "senderPublicKey": "EBsmtjAxi9CBJr17vFb6RHGpTdGB7rZBmihifoYu71gi", "proofs": [ "3Uk5ox5J7tLuYPcusiJMMZ9a71kerwfu2nRVCPxfnWdmHusxu6DBRcDQdwnqD2d6QJTw5WWCWWwgq4hLJVzZTDCp" ], "script": "base64:BgIWCAISBgoEAQEIAhIECgIBAhIECgIBAhcAA1NFUAICX18BBGpvaW4BBWFycmF5CQC5CQIFBWFycmF5BQNTRVABCHNlcGFyYXRlAQZzdHJpbmcJALUJAgUGc3RyaW5nBQNTRVAAC2Rlbm9taW5hdG9yAOgHAAt3aW5uZXJTaGFyZQC8BQAKYWRtaW5TaGFyZQDIAQAMY3JlYXRvclNoYXJlADIADXJlZmVycmVyU2hhcmUAMgEPbG90dGVyeUNvdW50S2V5AAkBBGpvaW4BCQDMCAICAiVzCQDMCAICDGxvdHRlcnlDb3VudAUDbmlsARhsb3R0ZXJ5RW5kQmxvY2tIZWlnaHRLZXkBCWxvdHRlcnlJZAkBBGpvaW4BCQDMCAICAiVzCQDMCAICFWxvdHRlcnlFbmRCbG9ja0hlaWdodAkAzAgCCQCkAwEFCWxvdHRlcnlJZAUDbmlsARJsb3R0ZXJ5QmV0UHJpY2VLZXkBCWxvdHRlcnlJZAkBBGpvaW4BCQDMCAICAiVzCQDMCAICD2xvdHRlcnlCZXRQcmljZQkAzAgCCQCkAwEFCWxvdHRlcnlJZAUDbmlsARJsb3R0ZXJ5QmV0QXNzZXRLZXkBCWxvdHRlcnlJZAkBBGpvaW4BCQDMCAICAiVzCQDMCAICD2xvdHRlcnlCZXRUb2tlbgkAzAgCCQCkAwEFCWxvdHRlcnlJZAUDbmlsARhsb3R0ZXJ5V2lubmVyVGlja2V0SWRLZXkBCWxvdHRlcnlJZAkBBGpvaW4BCQDMCAICAiVzCQDMCAICFWxvdHRlcnlXaW5uZXJUaWNrZXRJZAkAzAgCCQCkAwEFCWxvdHRlcnlJZAUDbmlsARZsb3R0ZXJ5Q291bnRUaWNrZXRzS2V5AQlsb3R0ZXJ5SWQJAQRqb2luAQkAzAgCAgIlcwkAzAgCAhNsb3R0ZXJ5Q291bnRUaWNrZXRzCQDMCAIJAKQDAQUJbG90dGVyeUlkBQNuaWwBEWxvdHRlcnlDcmVhdG9yS2V5AQlsb3R0ZXJ5SWQJAQRqb2luAQkAzAgCAgIlcwkAzAgCAg5sb3R0ZXJ5Q3JlYXRvcgkAzAgCCQCkAwEFCWxvdHRlcnlJZAUDbmlsARVsb3R0ZXJ5SXNGaW5hbGl6ZWRLZXkBCWxvdHRlcnlJZAkBBGpvaW4BCQDMCAICAiVzCQDMCAICEmxvdHRlcnlJc0ZpbmFsaXplZAkAzAgCCQCkAwEFCWxvdHRlcnlJZAUDbmlsARVsb3R0ZXJ5VGlja2V0T3duZXJLZXkCCWxvdHRlcnlJZAh0aWNrZXRJZAkBBGpvaW4BCQDMCAICAiVzCQDMCAICEmxvdHRlcnlUaWNrZXRPd25lcgkAzAgCCQCkAwEFCWxvdHRlcnlJZAkAzAgCCQCkAwEFCHRpY2tldElkBQNuaWwAEnBpZWNlT2ZTaGl0QXJyYXk5MAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAkAzAgCABUJAMwIAgAWCQDMCAIAFwkAzAgCABgJAMwIAgAZCQDMCAIAGgkAzAgCABsJAMwIAgAcCQDMCAIAHQkAzAgCAB4JAMwIAgAfCQDMCAIAIAkAzAgCACEJAMwIAgAiCQDMCAIAIwkAzAgCACQJAMwIAgAlCQDMCAIAJgkAzAgCACcJAMwIAgAoCQDMCAIAKQkAzAgCACoJAMwIAgArCQDMCAIALAkAzAgCAC0JAMwIAgAuCQDMCAIALwkAzAgCADAJAMwIAgAxCQDMCAIAMgkAzAgCADMJAMwIAgA0CQDMCAIANQkAzAgCADYJAMwIAgA3CQDMCAIAOAkAzAgCADkJAMwIAgA6CQDMCAIAOwkAzAgCADwJAMwIAgA9CQDMCAIAPgkAzAgCAD8JAMwIAgBACQDMCAIAQQkAzAgCAEIJAMwIAgBDCQDMCAIARAkAzAgCAEUJAMwIAgBGCQDMCAIARwkAzAgCAEgJAMwIAgBJCQDMCAIASgkAzAgCAEsJAMwIAgBMCQDMCAIATQkAzAgCAE4JAMwIAgBPCQDMCAIAUAkAzAgCAFEJAMwIAgBSCQDMCAIAUwkAzAgCAFQJAMwIAgBVCQDMCAIAVgkAzAgCAFcJAMwIAgBYCQDMCAIAWQUDbmlsARFhc3NldElkRnJvbVN0cmluZwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkAQ9hc3NldElkVG9TdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwELcGF5T25lQXNzZXQCAWkLYXNzZXRTdHJpbmcDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAg5vbmx5IDEgcGF5bWVudAMJAAACCQEPYXNzZXRJZFRvU3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQthc3NldFN0cmluZwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAAIBAgt3cm9uZyBhc3NldAEKcmFuZG9taXplcgELYmxvY2tIZWlnaHQEBWJsb2NrCQDtBwEFC2Jsb2NrSGVpZ2h0AwkBASEBCQEJaXNEZWZpbmVkAQUFYmxvY2sJAAIBAg9ibG9jayBub3QgbWluZWQEBHJhbmQJAQV2YWx1ZQEIBQlsYXN0QmxvY2sDdnJmCQD3AwEFBHJhbmQBCWdldFdpbm5lcgEJbG90dGVyeUlkBAtibG9ja0hlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBGGxvdHRlcnlFbmRCbG9ja0hlaWdodEtleQEFCWxvdHRlcnlJZAQMY291bnRUaWNrZXRzCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEWbG90dGVyeUNvdW50VGlja2V0c0tleQEFCWxvdHRlcnlJZAQEcmFuZAkBCnJhbmRvbWl6ZXIBBQtibG9ja0hlaWdodAQJd2luTnVtYmVyCQBqAgkAsQkBBQRyYW5kBQxjb3VudFRpY2tldHMJARFAZXh0ck5hdGl2ZSgxMDU3KQEJARVsb3R0ZXJ5VGlja2V0T3duZXJLZXkCBQlsb3R0ZXJ5SWQFCXdpbk51bWJlcgMBaQEGY3JlYXRlBA5lbmRCbG9ja0hlaWdodAhiZXRQcmljZQhiZXRUb2tlbghyZWZmZXJlcgMJAGcCCAUJbGFzdEJsb2NrBmhlaWdodAUOZW5kQmxvY2tIZWlnaHQJAAIBAhhpbmNvcnJlY3QgZW5kQmxvY2tIZWlnaHQEBWNvdW50BAckbWF0Y2gwCQCfCAEJAQ9sb3R0ZXJ5Q291bnRLZXkAAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPbG90dGVyeUNvdW50S2V5AAkAZAIFBWNvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARhsb3R0ZXJ5RW5kQmxvY2tIZWlnaHRLZXkBBQVjb3VudAUOZW5kQmxvY2tIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJsb3R0ZXJ5QmV0UHJpY2VLZXkBBQVjb3VudAUIYmV0UHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmxvdHRlcnlCZXRBc3NldEtleQEFBWNvdW50BQhiZXRUb2tlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmxvdHRlcnlDb3VudFRpY2tldHNLZXkBBQVjb3VudAAACQDMCAIJAQtCaW5hcnlFbnRyeQIJARFsb3R0ZXJ5Q3JlYXRvcktleQEFBWNvdW50BQhyZWZmZXJlcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBFWxvdHRlcnlJc0ZpbmFsaXplZEtleQEFBWNvdW50BwUDbmlsAWkBA2J1eQIJbG90dGVyeUlkCHJlZmVycmVyBA5iZXRBc3NldFN0cmluZwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEmxvdHRlcnlCZXRBc3NldEtleQEFCWxvdHRlcnlJZAQIYmV0UHJpY2UJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARJsb3R0ZXJ5QmV0UHJpY2VLZXkBBQlsb3R0ZXJ5SWQEEXRvdGFsQ291bnRUaWNrZXRzCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEWbG90dGVyeUNvdW50VGlja2V0c0tleQEFCWxvdHRlcnlJZAQOZW5kQmxvY2tIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARhsb3R0ZXJ5RW5kQmxvY2tIZWlnaHRLZXkBBQlsb3R0ZXJ5SWQDCQBnAggFCWxhc3RCbG9jawZoZWlnaHQFDmVuZEJsb2NrSGVpZ2h0CQACAQIXbG90dGVyeSBhbHJlZHkgZmluaXNoZWQEBmFtb3VudAkBC3BheU9uZUFzc2V0AgUBaQUOYmV0QXNzZXRTdHJpbmcEEHB1cmNoYXNlZFRpY2tldHMJAGkCBQZh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C2Rlbm9taW5hdG9yCQERYXNzZXRJZEZyb21TdHJpbmcBBQ5iZXRBc3NldFN0cmluZwUDbmlsAWkBBWNsYWltAglsb3R0ZXJ5SWQEdXNlcgQGd2lubmVyCQEJZ2V0V2lubmVyAQUJbG90dGVyeUlkAwkBAiE9AgUGd2lubmVyBQR1c2VyCQACAQIHbm90IHdpbgQLaXNGaW5hbGl6ZWQJARFAZXh0ck5hdGl2ZSgxMDU2KQEJARVsb3R0ZXJ5SXNGaW5hbGl6ZWRLZXkBBQlsb3R0ZXJ5SWQDBQtpc0ZpbmFsaXplZAkAAgECD2FscmVhZHkgY2xhbWllZAQIYmV0UHJpY2UJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARJsb3R0ZXJ5QmV0UHJpY2VLZXkBBQlsb3R0ZXJ5SWQEEXRvdGFsQ291bnRUaWNrZXRzCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEWbG90dGVyeUNvdW50VGlja2V0c0tleQEFCWxvdHRlcnlJZAQIYmV0VG9rZW4JARFAZXh0ck5hdGl2ZSgxMDU3KQEJARJsb3R0ZXJ5QmV0QXNzZXRLZXkBBQlsb3R0ZXJ5SWQEA2NhcAkAaAIFCGJldFByaWNlBRF0b3RhbENvdW50VGlja2V0cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFBHVzZXIJAGsDBQNjYXAFC3dpbm5lclNoYXJlBQtkZW5vbWluYXRvcgUIYmV0VG9rZW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIJARVsb3R0ZXJ5SXNGaW5hbGl6ZWRLZXkBBQlsb3R0ZXJ5SWQGBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5VuL4gA==", "height": 3135885, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+func join (array) = makeString(array, SEP)
7+
8+
9+func separate (string) = split(string, SEP)
10+
11+
12+let denominator = 1000
13+
14+let winnerShare = 700
15+
16+let adminShare = 200
17+
18+let creatorShare = 50
19+
20+let referrerShare = 50
21+
22+func lotteryCountKey () = join(["%s", "lotteryCount"])
23+
24+
25+func lotteryEndBlockHeightKey (lotteryId) = join(["%s", "lotteryEndBlockHeight", toString(lotteryId)])
26+
27+
28+func lotteryBetPriceKey (lotteryId) = join(["%s", "lotteryBetPrice", toString(lotteryId)])
29+
30+
31+func lotteryBetAssetKey (lotteryId) = join(["%s", "lotteryBetToken", toString(lotteryId)])
32+
33+
34+func lotteryWinnerTicketIdKey (lotteryId) = join(["%s", "lotteryWinnerTicketId", toString(lotteryId)])
35+
36+
37+func lotteryCountTicketsKey (lotteryId) = join(["%s", "lotteryCountTickets", toString(lotteryId)])
38+
39+
40+func lotteryCreatorKey (lotteryId) = join(["%s", "lotteryCreator", toString(lotteryId)])
41+
42+
43+func lotteryIsFinalizedKey (lotteryId) = join(["%s", "lotteryIsFinalized", toString(lotteryId)])
44+
45+
46+func lotteryTicketOwnerKey (lotteryId,ticketId) = join(["%s", "lotteryTicketOwner", toString(lotteryId), toString(ticketId)])
47+
48+
49+let pieceOfShitArray90 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89]
50+
51+func assetIdFromString (assetId) = if ((assetId == "WAVES"))
52+ then unit
53+ else fromBase58String(assetId)
54+
55+
56+func assetIdToString (assetId) = match assetId {
57+ case b: ByteVector =>
58+ toBase58String(b)
59+ case _ =>
60+ "WAVES"
61+}
62+
63+
64+func payOneAsset (i,assetString) = if ((size(i.payments) != 1))
65+ then throw("only 1 payment")
66+ else if ((assetIdToString(i.payments[0].assetId) == assetString))
67+ then i.payments[0].amount
68+ else throw("wrong asset")
69+
70+
71+func randomizer (blockHeight) = {
72+ let block = blockInfoByHeight(blockHeight)
73+ if (!(isDefined(block)))
74+ then throw("block not mined")
75+ else {
76+ let rand = value(lastBlock.vrf)
77+ sha256(rand)
78+ }
79+ }
80+
81+
82+func getWinner (lotteryId) = {
83+ let blockHeight = getIntegerValue(lotteryEndBlockHeightKey(lotteryId))
84+ let countTickets = getIntegerValue(lotteryCountTicketsKey(lotteryId))
85+ let rand = randomizer(blockHeight)
86+ let winNumber = (toInt(rand) % countTickets)
87+ getBinaryValue(lotteryTicketOwnerKey(lotteryId, winNumber))
88+ }
89+
90+
91+@Callable(i)
92+func create (endBlockHeight,betPrice,betToken,refferer) = if ((lastBlock.height >= endBlockHeight))
93+ then throw("incorrect endBlockHeight")
94+ else {
95+ let count = match getInteger(lotteryCountKey()) {
96+ case a: Int =>
97+ a
98+ case _ =>
99+ 0
100+ }
101+[IntegerEntry(lotteryCountKey(), (count + 1)), IntegerEntry(lotteryEndBlockHeightKey(count), endBlockHeight), IntegerEntry(lotteryBetPriceKey(count), betPrice), StringEntry(lotteryBetAssetKey(count), betToken), IntegerEntry(lotteryCountTicketsKey(count), 0), BinaryEntry(lotteryCreatorKey(count), refferer), BooleanEntry(lotteryIsFinalizedKey(count), false)]
102+ }
103+
104+
105+
106+@Callable(i)
107+func buy (lotteryId,referrer) = {
108+ let betAssetString = getStringValue(lotteryBetAssetKey(lotteryId))
109+ let betPrice = getIntegerValue(lotteryBetPriceKey(lotteryId))
110+ let totalCountTickets = getIntegerValue(lotteryCountTicketsKey(lotteryId))
111+ let endBlockHeight = getIntegerValue(lotteryEndBlockHeightKey(lotteryId))
112+ if ((lastBlock.height >= endBlockHeight))
113+ then throw("lottery alredy finished")
114+ else {
115+ let amount = payOneAsset(i, betAssetString)
116+ let purchasedTickets = (amount / betPrice)
117+ let return = (amount % betPrice)
118+ if ((return != 0))
119+ then throw("attach asset amount multiple of the bet")
120+ else {
121+ func f (accum,next) = if ((purchasedTickets > next))
122+ then (accum :+ BinaryEntry(lotteryTicketOwnerKey(lotteryId, (totalCountTickets + next)), i.callerPublicKey))
123+ else accum
124+
125+ let creator = getBinaryValue(lotteryCreatorKey(lotteryId))
126+ ({
127+ let $l = pieceOfShitArray90
128+ let $s = size($l)
129+ let $acc0 = nil
130+ func $f0_1 ($a,$i) = if (($i >= $s))
131+ then $a
132+ else f($a, $l[$i])
133+
134+ func $f0_2 ($a,$i) = if (($i >= $s))
135+ then $a
136+ else throw("List size exceeds 90")
137+
138+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
139+ } ++ [IntegerEntry(lotteryCountTicketsKey(lotteryId), (totalCountTickets + purchasedTickets)), ScriptTransfer(Address(creator), fraction(amount, creatorShare, denominator), assetIdFromString(betAssetString)), ScriptTransfer(Address(referrer), fraction(amount, referrerShare, denominator), assetIdFromString(betAssetString))])
140+ }
141+ }
142+ }
143+
144+
145+
146+@Callable(i)
147+func claim (lotteryId,user) = {
148+ let winner = getWinner(lotteryId)
149+ if ((winner != user))
150+ then throw("not win")
151+ else {
152+ let isFinalized = getBooleanValue(lotteryIsFinalizedKey(lotteryId))
153+ if (isFinalized)
154+ then throw("already clamied")
155+ else {
156+ let betPrice = getIntegerValue(lotteryBetPriceKey(lotteryId))
157+ let totalCountTickets = getIntegerValue(lotteryCountTicketsKey(lotteryId))
158+ let betToken = getBinaryValue(lotteryBetAssetKey(lotteryId))
159+ let cap = (betPrice * totalCountTickets)
160+[ScriptTransfer(Address(user), fraction(cap, winnerShare, denominator), betToken), BooleanEntry(lotteryIsFinalizedKey(lotteryId), true)]
161+ }
162+ }
163+ }
164+
165+
166+@Verifier(tx)
167+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
168+

github/deemru/w8io/026f985 
18.27 ms