tx · 3W2hjmHjuMfou3jwUaCTQMjcBTLQcT8yzVbm7AthHedW 3N2ahnPiA8og8iZGxdeY8v3ny16bxJv8LBS: -0.01000000 Waves 2018.11.16 17:32 [378431] smart account 3N2ahnPiA8og8iZGxdeY8v3ny16bxJv8LBS > SELF 0.00000000 Waves
{ "type": 13, "id": "3W2hjmHjuMfou3jwUaCTQMjcBTLQcT8yzVbm7AthHedW", "fee": 1000000, "feeAssetId": null, "timestamp": 1542378819523, "version": 1, "sender": "3N2ahnPiA8og8iZGxdeY8v3ny16bxJv8LBS", "senderPublicKey": "4TYCkH4gQR2uY2VGAUmHk3LwYbMGWr98R75aXmZGNjvh", "proofs": [ "3JcjrnM6K1Din9LT1Szp7tcjHq6LEZncPTtT22t8UzBr2kZGsWAzQyX4BmdSwAuNoBVsBHYhiwPpNLmdiZ3E4pbj" ], "script": "base64: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AAAAAAAAAgUAAAADbnVtAAAAAAAAAAACBwMDAwUAAAAMY2FzaW5vU2lnbmVkBQAAAA1jYXNpbm9CZXRUdXJuBwUAAAASY2FzaW5vSW5wdXRDb3JyZWN0BwYDAwUAAAAMcGxheWVyU2lnbmVkBQAAAA1wbGF5ZXJCZXRUdXJuBwUAAAAScGxheWVySW5wdXRDb3JyZWN0BwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADdHR4BQAAAAckbWF0Y2gwBAAAAApiZXRJblJhbmdlAwkAAGcAAAACBQAAAApjYXNpbm9EaWNlBQAAAAVkaWNlMQkAAGcAAAACBQAAAAVkaWNlMgUAAAAKY2FzaW5vRGljZQcEAAAAD3dpdGhkcmF3Q29ycmVjdAMJAABnAAAAAggFAAAAA3R0eAAAAAZhbW91bnQAAAAAAACYloAJAABnAAAAAgAAAAAAAA9CQAgFAAAAA3R0eAAAAANmZWUHBAAAAAlwbGF5ZXJXaW4DBQAAAAtjYXNpbm9CZXRPawUAAAAKYmV0SW5SYW5nZQcEAAAACWNhc2lub1dpbgMFAAAAC2Nhc2lub0JldE9rCQEAAAABIQAAAAEFAAAACmJldEluUmFuZ2UHBAAAABJwbGF5ZXJDYW5UYWtlUHJpemUDBQAAAAlwcml6ZVR1cm4FAAAACXBsYXllcldpbgcEAAAADXBsYXllckNhblRha2UDAwUAAAAScGxheWVyQ2FuVGFrZVByaXplBgUAAAAXcGxheWVyRW1lcmdlbmN5VGFrZVR1cm4JAAAAAAAAAggFAAAAA3R0eAAAAAlyZWNpcGllbnQFAAAACnBsYXllckFkZHIHBAAAABJjYXNpbm9DYW5UYWtlUHJpemUDAwUAAAAJcHJpemVUdXJuBQAAAAljYXNpbm9XaW4HCQAAAAAAAAIIBQAAAAN0dHgAAAAJcmVjaXBpZW50BQAAAApjYXNpbm9BZGRyBwQAAAANY2FzaW5vQ2FuVGFrZQMDBQAAABJjYXNpbm9DYW5UYWtlUHJpemUGBQAAABpjYXNpbm9DYW5FbWVyZ2VuY3lUYWtlVHVybgkAAAAAAAACCAUAAAADdHR4AAAACXJlY2lwaWVudAUAAAAKY2FzaW5vQWRkcgcDAwUAAAANcGxheWVyQ2FuVGFrZQYFAAAADWNhc2lub0NhblRha2UFAAAAD3dpdGhkcmF3Q29ycmVjdAcGMserMw==", "chainId": 84, "height": 378431, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 1 #-} | |
2 | + | {-# CONTENT_TYPE EXPRESSION #-} | |
3 | + | let playerAddr = Address(base58'3MyaPJkHmZy4u57uKcHXgzQxsk9wAP9LTZ5') | |
4 | + | let playerPubKey = base58'EhyhHkMbyNu8PwHoiJVCq2SciN9FmM5KvBeSN2NkTmeL' | |
5 | + | let casinoAddr = Address(base58'3MyaPJkHmZy4u57uKcHXgzQxsk9wAP9LTZ5') | |
6 | + | let casinoPubKey = base58'EhyhHkMbyNu8PwHoiJVCq2SciN9FmM5KvBeSN2NkTmeL' | |
7 | + | let playerSigned = sigVerify(tx.bodyBytes, tx.proofs[0], playerPubKey) | |
8 | + | let casinoSigned = sigVerify(tx.bodyBytes, tx.proofs[0], casinoPubKey) | |
9 | + | let me = tx.sender | |
10 | + | let casinoBet = 88772727 | |
11 | + | let playerBet = 25000000 | |
12 | + | let gameBalance = (casinoBet + playerBet) | |
13 | + | let start = 378431 | |
14 | + | let playerRangeSize = 0 | |
15 | + | let balance = wavesBalance(me) | |
16 | + | let casinoChoiceHash = base58'CKeQzAitXR6CEtwLM2kGFYTk87kFrc1SFANCBPmyx7cM' | |
17 | + | let dice1 = extract(getInteger(me, "dice1")) | |
18 | + | let dice2 = extract(getInteger(me, "dice2")) | |
19 | + | let casinoDice = extract(getInteger(me, "casinoDice")) | |
20 | + | let playerDepositOk = (balance >= (casinoBet + playerBet)) | |
21 | + | let playerDepositTurn = if (if (((start + 50) > height)) | |
22 | + | then (balance >= casinoBet) | |
23 | + | else false) | |
24 | + | then !(playerDepositOk) | |
25 | + | else false | |
26 | + | let playerBetOk = if ((dice1 > 0)) | |
27 | + | then (dice2 > 0) | |
28 | + | else false | |
29 | + | let playerBetTurn = if (if (((start + 100) > height)) | |
30 | + | then playerDepositOk | |
31 | + | else false) | |
32 | + | then !(playerBetOk) | |
33 | + | else false | |
34 | + | let casinoBetOk = (casinoDice > 0) | |
35 | + | let casinoBetTurn = if (if (((start + 200) > height)) | |
36 | + | then playerBetOk | |
37 | + | else false) | |
38 | + | then !(casinoBetOk) | |
39 | + | else false | |
40 | + | let prizeTurn = casinoBetOk | |
41 | + | let playerEmergencyTakeTurn = if ((height >= (start + 300))) | |
42 | + | then !(casinoBetOk) | |
43 | + | else false | |
44 | + | let casinoCanEmergencyTakeTurn = if ((height >= (start + 100))) | |
45 | + | then if (!(playerDepositOk)) | |
46 | + | then true | |
47 | + | else !(playerBetOk) | |
48 | + | else false | |
49 | + | match tx { | |
50 | + | case dtx: DataTransaction => | |
51 | + | let num = size(dtx.data) | |
52 | + | let choice1 = extract(getInteger(dtx.data, "dice1")) | |
53 | + | let choice2 = extract(getInteger(dtx.data, "dice2")) | |
54 | + | let casinoChoice = extract(getInteger(dtx.data, "casinoDice")) | |
55 | + | let salt = extract(getString(dtx.data, "salt")) | |
56 | + | let playerDicesInRange = if (if (if ((choice1 >= 1)) | |
57 | + | then (100 >= choice1) | |
58 | + | else false) | |
59 | + | then if ((choice2 >= 1)) | |
60 | + | then (100 >= choice2) | |
61 | + | else false | |
62 | + | else false) | |
63 | + | then (choice2 >= choice1) | |
64 | + | else false | |
65 | + | let playerRangeCorrect = ((choice2 - choice1) == playerRangeSize) | |
66 | + | let casinoDicesInRange = if ((casinoChoice >= 1)) | |
67 | + | then (100 >= casinoChoice) | |
68 | + | else false | |
69 | + | let newHash = keccak256(toBytes((toString(casinoChoice) + salt))) | |
70 | + | let casinoVerified = (newHash == casinoChoiceHash) | |
71 | + | let playerInputCorrect = if (playerDicesInRange) | |
72 | + | then (num == 2) | |
73 | + | else false | |
74 | + | let casinoInputCorrect = if (if (casinoDicesInRange) | |
75 | + | then casinoVerified | |
76 | + | else false) | |
77 | + | then (num == 2) | |
78 | + | else false | |
79 | + | if (if (if (casinoSigned) | |
80 | + | then casinoBetTurn | |
81 | + | else false) | |
82 | + | then casinoInputCorrect | |
83 | + | else false) | |
84 | + | then true | |
85 | + | else if (if (playerSigned) | |
86 | + | then playerBetTurn | |
87 | + | else false) | |
88 | + | then playerInputCorrect | |
89 | + | else false | |
90 | + | case ttx: TransferTransaction => | |
91 | + | let betInRange = if ((casinoDice >= dice1)) | |
92 | + | then (dice2 >= casinoDice) | |
93 | + | else false | |
94 | + | let withdrawCorrect = if ((ttx.amount >= 10000000)) | |
95 | + | then (1000000 >= ttx.fee) | |
96 | + | else false | |
97 | + | let playerWin = if (casinoBetOk) | |
98 | + | then betInRange | |
99 | + | else false | |
100 | + | let casinoWin = if (casinoBetOk) | |
101 | + | then !(betInRange) | |
102 | + | else false | |
103 | + | let playerCanTakePrize = if (prizeTurn) | |
104 | + | then playerWin | |
105 | + | else false | |
106 | + | let playerCanTake = if (if (playerCanTakePrize) | |
107 | + | then true | |
108 | + | else playerEmergencyTakeTurn) | |
109 | + | then (ttx.recipient == playerAddr) | |
110 | + | else false | |
111 | + | let casinoCanTakePrize = if (if (prizeTurn) | |
112 | + | then casinoWin | |
113 | + | else false) | |
114 | + | then (ttx.recipient == casinoAddr) | |
115 | + | else false | |
116 | + | let casinoCanTake = if (if (casinoCanTakePrize) | |
117 | + | then true | |
118 | + | else casinoCanEmergencyTakeTurn) | |
119 | + | then (ttx.recipient == casinoAddr) | |
120 | + | else false | |
121 | + | if (if (playerCanTake) | |
122 | + | then true | |
123 | + | else casinoCanTake) | |
124 | + | then withdrawCorrect | |
125 | + | else false | |
126 | + | case _ => | |
127 | + | true | |
128 | + | } |
github/deemru/w8io/169f3d6 22.05 ms ◑