tx · 4p6RsG3oNFRWYcb3eV27oSmUWWeLoUz76KackkfUt4zr 3N319uQjr5c4jQfhsxenv82Ego6imqFRSdw: -0.01000000 Waves 2019.08.16 18:21 [633806] smart account 3N319uQjr5c4jQfhsxenv82Ego6imqFRSdw > SELF 0.00000000 Waves
{ "type": 13, "id": "4p6RsG3oNFRWYcb3eV27oSmUWWeLoUz76KackkfUt4zr", "fee": 1000000, "feeAssetId": null, "timestamp": 1565968434904, "version": 1, "sender": "3N319uQjr5c4jQfhsxenv82Ego6imqFRSdw", "senderPublicKey": "7C3wsm76fd9VX8zMDZXuPdmZXxtMn2vah4cBjBZxsgdC", "proofs": [ "CoP1ePCK6PaNbiJeahGB1BRbEz8rcFqQW2uUSykpEToaVhcn6Vm9EwbDpF2uo9WcaSTuXRZq2cdgjevLM4epo3M" ], "script": "base64:AAIDAAAAAAAAAAAAAAA+AAAAAAljb3B5cmlnaHQCAAAAHkNvcHlyaWdodCAoYykgMjAxOSBNYURhTWEgTGFicwAAAAAHY3JlYXRvcgIAAAAjQGRhaWRhbG9zIC0gdHdpdHRlci5jb20vdHdfZGFpZGFsb3MAAAAABHRlYW0CAAAAKk1hRGFNYSBMYWJzIGh0dHBzOi8vZ2l0bGFiLmNvbS9tYWRhbWFsYWJzLwAAAAAHbGljZW5zZQIAAAALTUlUIExpY2Vuc2UAAAAAC2xpY2Vuc2VMaW5rAgAAAD90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UgLCBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQAAAAAD3NlcnZlclB1YmxpY0tleQEAAAAg5HDECkj1gj3Biqn3r3iq6QgFB//805bcYc9SxLcrLT8AAAAAD3dhbGxldFB1YmxpY0tleQEAAAAgjn2bVZshOLJ2tKyHmnsNODTqNa4L3sjANfQnGFjxTC0AAAAAA2ZlZQAAAAAAAAehIAAAAAAIT05FV0FWRVMAAAAAAAX14QAAAAAADnBlcmlvZEdhbWVQbGF5AAAAAAAAAAACAAAAAAV3aGVlbAkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAAjI0CQAETAAAAAICAAAAAjE2CQAETAAAAAICAAAAAjMzCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAACMjAJAARMAAAAAgIAAAACMTQJAARMAAAAAgIAAAACMzEJAARMAAAAAgIAAAABOQkABEwAAAACAgAAAAIyMgkABEwAAAACAgAAAAIxOAkABEwAAAACAgAAAAIyOQkABEwAAAACAgAAAAE3CQAETAAAAAICAAAAAjI4CQAETAAAAAICAAAAAjEyCQAETAAAAAICAAAAAjM1CQAETAAAAAICAAAAATMJAARMAAAAAgIAAAACMjYJAARMAAAAAgIAAAABMAkABEwAAAACAgAAAAIzMgkABEwAAAACAgAAAAIxNQkABEwAAAACAgAAAAIxOQkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAAjIxCQAETAAAAAICAAAAATIJAARMAAAAAgIAAAACMjUJAARMAAAAAgIAAAACMTcJAARMAAAAAgIAAAACMzQJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAIyNwkABEwAAAACAgAAAAIxMwkABEwAAAACAgAAAAIzNgkABEwAAAACAgAAAAIxMQkABEwAAAACAgAAAAIzMAkABEwAAAACAgAAAAE4CQAETAAAAAICAAAAAjIzCQAETAAAAAICAAAAAjEwBQAAAANuaWwAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAZNiYXNlNjQ6TUlJQkpUQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FSSUFNSUlCRFFLQ0FRRUF0T2JmaXdXeUJGcFNOSlpta3hsd0h5NXZUK0piK1Z2NmY3TGxoS0U5d05jQzBRcDByZHlNd3hMcGR3ZnVMc0tiUmRCRWJEaHBiM2R6MUpQSmlhdGxoS1ZLVXNvUTI1VVF1OWh2Mm9YeXlFekp4ODZDR1FxNUhPcjNZR0dTZEpSMExLcTFQaGJZck5tdVM2alBEWW9ieHNzWHljL3R4c2lwU0d3ek1nVkhjcXQ5T1NpR1F5U1o4LzltdHY0MkVlZnpGRTk1d3V1eTQyS0pLRzdoMERUTWZGU0xUcHFoUy9NYnA4RUtQdVZiMWh1V3NNS1ZMOVF0T1BZRVhhOVFQWmEyV0JQWDVZOUJJMU1jUlEvV2Y4V3dxUXRBUnBCZlNWcGtLUFMxQW1odDJmRU94U1NZUnFHNklVc2ZLOHhPOWh4dCszKy9PcC8rSUZKVEdjR0Y4QnJ6V1FJR0NQdzkvdTI3AAAAABFnYW1lc0xhYmVsQ291bnRlcgIAAAAOWF9HQU1FU0NPVU5URVIAAAAAFWdhbWVzTGFiZWxCZXRzQ291bnRlcgIAAAANWF9CRVRTQ09VTlRFUgAAAAAWZ2FtZXNMYWJlbEJldHNGZWVNb3ZlZAIAAAAOWF9CRVRTRkVFTU9WRUQAAAAAGGdhbWVzTGFiZWxUb3RhbEFtb3VudFdpbgIAAAAQWF9UT1RBTEFNT1VOVFdJTgAAAAAYZ2FtZXNMYWJlbFRvdGFsQW1vdW50QmV0AgAAABBYX1RPVEFMQU1PVU5UQkVUAAAAABlnYW1lc0xhYmVsVG90YWxBZGRyZXNzQmV0AgAAABFYX1RPVEFMQUREUkVTU0JFVAEAAAAPZ2FtZXNHZXRDb3VudGVyAAAAAAkABBoAAAACBQAAAAR0aGlzBQAAABFnYW1lc0xhYmVsQ291bnRlcgEAAAATZ2FtZXNHZXRCZXRzQ291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAVZ2FtZXNMYWJlbEJldHNDb3VudGVyAQAAABRnYW1lc0dldEJldHNGZWVNb3ZlZAAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAWZ2FtZXNMYWJlbEJldHNGZWVNb3ZlZAEAAAAWZ2FtZXNHZXRUb3RhbEFtb3VudFdpbgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAYZ2FtZXNMYWJlbFRvdGFsQW1vdW50V2luAQAAABZnYW1lc0dldFRvdGFsQW1vdW50QmV0AAAAAAkABBoAAAACBQAAAAR0aGlzBQAAABhnYW1lc0xhYmVsVG90YWxBbW91bnRCZXQBAAAAF2dhbWVzR2V0VG90YWxBZGRyZXNzQmV0AAAAAAkABBoAAAACBQAAAAR0aGlzBQAAABlnYW1lc0xhYmVsVG90YWxBZGRyZXNzQmV0AQAAABBudW1iZXJMYWJlbENvdW50AAAAAQAAAAZudW1iZXIJAAEsAAAAAgIAAAACTl8FAAAABm51bWJlcgEAAAAObnVtYmVyR2V0Q291bnQAAAABAAAABm51bWJlcgkABBoAAAACBQAAAAR0aGlzCQEAAAAQbnVtYmVyTGFiZWxDb3VudAAAAAEFAAAABm51bWJlcgEAAAAPZ2FtZUxhYmVsU3RhdHVzAAAAAQAAAAxHQU1FU0NPVU5URVIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAAxHQU1FU0NPVU5URVICAAAAB19TVEFUVVMBAAAAD2dhbWVMYWJlbE51bWJlcgAAAAEAAAAMR0FNRVNDT1VOVEVSCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAMR0FNRVNDT1VOVEVSAgAAAAdfTlVNQkVSAQAAAAxnYW1lTGFiZWxNYXgAAAABAAAADEdBTUVTQ09VTlRFUgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAADEdBTUVTQ09VTlRFUgIAAAAEX01BWAEAAAANZ2FtZUxhYmVsQmV0cwAAAAEAAAAMR0FNRVNDT1VOVEVSCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAMR0FN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QVgFAAAABndpbm1heAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmFkZHJlc3NMYWJlbEFtb3VudAAAAAEFAAAAB2FkZHJlc3MJAABkAAAAAgUAAAANQUREUkVTU0FNT1VOVAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAQYWRkcmVzc0xhYmVsQmV0cwAAAAEFAAAAB2FkZHJlc3MJAABkAAAAAgUAAAALQUREUkVTU0JFVFMAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAFWdhbWVzTGFiZWxCZXRzQ291bnRlcgkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQEAAAATZ2FtZXNHZXRCZXRzQ291bnRlcgAAAAAAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAGGdhbWVzTGFiZWxUb3RhbEFtb3VudEJldAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQEAAAAWZ2FtZXNHZXRUb3RhbEFtb3VudEJldAAAAAAFAAAABmFtb3VudAUAAAADbmlsBAAAAA9UT1RBTEFERFJFU1NCRVQJAABkAAAAAgkBAAAABXZhbHVlAAAAAQkBAAAAF2dhbWVzR2V0VG90YWxBZGRyZXNzQmV0AAAAAAAAAAAAAAAAAQQAAAAJZGF0YUZpbmFsAwkAAAAAAAACBQAAAA1BRERSRVNTQU1PVU5UAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAATcG9pbnRlckFkZHJlc3NMYWJlbAAAAAEJAAGkAAAAAQUAAAAPVE9UQUxBRERSRVNTQkVUBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABlnYW1lc0xhYmVsVG90YWxBZGRyZXNzQmV0BQAAAA9UT1RBTEFERFJFU1NCRVQFAAAABGRhdGEFAAAABGRhdGEJAQAAAAhXcml0ZVNldAAAAAEFAAAACWRhdGFGaW5hbAkAAAIAAAABAgAAAA5HQU1FX05PVF9GT1VORAkAAAIAAAABAgAAAA5HQU1FX05PVF9GT1VORAkAAAIAAAABAgAAAA5HQU1FX05PVF9GT1VORAkA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AApDVVJSU1RBVFVTCQEAAAAFdmFsdWUAAAABCQEAAAANZ2FtZUdldFN0YXR1cwAAAAEFAAAADEdBTUVTQ09VTlRFUgMJAQAAAAIhPQAAAAIFAAAACkNVUlJTVEFUVVMCAAAABFNIT1cJAAACAAAAAQIAAAAXQ1VSUl9TVEFUVVNfSVNfTk9UX1NIT1cEAAAABEJFVFMJAQAAAAV2YWx1ZQAAAAEJAQAAAAtnYW1lR2V0QmV0cwAAAAEFAAAADEdBTUVTQ09VTlRFUgQAAAAGUEFTU0VECQEAAAAFdmFsdWUAAAABCQEAAAANZ2FtZUdldFBhc3NlZAAAAAEFAAAADEdBTUVTQ09VTlRFUgMJAQAAAAIhPQAAAAIFAAAABEJFVFMFAAAABlBBU1NFRAkAAAIAAAABAgAAAA9XQUlUX0FMTF9QQVNTRUQJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAPd2FsbGV0UHVibGljS2V5BQAAAAZhbW91bnQFAAAABHVuaXQFAAAAA25pbAkAAAIAAAABAgAAAAtJTklUX05FRURFRAAAAAFpAQAAAA9iZXRzRmVlVG9TZXJ2ZXIAAAAAAwkBAAAAD2NoZWNrUGVybWlzc2lvbgAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABliZXRzRmVlVG9TZXJ2ZXJfRk9SQkJJREVOBAAAAAckbWF0Y2gwCQEAAAAPZ2FtZXNHZXRDb3VudGVyAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAxHQU1FU0NPVU5URVIFAAAAByRtYXRjaDADCQAAAAAAAAIFAAAADEdBTUVTQ09VTlRFUgAAAAAAAAAAAAkAAAIAAAABAgAAAAtOT19CRVRTX0ZFRQQAAAAKQ1VSUlNUQVRVUwkBAAAABXZhbHVlAAAAAQkBAAAADWdhbWVHZXRTdGF0dXMAAAABBQAAAAxHQU1FU0NPVU5URVIDCQEAAAACIT0AAAACBQAAAApDVVJSU1RBVFVTAgAAAARTSE9XCQAAAgAAAAECAAAAF0NVUlJfU1RBVFVTX0lTX05PVF9TSE9XBAAAAARCRVRTCQEAAAAFdmFsdWUAAAABCQEAAAALZ2FtZUdldEJldHMAAAABBQAAAAxHQU1FU0NPVU5URVIEAAAABlBBU1NFRAkBAAAABXZhbHVlAAAAAQkBAAAADWdhbWVHZXRQYXNzZWQAAAABBQAAAAxHQU1FU0NPVU5URVIDCQEAAAACIT0AAAACBQAAAARCRVRTBQAAAAZQQVNTRUQJAAACAAAAAQIAAAAPV0FJVF9BTExfUEFTU0VEBAAAAAtCRVRTQ09VTlRFUgkBAAAABXZhbHVlAAAAAQkBAAAAE2dhbWVzR2V0QmV0c0NvdW50ZXIAAAAABAAAAAlCRVRTTU9WRUQJAQAAAAV2YWx1ZQAAAAEJAQAAABRnYW1lc0dldEJldHNGZWVNb3ZlZAAAAAAJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABZnYW1lc0xhYmVsQmV0c0ZlZU1vdmVkBQAAAAtCRVRTQ09VTlRFUgUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAD3NlcnZlclB1YmxpY0tleQkAAGgAAAACCQAAZQAAAAIFAAAAC0JFVFNDT1VOVEVSBQAAAAlCRVRTTU9WRUQFAAAAA2ZlZQUAAAAEdW5pdAUAAAADbmlsCQAAAgAAAAECAAAAC0lOSVRfTkVFREVEAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAlRUBQAAAAckbWF0Y2gwAwkAAAAAAAACCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAACVFQAAAAPc2VuZGVyUHVibGljS2V5CAUAAAACVFQAAAAGc2VuZGVyCQAB9AAAAAMIBQAAAAJUVAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAlRUAAAABnByb29mcwAAAAAAAAAAAAgFAAAAAlRUAAAAD3NlbmRlclB1YmxpY0tleQcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAAJTUwUAAAAHJG1hdGNoMAMJAAAAAAAAAgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAlNTAAAAD3NlbmRlclB1YmxpY0tleQgFAAAAAlNTAAAABnNlbmRlcgkAAfQAAAADCAUAAAACU1MAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJTUwAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJTUwAAAA9zZW5kZXJQdWJsaWNLZXkHB9tM0zM=", "chainId": 84, "height": 633806, "spentComplexity": 0 } View: original | compacted Prev: none Next: 47XzH2P9ZxgxGvrCSiLZhi6paTaPUPUt4UxMg6xLMyns Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let copyright = "Copyright (c) 2019 MaDaMa Labs" | |
5 | + | ||
6 | + | let creator = "@daidalos - twitter.com/tw_daidalos" | |
7 | + | ||
8 | + | let team = "MaDaMa Labs https://gitlab.com/madamalabs/" | |
9 | + | ||
10 | + | let license = "MIT License" | |
11 | + | ||
12 | + | let licenseLink = "tldrlegal.com/license/mit-license , opensource.org/licenses/MIT" | |
13 | + | ||
14 | + | let serverPublicKey = base58'GNjgmkxdKSYyyBja9QKCtzp9dEHzeLr7J3fmghogEXFc' | |
15 | + | ||
16 | + | let walletPublicKey = base58'AbDyruBD8QqodWvMWRxAx8FhwRuf4cMFZu6SA1G4YwWU' | |
17 | + | ||
18 | + | let fee = 500000 | |
19 | + | ||
20 | + | let ONEWAVES = 100000000 | |
21 | + | ||
22 | + | let periodGamePlay = 2 | |
23 | + | ||
24 | + | let wheel = ["5", "24", "16", "33", "1", "20", "14", "31", "9", "22", "18", "29", "7", "28", "12", "35", "3", "26", "0", "32", "15", "19", "4", "21", "2", "25", "17", "34", "6", "27", "13", "36", "11", "30", "8", "23", "10"] | |
25 | + | ||
26 | + | let RSAPUBLIC = fromBase64String("base64:MIIBJTANBgkqhkiG9w0BAQEFAAOCARIAMIIBDQKCAQEAtObfiwWyBFpSNJZmkxlwHy5vT+Jb+Vv6f7LlhKE9wNcC0Qp0rdyMwxLpdwfuLsKbRdBEbDhpb3dz1JPJiatlhKVKUsoQ25UQu9hv2oXyyEzJx86CGQq5HOr3YGGSdJR0LKq1PhbYrNmuS6jPDYobxssXyc/txsipSGwzMgVHcqt9OSiGQySZ8/9mtv42EefzFE95wuuy42KJKG7h0DTMfFSLTpqhS/Mbp8EKPuVb1huWsMKVL9QtOPYEXa9QPZa2WBPX5Y9BI1McRQ/Wf8WwqQtARpBfSVpkKPS1Amht2fEOxSSYRqG6IUsfK8xO9hxt+3+/Op/+IFJTGcGF8BrzWQIGCPw9/u27") | |
27 | + | ||
28 | + | let gamesLabelCounter = "X_GAMESCOUNTER" | |
29 | + | ||
30 | + | let gamesLabelBetsCounter = "X_BETSCOUNTER" | |
31 | + | ||
32 | + | let gamesLabelBetsFeeMoved = "X_BETSFEEMOVED" | |
33 | + | ||
34 | + | let gamesLabelTotalAmountWin = "X_TOTALAMOUNTWIN" | |
35 | + | ||
36 | + | let gamesLabelTotalAmountBet = "X_TOTALAMOUNTBET" | |
37 | + | ||
38 | + | let gamesLabelTotalAddressBet = "X_TOTALADDRESSBET" | |
39 | + | ||
40 | + | func gamesGetCounter () = getInteger(this, gamesLabelCounter) | |
41 | + | ||
42 | + | ||
43 | + | func gamesGetBetsCounter () = getInteger(this, gamesLabelBetsCounter) | |
44 | + | ||
45 | + | ||
46 | + | func gamesGetBetsFeeMoved () = getInteger(this, gamesLabelBetsFeeMoved) | |
47 | + | ||
48 | + | ||
49 | + | func gamesGetTotalAmountWin () = getInteger(this, gamesLabelTotalAmountWin) | |
50 | + | ||
51 | + | ||
52 | + | func gamesGetTotalAmountBet () = getInteger(this, gamesLabelTotalAmountBet) | |
53 | + | ||
54 | + | ||
55 | + | func gamesGetTotalAddressBet () = getInteger(this, gamesLabelTotalAddressBet) | |
56 | + | ||
57 | + | ||
58 | + | func numberLabelCount (number) = ("N_" + number) | |
59 | + | ||
60 | + | ||
61 | + | func numberGetCount (number) = getInteger(this, numberLabelCount(number)) | |
62 | + | ||
63 | + | ||
64 | + | func gameLabelStatus (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_STATUS") | |
65 | + | ||
66 | + | ||
67 | + | func gameLabelNumber (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_NUMBER") | |
68 | + | ||
69 | + | ||
70 | + | func gameLabelMax (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_MAX") | |
71 | + | ||
72 | + | ||
73 | + | func gameLabelBets (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_BETS") | |
74 | + | ||
75 | + | ||
76 | + | func gameLabelPassed (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_PASSED") | |
77 | + | ||
78 | + | ||
79 | + | func gameLabelHeight (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_HEIGHT") | |
80 | + | ||
81 | + | ||
82 | + | func gameLabelSumSha (GAMESCOUNTER) = (("G_" + toString(GAMESCOUNTER)) + "_SUMSHA") | |
83 | + | ||
84 | + | ||
85 | + | func gameLabelCmbMax (GAMESCOUNTER,CMB) = ((("G_" + toString(GAMESCOUNTER)) + "_C") + CMB) | |
86 | + | ||
87 | + | ||
88 | + | func gameGetStatus (GAMESCOUNTER) = getString(this, gameLabelStatus(GAMESCOUNTER)) | |
89 | + | ||
90 | + | ||
91 | + | func gameGetNumber (GAMESCOUNTER) = getInteger(this, gameLabelNumber(GAMESCOUNTER)) | |
92 | + | ||
93 | + | ||
94 | + | func gameGetMax (GAMESCOUNTER) = getInteger(this, gameLabelMax(GAMESCOUNTER)) | |
95 | + | ||
96 | + | ||
97 | + | func gameGetBets (GAMESCOUNTER) = getInteger(this, gameLabelBets(GAMESCOUNTER)) | |
98 | + | ||
99 | + | ||
100 | + | func gameGetPassed (GAMESCOUNTER) = getInteger(this, gameLabelPassed(GAMESCOUNTER)) | |
101 | + | ||
102 | + | ||
103 | + | func gameGetHeight (GAMESCOUNTER) = getInteger(this, gameLabelHeight(GAMESCOUNTER)) | |
104 | + | ||
105 | + | ||
106 | + | func gameGetSumSha (GAMESCOUNTER) = getString(this, gameLabelSumSha(GAMESCOUNTER)) | |
107 | + | ||
108 | + | ||
109 | + | func gameGetCmbMax (GAMESCOUNTER,CMB) = getInteger(this, gameLabelCmbMax(GAMESCOUNTER, CMB)) | |
110 | + | ||
111 | + | ||
112 | + | func betLabelStatus (idBet) = (("B_" + idBet) + "_STATUS") | |
113 | + | ||
114 | + | ||
115 | + | func betLabelInfo (idBet) = (("B_" + idBet) + "_INFO") | |
116 | + | ||
117 | + | ||
118 | + | func betGetStatus (idBet) = getString(this, betLabelStatus(idBet)) | |
119 | + | ||
120 | + | ||
121 | + | func betGetInfo (idBet) = getString(this, betLabelInfo(idBet)) | |
122 | + | ||
123 | + | ||
124 | + | func addressLabelWon (addr) = (("A_" + addr) + "_WON") | |
125 | + | ||
126 | + | ||
127 | + | func addressLabelAmount (addr) = (("A_" + addr) + "_AMOUNT") | |
128 | + | ||
129 | + | ||
130 | + | func addressLabelBets (addr) = (("A_" + addr) + "_BETS") | |
131 | + | ||
132 | + | ||
133 | + | func addressLabelHit (addr) = (("A_" + addr) + "_HIT") | |
134 | + | ||
135 | + | ||
136 | + | func addressGetWon (addr) = getInteger(this, addressLabelWon(addr)) | |
137 | + | ||
138 | + | ||
139 | + | func addressGetAmount (addr) = getInteger(this, addressLabelAmount(addr)) | |
140 | + | ||
141 | + | ||
142 | + | func addressGetBets (addr) = getInteger(this, addressLabelBets(addr)) | |
143 | + | ||
144 | + | ||
145 | + | func addressGetHit (addr) = getInteger(this, addressLabelHit(addr)) | |
146 | + | ||
147 | + | ||
148 | + | func pointerAddressLabel (id) = ("P_" + id) | |
149 | + | ||
150 | + | ||
151 | + | func checkPermission (callerPublicKey) = (callerPublicKey != serverPublicKey) | |
152 | + | ||
153 | + | ||
154 | + | func gameNewMax (win) = match gamesGetCounter() { | |
155 | + | case GAMESCOUNTER: Int => | |
156 | + | match gameGetMax(GAMESCOUNTER) { | |
157 | + | case CURRMAX: Int => | |
158 | + | let temp = (CURRMAX - win) | |
159 | + | if ((0 > temp)) | |
160 | + | then throw("BET_IS_BLOCK") | |
161 | + | else temp | |
162 | + | case _ => | |
163 | + | throw("GAME_NOT_FOUND") | |
164 | + | } | |
165 | + | case _ => | |
166 | + | throw("INIT_NEEDED") | |
167 | + | } | |
168 | + | ||
169 | + | ||
170 | + | func gameNewSumSha (txId) = match gamesGetCounter() { | |
171 | + | case GAMESCOUNTER: Int => | |
172 | + | match gameGetSumSha(GAMESCOUNTER) { | |
173 | + | case SUMSHA: String => | |
174 | + | toBase58String(sha256((fromBase58String(SUMSHA) + txId))) | |
175 | + | case _ => | |
176 | + | throw("GAME_NOT_FOUND") | |
177 | + | } | |
178 | + | case _ => | |
179 | + | throw("INIT_NEEDED") | |
180 | + | } | |
181 | + | ||
182 | + | ||
183 | + | func checkIdBet (idBet) = match betGetInfo(idBet) { | |
184 | + | case temp: String => | |
185 | + | throw("PLAYER_ALREADY_DEFINED") | |
186 | + | case _ => | |
187 | + | 1 | |
188 | + | } | |
189 | + | ||
190 | + | ||
191 | + | func checkBet (bet) = if (if (if (if (if (if ((bet == 10000000)) | |
192 | + | then true | |
193 | + | else (bet == 20000000)) | |
194 | + | then true | |
195 | + | else (bet == 50000000)) | |
196 | + | then true | |
197 | + | else (bet == 100000000)) | |
198 | + | then true | |
199 | + | else (bet == 200000000)) | |
200 | + | then true | |
201 | + | else (bet == 500000000)) | |
202 | + | then 1 | |
203 | + | else throw("BET_NOT_FOUND") | |
204 | + | ||
205 | + | ||
206 | + | func getCmb (cmb) = match getInteger(this, ("C" + cmb)) { | |
207 | + | case temp: Int => | |
208 | + | temp | |
209 | + | case _ => | |
210 | + | throw("CMB_NOT_FOUND") | |
211 | + | } | |
212 | + | ||
213 | + | ||
214 | + | func allowCmbMax (gamecounter,cmb,win) = match gameGetCmbMax(gamecounter, cmb) { | |
215 | + | case temp: Int => | |
216 | + | if (((temp + win) > 20000000000)) | |
217 | + | then throw("CMB_MAX_WIN") | |
218 | + | else 1 | |
219 | + | case _ => | |
220 | + | 1 | |
221 | + | } | |
222 | + | ||
223 | + | ||
224 | + | @Callable(i) | |
225 | + | func bet (id,cmb) = match gamesGetCounter() { | |
226 | + | case GAMESCOUNTER: Int => | |
227 | + | if ((id != GAMESCOUNTER)) | |
228 | + | then throw("GAME_ID_WRONG") | |
229 | + | else match gameGetStatus(GAMESCOUNTER) { | |
230 | + | case CURRSTATUS: String => | |
231 | + | if ((CURRSTATUS != "PLAY")) | |
232 | + | then throw("CURR_STATUS_IS_NOT_PLAY") | |
233 | + | else match gameGetHeight(GAMESCOUNTER) { | |
234 | + | case GAMEHEIGHT: Int => | |
235 | + | if (if ((GAMEHEIGHT != 0)) | |
236 | + | then (height > (GAMEHEIGHT + periodGamePlay)) | |
237 | + | else false) | |
238 | + | then throw("GAME_IS_END") | |
239 | + | else match gameGetBets(GAMESCOUNTER) { | |
240 | + | case BETS: Int => | |
241 | + | let idBet = ((toString(GAMESCOUNTER) + "_") + toString((BETS + 1))) | |
242 | + | let payment = value(i.payment) | |
243 | + | match payment.assetId { | |
244 | + | case assetId: ByteVector => | |
245 | + | throw("ONLY_WAVES_ACCEPTED") | |
246 | + | case _ => | |
247 | + | let amount = (payment.amount - fee) | |
248 | + | let win = (((checkIdBet(idBet) * checkBet(amount)) * getCmb(cmb)) * amount) | |
249 | + | let winmax = (win * allowCmbMax(GAMESCOUNTER, cmb, win)) | |
250 | + | let address = toBase58String(i.caller.bytes) | |
251 | + | let info = ((((((address + "||") + cmb) + "||") + toString(amount)) + "||") + toString(winmax)) | |
252 | + | let ADDRESSAMOUNT = match addressGetAmount(address) { | |
253 | + | case temp: Int => | |
254 | + | temp | |
255 | + | case _ => | |
256 | + | 0 | |
257 | + | } | |
258 | + | let ADDRESSBETS = match addressGetBets(address) { | |
259 | + | case temp: Int => | |
260 | + | temp | |
261 | + | case _ => | |
262 | + | 0 | |
263 | + | } | |
264 | + | let CMBMAX = match gameGetCmbMax(GAMESCOUNTER, cmb) { | |
265 | + | case temp: Int => | |
266 | + | temp | |
267 | + | case _ => | |
268 | + | 0 | |
269 | + | } | |
270 | + | let data = [DataEntry(betLabelInfo(idBet), info), DataEntry(betLabelStatus(idBet), "ACCEPT"), DataEntry(gameLabelBets(GAMESCOUNTER), (BETS + 1)), DataEntry(gameLabelHeight(GAMESCOUNTER), if ((GAMEHEIGHT == 0)) | |
271 | + | then height | |
272 | + | else GAMEHEIGHT), DataEntry(gameLabelMax(GAMESCOUNTER), gameNewMax(winmax)), DataEntry(gameLabelSumSha(GAMESCOUNTER), gameNewSumSha(i.transactionId)), DataEntry(gameLabelCmbMax(GAMESCOUNTER, cmb), (CMBMAX + winmax)), DataEntry(addressLabelAmount(address), (ADDRESSAMOUNT + amount)), DataEntry(addressLabelBets(address), (ADDRESSBETS + 1)), DataEntry(gamesLabelBetsCounter, (value(gamesGetBetsCounter()) + 1)), DataEntry(gamesLabelTotalAmountBet, (value(gamesGetTotalAmountBet()) + amount))] | |
273 | + | let TOTALADDRESSBET = (value(gamesGetTotalAddressBet()) + 1) | |
274 | + | let dataFinal = if ((ADDRESSAMOUNT == 0)) | |
275 | + | then [DataEntry(pointerAddressLabel(toString(TOTALADDRESSBET)), address), DataEntry(gamesLabelTotalAddressBet, TOTALADDRESSBET)] :: data | |
276 | + | else data | |
277 | + | WriteSet(dataFinal) | |
278 | + | } | |
279 | + | case _ => | |
280 | + | throw("GAME_NOT_FOUND") | |
281 | + | } | |
282 | + | case _ => | |
283 | + | throw("GAME_NOT_FOUND") | |
284 | + | } | |
285 | + | case _ => | |
286 | + | throw("GAME_NOT_FOUND") | |
287 | + | } | |
288 | + | case _ => | |
289 | + | throw("INIT_NEEDED") | |
290 | + | } | |
291 | + | ||
292 | + | ||
293 | + | ||
294 | + | @Callable(i) | |
295 | + | func getWin (BET) = if (checkPermission(i.callerPublicKey)) | |
296 | + | then throw("getWin_FORBBIDEN") | |
297 | + | else match gamesGetCounter() { | |
298 | + | case GAMESCOUNTER: Int => | |
299 | + | match gameGetStatus(GAMESCOUNTER) { | |
300 | + | case CURRSTATUS: String => | |
301 | + | if ((CURRSTATUS != "SHOW")) | |
302 | + | then throw("CURR_STATUS_IS_NOT_SHOW") | |
303 | + | else match gameGetNumber(GAMESCOUNTER) { | |
304 | + | case NUMBER: Int => | |
305 | + | let idBet = ((toString(GAMESCOUNTER) + "_") + toString(BET)) | |
306 | + | let numberString = (("_" + toString(NUMBER)) + "_") | |
307 | + | let red = "|_1_3_5_7_9_12_14_16_18_19_21_23_25_27_30_32_34_36_|" | |
308 | + | let black = "|_2_4_6_8_10_11_13_15_17_20_22_24_26_28_29_31_33_35_|" | |
309 | + | let indexRed = match indexOf(red, numberString) { | |
310 | + | case temp: Int => | |
311 | + | (temp > 0) | |
312 | + | case _ => | |
313 | + | false | |
314 | + | } | |
315 | + | let indexBlack = match indexOf(black, numberString) { | |
316 | + | case temp: Int => | |
317 | + | (temp > 0) | |
318 | + | case _ => | |
319 | + | false | |
320 | + | } | |
321 | + | let cmbRB = ("_" + (if (indexRed) | |
322 | + | then "RED" | |
323 | + | else if (indexBlack) | |
324 | + | then "BLACK" | |
325 | + | else "NDF")) | |
326 | + | let cmbEO = ("_" + (if (if ((0 >= NUMBER)) | |
327 | + | then true | |
328 | + | else (NUMBER > 36)) | |
329 | + | then "NDF" | |
330 | + | else if (((NUMBER % 2) == 0)) | |
331 | + | then "EVEN" | |
332 | + | else "ODD")) | |
333 | + | let cmbLH = ("_" + (if (if ((NUMBER >= 1)) | |
334 | + | then (18 >= NUMBER) | |
335 | + | else false) | |
336 | + | then "LOW" | |
337 | + | else if (if ((NUMBER >= 19)) | |
338 | + | then (36 >= NUMBER) | |
339 | + | else false) | |
340 | + | then "HIGH" | |
341 | + | else "NDF")) | |
342 | + | let cmbDZ = ("_" + (if (if ((NUMBER >= 1)) | |
343 | + | then (12 >= NUMBER) | |
344 | + | else false) | |
345 | + | then "DOZER1" | |
346 | + | else if (if ((NUMBER >= 13)) | |
347 | + | then (24 >= NUMBER) | |
348 | + | else false) | |
349 | + | then "DOZER2" | |
350 | + | else if (if ((NUMBER >= 25)) | |
351 | + | then (36 >= NUMBER) | |
352 | + | else false) | |
353 | + | then "DOZER3" | |
354 | + | else "NDF")) | |
355 | + | let cmbCL = ("_" + (if (if ((0 >= NUMBER)) | |
356 | + | then true | |
357 | + | else (NUMBER > 36)) | |
358 | + | then "NDF" | |
359 | + | else if (((NUMBER % 3) == 1)) | |
360 | + | then "COLUMN1" | |
361 | + | else if (((NUMBER % 3) == 2)) | |
362 | + | then "COLUMN2" | |
363 | + | else "COLUMN3")) | |
364 | + | let STATUS = match betGetStatus(idBet) { | |
365 | + | case temp: String => | |
366 | + | temp | |
367 | + | case _ => | |
368 | + | throw("BET_STATUS_NOT_FOUND") | |
369 | + | } | |
370 | + | let INFO = match betGetInfo(idBet) { | |
371 | + | case temp: String => | |
372 | + | temp | |
373 | + | case _ => | |
374 | + | throw("BET_INFO_NOT_FOUND") | |
375 | + | } | |
376 | + | let INFOS = split(INFO, "||") | |
377 | + | let ADDRESSSTRING = INFOS[0] | |
378 | + | let ADDRESS = value(addressFromString(ADDRESSSTRING)) | |
379 | + | let CMB = INFOS[1] | |
380 | + | let AMOUNT = value(parseInt(INFOS[2])) | |
381 | + | let WIN = value(parseInt(INFOS[3])) | |
382 | + | let ADDRESSWON = match addressGetWon(ADDRESSSTRING) { | |
383 | + | case temp: Int => | |
384 | + | temp | |
385 | + | case _ => | |
386 | + | 0 | |
387 | + | } | |
388 | + | let ADDRESSHIT = match addressGetHit(ADDRESSSTRING) { | |
389 | + | case temp: Int => | |
390 | + | temp | |
391 | + | case _ => | |
392 | + | 0 | |
393 | + | } | |
394 | + | let DATAPASSED = DataEntry(gameLabelPassed(GAMESCOUNTER), (value(gameGetPassed(GAMESCOUNTER)) + 1)) | |
395 | + | if (if (if (if (if ((STATUS == "ACCEPT")) | |
396 | + | then (CMB != "") | |
397 | + | else false) | |
398 | + | then (WIN > 0) | |
399 | + | else false) | |
400 | + | then (AMOUNT > 0) | |
401 | + | else false) | |
402 | + | then isDefined(ADDRESS) | |
403 | + | else false) | |
404 | + | then { | |
405 | + | let cmbIN = match indexOf((("|" + CMB) + "|"), numberString) { | |
406 | + | case temp: Int => | |
407 | + | (temp > 0) | |
408 | + | case _ => | |
409 | + | false | |
410 | + | } | |
411 | + | if (if (if (if (if (if (cmbIN) | |
412 | + | then true | |
413 | + | else (CMB == cmbRB)) | |
414 | + | then true | |
415 | + | else (CMB == cmbEO)) | |
416 | + | then true | |
417 | + | else (CMB == cmbLH)) | |
418 | + | then true | |
419 | + | else (CMB == cmbDZ)) | |
420 | + | then true | |
421 | + | else (CMB == cmbCL)) | |
422 | + | then ScriptResult(WriteSet([DATAPASSED, DataEntry(betLabelStatus(idBet), "WON"), DataEntry(addressLabelWon(ADDRESSSTRING), ((ADDRESSWON + WIN) + AMOUNT)), DataEntry(addressLabelHit(ADDRESSSTRING), (ADDRESSHIT + 1)), DataEntry(gamesLabelTotalAmountWin, ((value(gamesGetTotalAmountWin()) + WIN) + AMOUNT))]), TransferSet([ScriptTransfer(ADDRESS, (WIN + AMOUNT), unit)])) | |
423 | + | else WriteSet([DATAPASSED, DataEntry(betLabelStatus(idBet), "LOST")]) | |
424 | + | } | |
425 | + | else throw("GET_WIN_ALREADY_CALLED") | |
426 | + | case _ => | |
427 | + | throw("GAME_NOT_FOUND") | |
428 | + | } | |
429 | + | case _ => | |
430 | + | throw("GAME_NOT_FOUND") | |
431 | + | } | |
432 | + | case _ => | |
433 | + | throw("INIT_NEEDED") | |
434 | + | } | |
435 | + | ||
436 | + | ||
437 | + | ||
438 | + | @Callable(i) | |
439 | + | func addCmb (cmb,val) = if (checkPermission(i.callerPublicKey)) | |
440 | + | then throw("addCmb_FORBBIDEN") | |
441 | + | else match gamesGetCounter() { | |
442 | + | case GAMESCOUNTER: Int => | |
443 | + | if ((GAMESCOUNTER != 0)) | |
444 | + | then throw("INIT_ALREADY_DONE") | |
445 | + | else if (if (if (if (if (if (if ((val == 1)) | |
446 | + | then true | |
447 | + | else (val == 2)) | |
448 | + | then true | |
449 | + | else (val == 5)) | |
450 | + | then true | |
451 | + | else (val == 8)) | |
452 | + | then true | |
453 | + | else (val == 11)) | |
454 | + | then true | |
455 | + | else (val == 17)) | |
456 | + | then true | |
457 | + | else (val == 35)) | |
458 | + | then WriteSet([DataEntry(("C" + cmb), val)]) | |
459 | + | else throw("AMOUNT_NOT_FOUND") | |
460 | + | case _ => | |
461 | + | throw("INIT_NEEDED") | |
462 | + | } | |
463 | + | ||
464 | + | ||
465 | + | ||
466 | + | @Callable(i) | |
467 | + | func initGame () = if (checkPermission(i.callerPublicKey)) | |
468 | + | then throw("initGame_FORBBIDEN") | |
469 | + | else match gamesGetCounter() { | |
470 | + | case GAMESCOUNTER: Int => | |
471 | + | throw("INIT_ALREADY_DONE") | |
472 | + | case _ => | |
473 | + | WriteSet([DataEntry(gamesLabelCounter, 0), DataEntry(gamesLabelBetsCounter, 0), DataEntry(gamesLabelBetsFeeMoved, 0), DataEntry(gamesLabelTotalAmountWin, 0), DataEntry(gamesLabelTotalAmountBet, 0), DataEntry(gamesLabelTotalAddressBet, 0)]) | |
474 | + | } | |
475 | + | ||
476 | + | ||
477 | + | ||
478 | + | @Callable(i) | |
479 | + | func newGame () = if (checkPermission(i.callerPublicKey)) | |
480 | + | then throw("newGame_FORBBIDEN") | |
481 | + | else match gamesGetCounter() { | |
482 | + | case GAMESCOUNTER: Int => | |
483 | + | let newGameCounter = (GAMESCOUNTER + 1) | |
484 | + | let BETSCOUNTER = value(gamesGetBetsCounter()) | |
485 | + | let BETSMOVED = value(gamesGetBetsFeeMoved()) | |
486 | + | let gameMax = (wavesBalance(this) - ((BETSCOUNTER - BETSMOVED) * fee)) | |
487 | + | let halfGameMax = if (((gameMax % 2) == 1)) | |
488 | + | then ((gameMax - 1) / 2) | |
489 | + | else (gameMax / 2) | |
490 | + | let sendData = WriteSet([DataEntry(gamesLabelCounter, newGameCounter), DataEntry(gameLabelStatus(newGameCounter), "PLAY"), DataEntry(gameLabelMax(newGameCounter), halfGameMax), DataEntry(gameLabelBets(newGameCounter), 0), DataEntry(gameLabelPassed(newGameCounter), 0), DataEntry(gameLabelHeight(newGameCounter), 0), DataEntry(gameLabelSumSha(newGameCounter), toBase58String(sha256(i.transactionId)))]) | |
491 | + | if ((ONEWAVES > halfGameMax)) | |
492 | + | then throw("BALANCE_IS_LOW") | |
493 | + | else if ((GAMESCOUNTER == 0)) | |
494 | + | then sendData | |
495 | + | else { | |
496 | + | let CURRSTATUS = value(gameGetStatus(GAMESCOUNTER)) | |
497 | + | if ((CURRSTATUS != "SHOW")) | |
498 | + | then throw("CURR_STATUS_IS_NOT_SHOW") | |
499 | + | else { | |
500 | + | let BETS = value(gameGetBets(GAMESCOUNTER)) | |
501 | + | let PASSED = value(gameGetPassed(GAMESCOUNTER)) | |
502 | + | if ((BETS != PASSED)) | |
503 | + | then throw("WAIT_ALL_PASSED") | |
504 | + | else sendData | |
505 | + | } | |
506 | + | } | |
507 | + | case _ => | |
508 | + | throw("INIT_NEEDED") | |
509 | + | } | |
510 | + | ||
511 | + | ||
512 | + | ||
513 | + | @Callable(i) | |
514 | + | func showGame (rsaSign) = if (checkPermission(i.callerPublicKey)) | |
515 | + | then throw("showGame_FORBBIDEN") | |
516 | + | else match gamesGetCounter() { | |
517 | + | case GAMESCOUNTER: Int => | |
518 | + | match gameGetSumSha(GAMESCOUNTER) { | |
519 | + | case SUMSHA: String => | |
520 | + | let rsaSigValid = rsaVerify(SHA256, fromBase58String(SUMSHA), rsaSign, RSAPUBLIC) | |
521 | + | if (!(rsaSigValid)) | |
522 | + | then throw("INVALID_RSA_SIGN") | |
523 | + | else { | |
524 | + | let index = (toInt(sha256(rsaSign)) % 37) | |
525 | + | let numberString = wheel[index] | |
526 | + | let number = value(parseInt(numberString)) | |
527 | + | let numberCount = match numberGetCount(numberString) { | |
528 | + | case temp: Int => | |
529 | + | temp | |
530 | + | case _ => | |
531 | + | 0 | |
532 | + | } | |
533 | + | let CURRSTATUS = value(gameGetStatus(GAMESCOUNTER)) | |
534 | + | if ((CURRSTATUS != "PLAY")) | |
535 | + | then throw("CURR_STATUS_IS_NOT_PLAY") | |
536 | + | else { | |
537 | + | let GAMEHEIGHT = value(gameGetHeight(GAMESCOUNTER)) | |
538 | + | if (if ((GAMEHEIGHT == 0)) | |
539 | + | then true | |
540 | + | else ((GAMEHEIGHT + periodGamePlay) >= height)) | |
541 | + | then throw("GAME_IS_NOT_END") | |
542 | + | else WriteSet([DataEntry(gameLabelStatus(GAMESCOUNTER), "SHOW"), DataEntry(gameLabelNumber(GAMESCOUNTER), number), DataEntry(numberLabelCount(numberString), (numberCount + 1))]) | |
543 | + | } | |
544 | + | } | |
545 | + | case _ => | |
546 | + | throw("GAME_NOT_FOUND") | |
547 | + | } | |
548 | + | case _ => | |
549 | + | throw("INIT_NEEDED") | |
550 | + | } | |
551 | + | ||
552 | + | ||
553 | + | ||
554 | + | @Callable(i) | |
555 | + | func amountToWallet (amount) = if (checkPermission(i.callerPublicKey)) | |
556 | + | then throw("amountToWallet_FORBBIDEN") | |
557 | + | else match gamesGetCounter() { | |
558 | + | case GAMESCOUNTER: Int => | |
559 | + | if ((GAMESCOUNTER == 0)) | |
560 | + | then TransferSet([ScriptTransfer(addressFromPublicKey(serverPublicKey), amount, unit)]) | |
561 | + | else { | |
562 | + | let CURRSTATUS = value(gameGetStatus(GAMESCOUNTER)) | |
563 | + | if ((CURRSTATUS != "SHOW")) | |
564 | + | then throw("CURR_STATUS_IS_NOT_SHOW") | |
565 | + | else { | |
566 | + | let BETS = value(gameGetBets(GAMESCOUNTER)) | |
567 | + | let PASSED = value(gameGetPassed(GAMESCOUNTER)) | |
568 | + | if ((BETS != PASSED)) | |
569 | + | then throw("WAIT_ALL_PASSED") | |
570 | + | else TransferSet([ScriptTransfer(addressFromPublicKey(walletPublicKey), amount, unit)]) | |
571 | + | } | |
572 | + | } | |
573 | + | case _ => | |
574 | + | throw("INIT_NEEDED") | |
575 | + | } | |
576 | + | ||
577 | + | ||
578 | + | ||
579 | + | @Callable(i) | |
580 | + | func betsFeeToServer () = if (checkPermission(i.callerPublicKey)) | |
581 | + | then throw("betsFeeToServer_FORBBIDEN") | |
582 | + | else match gamesGetCounter() { | |
583 | + | case GAMESCOUNTER: Int => | |
584 | + | if ((GAMESCOUNTER == 0)) | |
585 | + | then throw("NO_BETS_FEE") | |
586 | + | else { | |
587 | + | let CURRSTATUS = value(gameGetStatus(GAMESCOUNTER)) | |
588 | + | if ((CURRSTATUS != "SHOW")) | |
589 | + | then throw("CURR_STATUS_IS_NOT_SHOW") | |
590 | + | else { | |
591 | + | let BETS = value(gameGetBets(GAMESCOUNTER)) | |
592 | + | let PASSED = value(gameGetPassed(GAMESCOUNTER)) | |
593 | + | if ((BETS != PASSED)) | |
594 | + | then throw("WAIT_ALL_PASSED") | |
595 | + | else { | |
596 | + | let BETSCOUNTER = value(gamesGetBetsCounter()) | |
597 | + | let BETSMOVED = value(gamesGetBetsFeeMoved()) | |
598 | + | ScriptResult(WriteSet([DataEntry(gamesLabelBetsFeeMoved, BETSCOUNTER)]), TransferSet([ScriptTransfer(addressFromPublicKey(serverPublicKey), ((BETSCOUNTER - BETSMOVED) * fee), unit)])) | |
599 | + | } | |
600 | + | } | |
601 | + | } | |
602 | + | case _ => | |
603 | + | throw("INIT_NEEDED") | |
604 | + | } | |
605 | + | ||
606 | + | ||
607 | + | @Verifier(tx) | |
608 | + | func verify () = match tx { | |
609 | + | case TT: TransferTransaction => | |
610 | + | if ((addressFromPublicKey(TT.senderPublicKey) == TT.sender)) | |
611 | + | then sigVerify(TT.bodyBytes, TT.proofs[0], TT.senderPublicKey) | |
612 | + | else false | |
613 | + | case SS: SetScriptTransaction => | |
614 | + | if ((addressFromPublicKey(SS.senderPublicKey) == SS.sender)) | |
615 | + | then sigVerify(SS.bodyBytes, SS.proofs[0], SS.senderPublicKey) | |
616 | + | else false | |
617 | + | case _ => | |
618 | + | false | |
619 | + | } | |
620 | + |
github/deemru/w8io/026f985 47.64 ms ◑