tx · 5k9JpUfkXqAdMnEF82NyrowaCoF8TKeyArgiMxVfzn9T

3PBqyqCYX6UxGBB8vKJxCQdipZngffB7Su2:  -0.01000000 Waves

2019.01.18 18:23 [1356886] smart account 3PBqyqCYX6UxGBB8vKJxCQdipZngffB7Su2 > SELF 0.00000000 Waves

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

github/deemru/w8io/6500d08 
63.51 ms