2019.03.19 22:53 [1444826] smart account 3PLcgArihPynaoNahbUiiQwaKPN4eBBRP1p > SELF 0.00000000 Waves

{ "type": 13, "id": "GD8KtmhYZhBNNs2H4dPfhkHgYjCmdyvqnLNRK84mqkZ6", "fee": 1000000, "feeAssetId": null, "timestamp": 1553025261741, "version": 1, "sender": "3PLcgArihPynaoNahbUiiQwaKPN4eBBRP1p", "senderPublicKey": "Hm52sfuHSgqZgHSvHs1a8coRdmANeFor3LPbycJcx3Du", "proofs": [ "47myq15WgR21qz3DyMZACq2p4sm2ZJmkBjA9HEHfFiJVejsC7gBRKiozpDFbhew4d8doRfEWNHi5c7wimP9iQCSc" ], "script": "base64:AgQAAAACbWUIBQAAAAJ0eAAAAAZzZW5kZXIEAAAABXR4RmVlAAAAAAAACSfABAAAAAd0aW1lb3V0AAAAAAAAAAAKBAAAAAhsaWZlc3BhbgAAAAAAAAAAHgQAAAAHaW50MVZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAEAAAAAAAAAAAcEAAAAB2ludDJWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAACAAAAAAAAAAAHBAAAAAdpbnQzVmVjCQAAygAAAAIJAAGaAAAAAQAAAAAAAAAAAwAAAAAAAAAABwQAAAAHaW50NFZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAQAAAAAAAAAAAcEAAAAB2ludDVWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAAFAAAAAAAAAAAHBAAAABVzZXJ2ZXJDaG9pY2VIYXNoQnl0ZXMJAAJZAAAAAQIAAAAsR24yWmpYNmtVSzM0MkFOOHIxa2pDdmliNnJqY3dhQ3c2TVZzckJMNzZkUlAEAAAAD3NlcnZlclB1YmxpY0tleQkAAlkAAAABAgAAACw2ZktjbnBXTDR2M0txNTFpM2o2em9jcThuWmg2OFIyNDVDVGFra2VKTGNxRgQAAAADYmV0AAAAAABTck4ABAAAAAZzZXJ2ZXIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAD3NlcnZlclB1YmxpY0tleQQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAABnBheW91dAUAAAAHJG1hdGNoMAQAAAATcGF5T3V0QXNzZXRJZHNWYWxpZAMDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAGcGF5b3V0AAAAB2Fzc2V0SWQJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAZwYXlvdXQAAAAKZmVlQXNzZXRJZAcJAAAAAAAAAggFAAAABnBheW91dAAAAANmZWUFAAAABXR4RmVlBwQAAAALc2VydmVyVHR4SWQJAAGRAAAAAggFAAAABnBheW91dAAAAAZwcm9vZnMAAAAAAAAAAAAEAAAAC3BsYXllclR0eElkCQABkQAAAAIIBQAAAAZwYXlvdXQAAAAGcHJvb2ZzAAAAAAAAAAABBAAAAA1zZXJ2ZXJUdHhTaWduCQABkQAAAAIIBQAAAAZwYXlvdXQAAAAGcHJvb2ZzAAAAAAAAAAACAwUAAAATcGF5T3V0QXNzZXRJZHNWYWxpZAQAAAAHJG1hdGNoMQkAA+gAAAABBQAAAAtzZXJ2ZXJUdHhJZAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAJc2VydmVyVHR4BQAAAAckbWF0Y2gxBAAAAA5zdGFydGluZ0hlaWdodAkBAAAAB2V4dHJhY3QAAAABCQAD6QAAAAEFAAAAC3NlcnZlclR0eElkBAAAABB0b3RhbFNlcnZlckZ1bmRzCAUAAAAJc2VydmVyVHR4AAAABmFtb3VudAQAAAAQc2VydmVyRnVsbEF0dGFjaAgFAAAACXNlcnZlclR0eAAAAAphdHRhY2htZW50BAAAAA5kaWNlc0F0dGFjaFZlYwkAAMkAAAACBQAAABBzZXJ2ZXJGdWxsQXR0YWNoAAAAAAAAAAABBAAAAApkaWNlc0NvdW50AwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50MVZlYwAAAAAAAAAAAQMJAAAAAAAAAgUAAAAOZGljZXNBdHRhY2hWZWMFAAAAB2ludDJWZWMAAAAAAAAAAAIDCQAAAAAAAAIFAAAADmRpY2VzQXR0YWNoVmVjBQAAAAdpbnQzVmVjAAAAAAAAAAADAwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50NFZlYwAAAAAAAAAABAMJAAAAAAAAAgUAAAAOZGljZXNBdHRhY2hWZWMFAAAAB2ludDVWZWMAAAAAAAAAAAUAAAAAAAAAAAYEAAAAFXBsYXllclB1YmxpY1ZlY0F0dGFjaAkAAMoAAAACBQAAABBzZXJ2ZXJGdWxsQXR0YWNoAAAAAAAAAAABBAAAAAZwbGF5ZXIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAFXBsYXllclB1YmxpY1ZlY0F0dGFjaAMDCQAAZwAAAAIFAAAABmhlaWdodAUAAAAOc3RhcnRpbmdIZWlnaHQJAAAAAAAAAggFAAAACXNlcnZlclR0eAAAAAZzZW5kZXIFAAAABnNlcnZlcgcDCQAAZgAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA5zdGFydGluZ0hlaWdodAUAAAAIbGlmZXNwYW4EAAAADnNlcnZlclNpZ1ZhbGlkCQAB9AAAAAMIBQAAAAZwYXlvdXQAAAAJYm9keUJ5dGVzBQAAAA1zZXJ2ZXJUdHhTaWduBQAAAA9zZXJ2ZXJQdWJsaWNLZXkEAAAAF3JlY2lwaWVudFNlcnZlck9yUGxheWVyAwkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAUAAAAGc2VydmVyBgkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAUAAAAGcGxheWVyAwUAAAAOc2VydmVyU2lnVmFsaWQFAAAAF3JlY2lwaWVudFNlcnZlck9yUGxheWVyBwQAAAAHJG1hdGNoMgkAA+gAAAABBQAAAAtwbGF5ZXJUdHhJZAMJAAABAAAAAgUAAAAHJG1hdGNoMgIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAJcGxheWVyVHR4BQAAAAckbWF0Y2gyBAAAAA9wbGF5ZXJCZXRIZWlnaHQJAQAAAAdleHRyYWN0AAAAAQkAA+kAAAABBQAAAAtwbGF5ZXJUdHhJZAQAAAAOcGxheWVyQmV0VmFsaWQDAwMJAAAAAAAAAggFAAAACXBsYXllclR0eAAAAAZhbW91bnQFAAAAA2JldAkAAAAAAAACCAUAAAAJcGxheWVyVHR4AAAACXJlY2lwaWVudAUAAAACbWUHCQAAAAAAAAIIBQAAAAlwbGF5ZXJUdHgAAAAGc2VuZGVyBQAAAAZwbGF5ZXIHCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAJcGxheWVyVHR4AAAAB2Fzc2V0SWQHAwUAAAAOcGxheWVyQmV0VmFsaWQDCQAAZgAAAAIJAABlAAAAAgUAAAAPcGxheWVyQmV0SGVpZ2h0BQAAAA5zdGFydGluZ0hlaWdodAUAAAAHdGltZW91dAkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAUAAAAGc2VydmVyAwMDAwkAAGYAAAACCQAAZAAAAAIFAAAAEHRvdGFsU2VydmVyRnVuZHMFAAAAA2JldAkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAAAm1lBgkAAGYAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAAPcGxheWVyQmV0SGVpZ2h0BQAAAAd0aW1lb3V0BgkAAGYAAAACBQAAAApkaWNlc0NvdW50AAAAAAAAAAAFBgkAAGYAAAACAAAAAAAAAAABBQAAAApkaWNlc0NvdW50CQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZwbGF5ZXIEAAAAFnNlcnZlckNob2ljZUFuZFNhbHRWZWMIBQAAAAZwYXlvdXQAAAAKYXR0YWNobWVudAQAAAAPcGxheWVyQ2hvaWNlVmVjCAUAAAAJcGxheWVyVHR4AAAACmF0dGFjaG1lbnQEAAAAAXMJAADIAAAAAQUAAAAPcGxheWVyQ2hvaWNlVmVjBAAAAA9zZXJ2ZXJDaG9pY2VWZWMJAADJAAAAAgUAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwAAAAAAAAAAAQQAAAARc2VydmVyQ2hvaWNlVmFsaWQDAwMDAwkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABMQYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATIGCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAEzBgkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABNAYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATUGCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAE2BAAAAApwbGF5ZXJXaW5zAwkBAAAAASEAAAABBQAAABFzZXJ2ZXJDaG9pY2VWYWxpZAYDCQAAAAAAAAIFAAAAAXMFAAAACmRpY2VzQ291bnQDAwMDAwMJAABnAAAAAgUAAAABcwAAAAAAAAAAAQkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAAAAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAAAgkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAABAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAAAwkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAACAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAABAkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAADAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAABQkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAAEAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAABgkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAAFAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBwQAAAAOcmVjaXBpZW50VmFsaWQJAAAAAAAAAggFAAAABnBheW91dAAAAAlyZWNpcGllbnQDBQAAAApwbGF5ZXJXaW5zBQAAAAZwbGF5ZXIFAAAABnNlcnZlcgQAAAAOc2VydmVyU2lnVmFsaWQJAAH0AAAAAwgFAAAABnBheW91dAAAAAlib2R5Qnl0ZXMFAAAADXNlcnZlclR0eFNpZ24FAAAAD3NlcnZlclB1YmxpY0tleQQAAAAJaGFzaFZhbGlkCQAAAAAAAAIJAAH1AAAAAQUAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwUAAAAVc2VydmVyQ2hvaWNlSGFzaEJ5dGVzBAAAAA1oYXNoU2l6ZVZhbGlkCQAAAAAAAAIJAADIAAAAAQUAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwAAAAAAAAAAJgMDAwUAAAAOcmVjaXBpZW50VmFsaWQFAAAADnNlcnZlclNpZ1ZhbGlkBwUAAAAJaGFzaFZhbGlkBwUAAAANaGFzaFNpemVWYWxpZAcHCQAAAgAAAAECAAAAJEludmFsaWQgcGxheWVyIHRyYW5zZmVyIGlkIGluIHByb29mcwcJAAACAAAAAQIAAAAkSW52YWxpZCBzZXJ2ZXIgdHJhbnNmZXIgaWQgaW4gcHJvb2ZzBwkAAAIAAAABAgAAACRUcmFuc2ZlciB0cmFuc2FjdGlvbiBpcyBhbGxvd2VkIG9ubHkum60H", "chainId": 87, "height": 1444826, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 2 #-}
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let me = tx.sender
4+let txFee = 600000
5+let timeout = 10
6+let lifespan = 30
7+let int1Vec = drop(toBytes(1), 7)
8+let int2Vec = drop(toBytes(2), 7)
9+let int3Vec = drop(toBytes(3), 7)
10+let int4Vec = drop(toBytes(4), 7)
11+let int5Vec = drop(toBytes(5), 7)
12+let serverChoiceHashBytes = fromBase58String("Gn2ZjX6kUK342AN8r1kjCvib6rjcwaCw6MVsrBL76dRP")
13+let serverPublicKey = fromBase58String("6fKcnpWL4v3Kq51i3j6zocq8nZh68R245CTakkeJLcqF")
14+let bet = 1400000000
15+let server = addressFromPublicKey(serverPublicKey)
16+match tx {
17+ case payout: TransferTransaction =>
18+ let payOutAssetIdsValid = if (if (!(isDefined(payout.assetId)))
19+ then !(isDefined(payout.feeAssetId))
20+ else false)
21+ then (payout.fee == txFee)
22+ else false
23+ let serverTtxId = payout.proofs[0]
24+ let playerTtxId = payout.proofs[1]
25+ let serverTtxSign = payout.proofs[2]
26+ if (payOutAssetIdsValid)
27+ then match transactionById(serverTtxId) {
28+ case serverTtx: TransferTransaction =>
29+ let startingHeight = extract(transactionHeightById(serverTtxId))
30+ let totalServerFunds = serverTtx.amount
31+ let serverFullAttach = serverTtx.attachment
32+ let dicesAttachVec = take(serverFullAttach, 1)
33+ let dicesCount = if ((dicesAttachVec == int1Vec))
34+ then 1
35+ else if ((dicesAttachVec == int2Vec))
36+ then 2
37+ else if ((dicesAttachVec == int3Vec))
38+ then 3
39+ else if ((dicesAttachVec == int4Vec))
40+ then 4
41+ else if ((dicesAttachVec == int5Vec))
42+ then 5
43+ else 6
44+ let playerPublicVecAttach = drop(serverFullAttach, 1)
45+ let player = addressFromPublicKey(playerPublicVecAttach)
46+ if (if ((height >= startingHeight))
47+ then (serverTtx.sender == server)
48+ else false)
49+ then if (((height - startingHeight) > lifespan))
50+ then {
51+ let serverSigValid = sigVerify(payout.bodyBytes, serverTtxSign, serverPublicKey)
52+ let recipientServerOrPlayer = if ((payout.recipient == server))
53+ then true
54+ else (payout.recipient == player)
55+ if (serverSigValid)
56+ then recipientServerOrPlayer
57+ else false
58+ }
59+ else match transactionById(playerTtxId) {
60+ case playerTtx: TransferTransaction =>
61+ let playerBetHeight = extract(transactionHeightById(playerTtxId))
62+ let playerBetValid = if (if (if ((playerTtx.amount == bet))
63+ then (playerTtx.recipient == me)
64+ else false)
65+ then (playerTtx.sender == player)
66+ else false)
67+ then !(isDefined(playerTtx.assetId))
68+ else false
69+ if (playerBetValid)
70+ then if (((playerBetHeight - startingHeight) > timeout))
71+ then (payout.recipient == server)
72+ else if (if (if (if (((totalServerFunds + bet) > wavesBalance(me)))
73+ then true
74+ else ((height - playerBetHeight) > timeout))
75+ then true
76+ else (dicesCount > 5))
77+ then true
78+ else (1 > dicesCount))
79+ then (payout.recipient == player)
80+ else {
81+ let serverChoiceAndSaltVec = payout.attachment
82+ let playerChoiceVec = playerTtx.attachment
83+ let s = size(playerChoiceVec)
84+ let serverChoiceVec = take(serverChoiceAndSaltVec, 1)
85+ let serverChoiceValid = if (if (if (if (if ((serverChoiceVec == toBytes("1")))
86+ then true
87+ else (serverChoiceVec == toBytes("2")))
88+ then true
89+ else (serverChoiceVec == toBytes("3")))
90+ then true
91+ else (serverChoiceVec == toBytes("4")))
92+ then true
93+ else (serverChoiceVec == toBytes("5")))
94+ then true
95+ else (serverChoiceVec == toBytes("6"))
96+ let playerWins = if (!(serverChoiceValid))
97+ then true
98+ else if ((s == dicesCount))
99+ then if (if (if (if (if (if ((s >= 1))
100+ then (take(drop(playerChoiceVec, 0), 1) == serverChoiceVec)
101+ else false)
102+ then true
103+ else if ((s >= 2))
104+ then (take(drop(playerChoiceVec, 1), 1) == serverChoiceVec)
105+ else false)
106+ then true
107+ else if ((s >= 3))
108+ then (take(drop(playerChoiceVec, 2), 1) == serverChoiceVec)
109+ else false)
110+ then true
111+ else if ((s >= 4))
112+ then (take(drop(playerChoiceVec, 3), 1) == serverChoiceVec)
113+ else false)
114+ then true
115+ else if ((s >= 5))
116+ then (take(drop(playerChoiceVec, 4), 1) == serverChoiceVec)
117+ else false)
118+ then true
119+ else if ((s >= 6))
120+ then (take(drop(playerChoiceVec, 5), 1) == serverChoiceVec)
121+ else false
122+ else false
123+ let recipientValid = (payout.recipient == (if (playerWins)
124+ then player
125+ else server))
126+ let serverSigValid = sigVerify(payout.bodyBytes, serverTtxSign, serverPublicKey)
127+ let hashValid = (keccak256(serverChoiceAndSaltVec) == serverChoiceHashBytes)
128+ let hashSizeValid = (size(serverChoiceAndSaltVec) == 38)
129+ if (if (if (recipientValid)
130+ then serverSigValid
131+ else false)
132+ then hashValid
133+ else false)
134+ then hashSizeValid
135+ else false
136+ }
137+ else false
138+ case _ =>
139+ throw("Invalid player transfer id in proofs")
140+ }
141+ else false
142+ case _ =>
143+ throw("Invalid server transfer id in proofs")
144+ }
145+ else false
146+ case _ =>
147+ throw("Transfer transaction is allowed only")
148+}

github/deemru/w8io/786bc32 
68.39 ms