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:
Old | New | Differences | |
---|---|---|---|
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 ◑