tx · 2bS9Ra7wyd2RM9nsQU56e5ZmwsAb81siDQ6fVeyeWfq3

3MtyQZ2r2VmRp2Wb23gxHCuWcDAfXfTFWXC:  -0.01000000 Waves

2019.01.15 18:30 [451300] smart account 3MtyQZ2r2VmRp2Wb23gxHCuWcDAfXfTFWXC > SELF 0.00000000 Waves

{ "type": 13, "id": "2bS9Ra7wyd2RM9nsQU56e5ZmwsAb81siDQ6fVeyeWfq3", "fee": 1000000, "feeAssetId": null, "timestamp": 1547566294140, "version": 1, "sender": "3MtyQZ2r2VmRp2Wb23gxHCuWcDAfXfTFWXC", "senderPublicKey": "3poZ5jYJ3E7d4HWA6GRH5eLvnvVS8jBtrPk84a6eQ5Wd", "proofs": [ "2gqSYDi2iiR61TaKkiHj6zoMdUuaXb69MeoHKQvdgnHdrJGHtrKBysN4oeVxURLh72nFzzdwkgrtkq5PjmLEtB5F" ], "script": "base64:AQQAAAAQc2VydmVyc1B1YmxpY0tleQEAAAAg0vq/zXjvXOHEggBQ1JvIhDFRWFgYk8nc8rSHWcpwpxcEAAAAFmVuY3R5cHRlZFNlcnZlcnNDaG9pY2UBAAAAIINBWhyQcwhJWRA5pQf/Tv7O7R4I7kBJ/Dv62N6EMHmqBAAAAAhkb25hdGlvbgAAAAAAAJiWgAQAAAAMcGxheWVyc1ByaXplAAAAAAABMS0ABAAAAApib3hlc0NvdW50AAAAAAAAAAAFBAAAABltYXliZURhdGFQbGF5ZXJzUHVibGljS2V5CQAEHQAAAAIIBQAAAAJ0eAAAAAZzZW5kZXICAAAAEHBsYXllcnNQdWJsaWNLZXkEAAAAFGRhdGFQbGF5ZXJzUHVibGljS2V5CQACWQAAAAEJAQAAAAdleHRyYWN0AAAAAQUAAAAZbWF5YmVEYXRhUGxheWVyc1B1YmxpY0tleQQAAAAMZGF0YUxvY2tlZEF0CQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAggFAAAAAnR4AAAABnNlbmRlcgIAAAAIbG9ja2VkQXQEAAAAFm1heWJlRGF0YVBsYXllcnNDaG9pY2UJAAQaAAAAAggFAAAAAnR4AAAABnNlbmRlcgIAAAANcGxheWVyc0Nob2ljZQQAAAARZGF0YVBsYXllcnNDaG9pY2UJAQAAAAdleHRyYWN0AAAAAQUAAAAWbWF5YmVEYXRhUGxheWVyc0Nob2ljZQQAAAAWbWF5YmVEYXRhU2VydmVyc0Nob2ljZQkABBoAAAACCAUAAAACdHgAAAAGc2VuZGVyAgAAAA1zZXJ2ZXJzQ2hvaWNlBAAAABFkYXRhU2VydmVyc0Nob2ljZQkBAAAAB2V4dHJhY3QAAAABBQAAABZtYXliZURhdGFTZXJ2ZXJzQ2hvaWNlBAAAAA90aW1lb3V0SW5CbG9ja3MAAAAAAAAAAHgEAAAAEmRhdGFUcmFuc2FjdGlvbkZlZQAAAAAAAAehIAQAAAAWdHJhbnNmZXJUcmFuc2FjdGlvbkZlZQAAAAAAAAehIAQAAAAOc2VydmVyc0FkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAEHNlcnZlcnNQdWJsaWNLZXkEAAAADnBsYXllcnNBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAABRkYXRhUGxheWVyc1B1YmxpY0tleQQAAAAOYWNjb3VudEJhbGFuY2UJAQAAAAx3YXZlc0JhbGFuY2UAAAABCAUAAAACdHgAAAAGc2VuZGVyBAAAAA5zZW5kZXJJc1NlcnZlcgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHNlcnZlcnNQdWJsaWNLZXkEAAAADnNlbmRlcklzUGxheWVyCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAUZGF0YVBsYXllcnNQdWJsaWNLZXkEAAAADmlzSW5pdGlhbFN0YXRlAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAZbWF5YmVEYXRhUGxheWVyc1B1YmxpY0tleQkAAGcAAAACBQAAAA5hY2NvdW50QmFsYW5jZQkAAGQAAAACCQAAZAAAAAIFAAAADHBsYXllcnNQcml6ZQkAAGgAAAACBQAAABJkYXRhVHJhbnNhY3Rpb25GZWUAAAAAAAAAAAMFAAAAFnRyYW5zZmVyVHJhbnNhY3Rpb25GZWUHBAAAABlkYXRhSXNWYWxpZEZvckxvY2tlZFN0YXRlAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAGW1heWJlRGF0YVBsYXllcnNQdWJsaWNLZXkJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAFm1heWJlRGF0YVBsYXllcnNDaG9pY2UHBAAAABJsb2NrZWRTdGF0ZVRpbWVvdXQJAABmAAAAAgUAAAAGaGVpZ2h0CQAAZAAAAAIFAAAADGRhdGFMb2NrZWRBdAUAAAAPdGltZW91dEluQmxvY2tzBAAAAA1pc0xvY2tlZFN0YXRlAwUAAAAZZGF0YUlzVmFsaWRGb3JMb2NrZWRTdGF0ZQkBAAAAASEAAAABBQAAABJsb2NrZWRTdGF0ZVRpbWVvdXQHBAAAABtpc1VzZXJEZWNpZGVkTm90VG9QbGF5U3RhdGUDBQAAABlkYXRhSXNWYWxpZEZvckxvY2tlZFN0YXRlBQAAABJsb2NrZWRTdGF0ZVRpbWVvdXQHBAAAACFkYXRhSXNWYWxpZEZvclBsYXllclJldmVhbGVkU3RhdGUDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAWbWF5YmVEYXRhUGxheWVyc0Nob2ljZQkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAWbWF5YmVEYXRhU2VydmVyc0Nob2ljZQcEAAAAGnBsYXllclJldmVhbGVkU3RhdGVUaW1lb3V0AwkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgUAAAAMZGF0YUxvY2tlZEF0CQAAaAAAAAIFAAAAD3RpbWVvdXRJbkJsb2NrcwAAAAAAAAAAAgkAAGcAAAACBQAAAA5hY2NvdW50QmFsYW5jZQkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgUAAAAMcGxheWVyc1ByaXplBQAAAAhkb25hdGlvbgUAAAASZGF0YVRyYW5zYWN0aW9uRmVlBQAAABZ0cmFuc2ZlclRyYW5zYWN0aW9uRmVlBwQAAAAeaXNQbGF5ZXJSZXZlYWxlZEhpc0Nob2ljZVN0YXRlAwUAAAAhZGF0YUlzVmFsaWRGb3JQbGF5ZXJSZXZlYWxlZFN0YXRlCQEAAAABIQAAAAEFAAAAGnBsYXllclJldmVhbGVkU3RhdGVUaW1lb3V0BwQAAAAdaXNTZXJ2ZXJEZWNpZGVkTm90VG9QbGF5U3RhdGUDBQAAACFkYXRhSXNWYWxpZEZvclBsYXllclJldmVhbGVkU3RhdGUFAAAAGnBsYXllclJldmVhbGVkU3RhdGVUaW1lb3V0BwQAAAAlaXNEYXRhVmFsaWRGb3JXaW5uZXJJc0RldGVybWluZWRTdGF0ZQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAFm1heWJlRGF0YVNlcnZlcnNDaG9pY2UEAAAAKGlzQmFsYW5jZVZhbGlkRm9yV2lubmVySXNEZXRlcm1pbmVkU3RhdGUJAABnAAAAAgUAAAAOYWNjb3VudEJhbGFuY2UJAABkAAAAAgkAAGQAAAACBQAAAAxwbGF5ZXJzUHJpemUFAAAACGRvbmF0aW9uBQAAABZ0cmFuc2ZlclRyYW5zYWN0aW9uRmVlBAAAABlpc1dpbm5lcklzRGV0ZXJtaW5lZFN0YXRlAwUAAAAlaXNEYXRhVmFsaWRGb3JXaW5uZXJJc0RldGVybWluZWRTdGF0ZQUAAAAoaXNCYWxhbmNlVmFsaWRGb3JXaW5uZXJJc0RldGVybWluZWRTdGF0ZQcEAAAAJWlzUGxheWVyRGVjaWRlZE5vdFRvU2VuZERvbmF0aW9uU3RhdGUDBQAAACVpc0RhdGFWYWxpZEZvcldpbm5lcklzRGV0ZXJtaW5lZFN0YXRlCQEAAAABIQAAAAEFAAAAKGlzQmFsYW5jZVZhbGlkRm9yV2lubmVySXNEZXRlcm1pbmVkU3RhdGUHBAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBAAAAANkdHgFAAAAByRtYXRjaDAEAAAAC3BheWxvYWRTaXplCQABkAAAAAEIBQAAAANkdHgAAAAEZGF0YQQAAAAQZmlyc3RQYXlsb2FkTmFtZQgJAAGRAAAAAggFAAAAA2R0eAAAAARkYXRhAAAAAAAAAAAAAAAAA2tleQQAAAARc2Vjb25kUGF5bG9hZE5hbWUICQABkQAAAAIIBQAAAANkdHgAAAAEZGF0YQAAAAAAAAAAAQAAAANrZXkEAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgkBAAAAB2V4dHJhY3QAAAABCQAEEAAAAAIIBQAAAANkdHgAAAAEZGF0YQUAAAAQZmlyc3RQYXlsb2FkTmFtZQQAAAAVc2Vjb25kUGF5bG9hZEFzU3RyaW5nCQEAAAAHZXh0cmFjdAAAAAEJAAQTAAAAAggFAAAAA2R0eAAAAARkYXRhBQAAABFzZWNvbmRQYXlsb2FkTmFtZQQAAAALZGF0YUZlZUlzT2sJAAAAAAAAAggFAAAAA2R0eAAAAANmZWUFAAAAEmRhdGFUcmFuc2FjdGlvbkZlZQMDBQAAAA5pc0luaXRpYWxTdGF0ZQYFAAAAG2lzVXNlckRlY2lkZWROb3RUb1BsYXlTdGF0ZQQAAAAXdmFsaWRMb2NrZWRBdElzUHJvdmlkZWQDCQAAAAAAAAIFAAAAEGZpcnN0UGF5bG9hZE5hbWUCAAAACGxvY2tlZEF0AwkAAGcAAAACBQAAAAZoZWlnaHQFAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgkAAGcAAAACAAAAAAAAAAAFCQAAZQAAAAIFAAAABmhlaWdodAUAAAAVZmlyc3RQYXlsb2FkQXNJbnRlZ2VyBwcEAAAAGnBsYXllcnNQdWJsaWNLZXlJc1Byb3ZpZGVkCQAAAAAAAAIFAAAAEXNlY29uZFBheWxvYWROYW1lAgAAABBwbGF5ZXJzUHVibGljS2V5AwMDAwUAAAAOc2VuZGVySXNTZXJ2ZXIFAAAAC2RhdGFGZWVJc09rBwUAAAAXdmFsaWRMb2NrZWRBdElzUHJvdmlkZWQHBQAAABpwbGF5ZXJzUHVibGljS2V5SXNQcm92aWRlZAcJAAAAAAAAAgUAAAALcGF5bG9hZFNpemUAAAAAAAAAAAIHAwUAAAANaXNMb2NrZWRTdGF0ZQQAAAAcdmFsaWRQbGF5ZXJzQ2hvaWNlSXNQcm92aWRlZAMJAAAAAAAAAgUAAAAQZmlyc3RQYXlsb2FkTmFtZQIAAAANcGxheWVyc0Nob2ljZQMJAABnAAAAAgUAAAAVZmlyc3RQYXlsb2FkQXNJbnRlZ2VyAAAAAAAAAAAACQAAZgAAAAIFAAAACmJveGVzQ291bnQFAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgcHAwMDBQAAAA5zZW5kZXJJc1BsYXllcgUAAAALZGF0YUZlZUlzT2sHBQAAABx2YWxpZFBsYXllcnNDaG9pY2VJc1Byb3ZpZGVkBwkAAAAAAAACBQAAAAtwYXlsb2FkU2l6ZQAAAAAAAAAAAQcDBQAAAB5pc1BsYXllclJldmVhbGVkSGlzQ2hvaWNlU3RhdGUEAAAAHHZhbGlkU2VydmVyQ2hvaWNlV2FzUHJvdmlkZWQDCQAAAAAAAAIFAAAAEGZpcnN0UGF5bG9hZE5hbWUCAAAADXNlcnZlcnNDaG9pY2UDCQAAZwAAAAIFAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgAAAAAAAAAAAAkAAGYAAAACBQAAAApib3hlc0NvdW50BQAAABVmaXJzdFBheWxvYWRBc0ludGVnZXIHBwQAAAAWc2VydmVyc1NhbHRXYXNQcm92aWRlZAkAAAAAAAACBQAAABFzZWNvbmRQYXlsb2FkTmFtZQIAAAALc2VydmVyc1NhbHQEAAAAImNob2ljZUFuZFNhbHRNYXRjaGVzSGFyZGNvZGVkVmFsdWUJAAAAAAAAAgkAAfUAAAABCQABmwAAAAEJAAEsAAAAAgkAAaQAAAABBQAAABVmaXJzdFBheWxvYWRBc0ludGVnZXIFAAAAFXNlY29uZFBheWxvYWRBc1N0cmluZwUAAAAWZW5jdHlwdGVkU2VydmVyc0Nob2ljZQMDAwMDBQAAAA5zZW5kZXJJc1NlcnZlcgUAAAALZGF0YUZlZUlzT2sHBQAAABx2YWxpZFNlcnZlckNob2ljZVdhc1Byb3ZpZGVkBwUAAAAWc2VydmVyc1NhbHRXYXNQcm92aWRlZAcFAAAAImNob2ljZUFuZFNhbHRNYXRjaGVzSGFyZGNvZGVkVmFsdWUHCQAAAAAAAAIFAAAAC3BheWxvYWRTaXplAAAAAAAAAAACBwcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAA3R0eAUAAAAHJG1hdGNoMAQAAAAPdHJhbnNmZXJGZWVJc09rCQAAAAAAAAIIBQAAAAN0dHgAAAADZmVlBQAAABZ0cmFuc2ZlclRyYW5zYWN0aW9uRmVlAwUAAAAZaXNXaW5uZXJJc0RldGVybWluZWRTdGF0ZQQAAAANd2lubmVyQWRkcmVzcwMJAAAAAAAAAgUAAAARZGF0YVNlcnZlcnNDaG9pY2UFAAAAEWRhdGFQbGF5ZXJzQ2hvaWNlBQAAAA5wbGF5ZXJzQWRkcmVzcwUAAAAOc2VydmVyc0FkZHJlc3MEAAAAEXByaXplR29lc1RvV2lubmVyCQAAAAAAAAIIBQAAAAN0dHgAAAAJcmVjaXBpZW50BQAAAA13aW5uZXJBZGRyZXNzAwMFAAAAD3RyYW5zZmVyRmVlSXNPawUAAAARcHJpemVHb2VzVG9XaW5uZXIHCQAAAAAAAAIIBQAAAAN0dHgAAAAGYW1vdW50CQAAZAAAAAIFAAAADHBsYXllcnNQcml6ZQUAAAAIZG9uYXRpb24HAwUAAAAdaXNTZXJ2ZXJEZWNpZGVkTm90VG9QbGF5U3RhdGUEAAAAEXJlY2lwaWVudElzUGxheWVyCQAAAAAAAAIIBQAAAAN0dHgAAAAJcmVjaXBpZW50BQAAAA5wbGF5ZXJzQWRkcmVzcwMDBQAAAA90cmFuc2ZlckZlZUlzT2sFAAAAEXJlY2lwaWVudElzUGxheWVyBwkAAAAAAAACCAUAAAADdHR4AAAABmFtb3VudAkAAGQAAAACBQAAAAxwbGF5ZXJzUHJpemUFAAAACGRvbmF0aW9uBwMFAAAAJWlzUGxheWVyRGVjaWRlZE5vdFRvU2VuZERvbmF0aW9uU3RhdGUEAAAAEXJlY2lwaWVudElzU2VydmVyCQAAAAAAAAIIBQAAAAN0dHgAAAAJcmVjaXBpZW50BQAAAA5zZXJ2ZXJzQWRkcmVzcwMDBQAAAA90cmFuc2ZlckZlZUlzT2sFAAAAEXJlY2lwaWVudElzU2VydmVyBwkAAAAAAAACCAUAAAADdHR4AAAABmFtb3VudAUAAAAMcGxheWVyc1ByaXplBwcHBlvRJA==", "chainId": 84, "height": 451300, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 1 #-}
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let serversPublicKey = base58'FCaP4jLhLawzEqbwAQGAVvPQBv2h3LdERCx7fckDvnzr'
4+let enctyptedServersChoice = base58'9qNCx8vXvrSEV8CMFCcPWaue96RYN9WDn3vuyoUeJTp5'
5+let donation = 10000000
6+let playersPrize = 20000000
7+let boxesCount = 5
8+let maybeDataPlayersPublicKey = getString(tx.sender, "playersPublicKey")
9+let dataPlayersPublicKey = fromBase58String(extract(maybeDataPlayersPublicKey))
10+let dataLockedAt = extract(getInteger(tx.sender, "lockedAt"))
11+let maybeDataPlayersChoice = getInteger(tx.sender, "playersChoice")
12+let dataPlayersChoice = extract(maybeDataPlayersChoice)
13+let maybeDataServersChoice = getInteger(tx.sender, "serversChoice")
14+let dataServersChoice = extract(maybeDataServersChoice)
15+let timeoutInBlocks = 120
16+let dataTransactionFee = 500000
17+let transferTransactionFee = 500000
18+let serversAddress = addressFromPublicKey(serversPublicKey)
19+let playersAddress = addressFromPublicKey(dataPlayersPublicKey)
20+let accountBalance = wavesBalance(tx.sender)
21+let senderIsServer = sigVerify(tx.bodyBytes, tx.proofs[0], serversPublicKey)
22+let senderIsPlayer = sigVerify(tx.bodyBytes, tx.proofs[0], dataPlayersPublicKey)
23+let isInitialState = if (!(isDefined(maybeDataPlayersPublicKey)))
24+ then (accountBalance >= ((playersPrize + (dataTransactionFee * 3)) + transferTransactionFee))
25+ else false
26+let dataIsValidForLockedState = if (isDefined(maybeDataPlayersPublicKey))
27+ then !(isDefined(maybeDataPlayersChoice))
28+ else false
29+let lockedStateTimeout = (height > (dataLockedAt + timeoutInBlocks))
30+let isLockedState = if (dataIsValidForLockedState)
31+ then !(lockedStateTimeout)
32+ else false
33+let isUserDecidedNotToPlayState = if (dataIsValidForLockedState)
34+ then lockedStateTimeout
35+ else false
36+let dataIsValidForPlayerRevealedState = if (isDefined(maybeDataPlayersChoice))
37+ then !(isDefined(maybeDataServersChoice))
38+ else false
39+let playerRevealedStateTimeout = if ((height > (dataLockedAt + (timeoutInBlocks * 2))))
40+ then (accountBalance >= (((playersPrize + donation) + dataTransactionFee) + transferTransactionFee))
41+ else false
42+let isPlayerRevealedHisChoiceState = if (dataIsValidForPlayerRevealedState)
43+ then !(playerRevealedStateTimeout)
44+ else false
45+let isServerDecidedNotToPlayState = if (dataIsValidForPlayerRevealedState)
46+ then playerRevealedStateTimeout
47+ else false
48+let isDataValidForWinnerIsDeterminedState = isDefined(maybeDataServersChoice)
49+let isBalanceValidForWinnerIsDeterminedState = (accountBalance >= ((playersPrize + donation) + transferTransactionFee))
50+let isWinnerIsDeterminedState = if (isDataValidForWinnerIsDeterminedState)
51+ then isBalanceValidForWinnerIsDeterminedState
52+ else false
53+let isPlayerDecidedNotToSendDonationState = if (isDataValidForWinnerIsDeterminedState)
54+ then !(isBalanceValidForWinnerIsDeterminedState)
55+ else false
56+match tx {
57+ case dtx: DataTransaction =>
58+ let payloadSize = size(dtx.data)
59+ let firstPayloadName = dtx.data[0].key
60+ let secondPayloadName = dtx.data[1].key
61+ let firstPayloadAsInteger = extract(getInteger(dtx.data, firstPayloadName))
62+ let secondPayloadAsString = extract(getString(dtx.data, secondPayloadName))
63+ let dataFeeIsOk = (dtx.fee == dataTransactionFee)
64+ if (if (isInitialState)
65+ then true
66+ else isUserDecidedNotToPlayState)
67+ then {
68+ let validLockedAtIsProvided = if ((firstPayloadName == "lockedAt"))
69+ then if ((height >= firstPayloadAsInteger))
70+ then (5 >= (height - firstPayloadAsInteger))
71+ else false
72+ else false
73+ let playersPublicKeyIsProvided = (secondPayloadName == "playersPublicKey")
74+ if (if (if (if (senderIsServer)
75+ then dataFeeIsOk
76+ else false)
77+ then validLockedAtIsProvided
78+ else false)
79+ then playersPublicKeyIsProvided
80+ else false)
81+ then (payloadSize == 2)
82+ else false
83+ }
84+ else if (isLockedState)
85+ then {
86+ let validPlayersChoiceIsProvided = if ((firstPayloadName == "playersChoice"))
87+ then if ((firstPayloadAsInteger >= 0))
88+ then (boxesCount > firstPayloadAsInteger)
89+ else false
90+ else false
91+ if (if (if (senderIsPlayer)
92+ then dataFeeIsOk
93+ else false)
94+ then validPlayersChoiceIsProvided
95+ else false)
96+ then (payloadSize == 1)
97+ else false
98+ }
99+ else if (isPlayerRevealedHisChoiceState)
100+ then {
101+ let validServerChoiceWasProvided = if ((firstPayloadName == "serversChoice"))
102+ then if ((firstPayloadAsInteger >= 0))
103+ then (boxesCount > firstPayloadAsInteger)
104+ else false
105+ else false
106+ let serversSaltWasProvided = (secondPayloadName == "serversSalt")
107+ let choiceAndSaltMatchesHardcodedValue = (keccak256(toBytes((toString(firstPayloadAsInteger) + secondPayloadAsString))) == enctyptedServersChoice)
108+ if (if (if (if (if (senderIsServer)
109+ then dataFeeIsOk
110+ else false)
111+ then validServerChoiceWasProvided
112+ else false)
113+ then serversSaltWasProvided
114+ else false)
115+ then choiceAndSaltMatchesHardcodedValue
116+ else false)
117+ then (payloadSize == 2)
118+ else false
119+ }
120+ else false
121+ case ttx: TransferTransaction =>
122+ let transferFeeIsOk = (ttx.fee == transferTransactionFee)
123+ if (isWinnerIsDeterminedState)
124+ then {
125+ let winnerAddress = if ((dataServersChoice == dataPlayersChoice))
126+ then playersAddress
127+ else serversAddress
128+ let prizeGoesToWinner = (ttx.recipient == winnerAddress)
129+ if (if (transferFeeIsOk)
130+ then prizeGoesToWinner
131+ else false)
132+ then (ttx.amount == (playersPrize + donation))
133+ else false
134+ }
135+ else if (isServerDecidedNotToPlayState)
136+ then {
137+ let recipientIsPlayer = (ttx.recipient == playersAddress)
138+ if (if (transferFeeIsOk)
139+ then recipientIsPlayer
140+ else false)
141+ then (ttx.amount == (playersPrize + donation))
142+ else false
143+ }
144+ else if (isPlayerDecidedNotToSendDonationState)
145+ then {
146+ let recipientIsServer = (ttx.recipient == serversAddress)
147+ if (if (transferFeeIsOk)
148+ then recipientIsServer
149+ else false)
150+ then (ttx.amount == playersPrize)
151+ else false
152+ }
153+ else false
154+ case _ =>
155+ false
156+}

github/deemru/w8io/026f985 
31.09 ms