tx · HNq9CTN16rBJc8gpz69Qc1wJFhAdWNjuvpZF5BXJVX92

3NAanbcN7JiXAB4nyAk6gkNhZjYahLpvzLZ:  -0.01000000 Waves

2019.01.16 18:23 [452743] smart account 3NAanbcN7JiXAB4nyAk6gkNhZjYahLpvzLZ > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
44.87 ms