tx · DLfJMYQToRdwy4oNyDiB6iL8HymPtu1iKSve4hUjXwFh

3PHWQ7KxM6DXS7mPJtcLkmbnyKmufqzBpyE:  -0.01000000 Waves

2019.03.21 12:31 [1447097] smart account 3PHWQ7KxM6DXS7mPJtcLkmbnyKmufqzBpyE > SELF 0.00000000 Waves

{ "type": 13, "id": "DLfJMYQToRdwy4oNyDiB6iL8HymPtu1iKSve4hUjXwFh", "fee": 1000000, "feeAssetId": null, "timestamp": 1553160708618, "version": 1, "sender": "3PHWQ7KxM6DXS7mPJtcLkmbnyKmufqzBpyE", "senderPublicKey": "2ozoRozEXSWEtjpFv7w1wiPRPgukjpvTrZLp5AqS2i2B", "proofs": [ "5dsXcL8kt649qxwVycrPGrrorzFvqpLFEDroavpiNaWRRni83fRSGf7B8A9fDEjtG9ttY2d43MvkXUps33DQ72v9" ], "script": "base64:AgQAAAACbWUIBQAAAAJ0eAAAAAZzZW5kZXIEAAAABXR4RmVlAAAAAAAACSfABAAAAAd0aW1lb3V0AAAAAAAAAAAKBAAAAAhsaWZlc3BhbgAAAAAAAAAAHgQAAAAHaW50MVZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAEAAAAAAAAAAAcEAAAAB2ludDJWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAACAAAAAAAAAAAHBAAAAAdpbnQzVmVjCQAAygAAAAIJAAGaAAAAAQAAAAAAAAAAAwAAAAAAAAAABwQAAAAHaW50NFZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAQAAAAAAAAAAAcEAAAAB2ludDVWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAAFAAAAAAAAAAAHBAAAABVzZXJ2ZXJDaG9pY2VIYXNoQnl0ZXMJAAJZAAAAAQIAAAAsOFJQWm1YbUo0blpQZE1mVFViOG84THdlbVFQQXNDRUwyaGExUjhmbVFXeDYEAAAAD3NlcnZlclB1YmxpY0tleQkAAlkAAAABAgAAACw2ZktjbnBXTDR2M0txNTFpM2o2em9jcThuWmg2OFIyNDVDVGFra2VKTGNxRgQAAAADYmV0AAAAAAAX14QABAAAAAZzZXJ2ZXIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAD3NlcnZlclB1YmxpY0tleQQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAABnBheW91dAUAAAAHJG1hdGNoMAQAAAATcGF5T3V0QXNzZXRJZHNWYWxpZAMDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAGcGF5b3V0AAAAB2Fzc2V0SWQJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAZwYXlvdXQAAAAKZmVlQXNzZXRJZAcJAAAAAAAAAggFAAAABnBheW91dAAAAANmZWUFAAAABXR4RmVlBwQAAAALc2VydmVyVHR4SWQJAAGRAAAAAggFAAAABnBheW91dAAAAAZwcm9vZnMAAAAAAAAAAAAEAAAAC3BsYXllclR0eElkCQABkQAAAAIIBQAAAAZwYXlvdXQAAAAGcHJvb2ZzAAAAAAAAAAABBAAAAA1zZXJ2ZXJUdHhTaWduCQABkQAAAAIIBQAAAAZwYXlvdXQAAAAGcHJvb2ZzAAAAAAAAAAACAwUAAAATcGF5T3V0QXNzZXRJZHNWYWxpZAQAAAAHJG1hdGNoMQkAA+gAAAABBQAAAAtzZXJ2ZXJUdHhJZAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAJc2VydmVyVHR4BQAAAAckbWF0Y2gxBAAAAA5zdGFydGluZ0hlaWdodAkBAAAAB2V4dHJhY3QAAAABCQAD6QAAAAEFAAAAC3NlcnZlclR0eElkBAAAABB0b3RhbFNlcnZlckZ1bmRzCAUAAAAJc2VydmVyVHR4AAAABmFtb3VudAQAAAAQc2VydmVyRnVsbEF0dGFjaAgFAAAACXNlcnZlclR0eAAAAAphdHRhY2htZW50BAAAAA5kaWNlc0F0dGFjaFZlYwkAAMkAAAACBQAAABBzZXJ2ZXJGdWxsQXR0YWNoAAAAAAAAAAABBAAAAApkaWNlc0NvdW50AwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50MVZlYwAAAAAAAAAAAQMJAAAAAAAAAgUAAAAOZGljZXNBdHRhY2hWZWMFAAAAB2ludDJWZWMAAAAAAAAAAAIDCQAAAAAAAAIFAAAADmRpY2VzQXR0YWNoVmVjBQAAAAdpbnQzVmVjAAAAAAAAAAADAwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50NFZlYwAAAAAAAAAABAMJAAAAAAAAAgUAAAAOZGljZXNBdHRhY2hWZWMFAAAAB2ludDVWZWMAAAAAAAAAAAUAAAAAAAAAAAYEAAAAFXBsYXllclB1YmxpY1ZlY0F0dGFjaAkAAMoAAAACBQAAABBzZXJ2ZXJGdWxsQXR0YWNoAAAAAAAAAAABBAAAAAZwbGF5ZXIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAFXBsYXllclB1YmxpY1ZlY0F0dGFjaAMDAwkAAGcAAAACBQAAAAZoZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0CQAAAAAAAAIIBQAAAAlzZXJ2ZXJUdHgAAAAGc2VuZGVyBQAAAAZzZXJ2ZXIHCQAAAAAAAAIIBQAAAAlzZXJ2ZXJUdHgAAAAJcmVjaXBpZW50BQAAAAJtZQcDCQAAZgAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA5zdGFydGluZ0hlaWdodAUAAAAIbGlmZXNwYW4EAAAADnNlcnZlclNpZ1ZhbGlkCQAB9AAAAAMIBQAAAAZwYXlvdXQAAAAJYm9keUJ5dGVzBQAAAA1zZXJ2ZXJUdHhTaWduBQAAAA9zZXJ2ZXJQdWJsaWNLZXkEAAAAF3JlY2lwaWVudFNlcnZlck9yUGxheWVyAwkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAUAAAAGc2VydmVyBgkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAUAAAAGcGxheWVyAwUAAAAOc2VydmVyU2lnVmFsaWQFAAAAF3JlY2lwaWVudFNlcnZlck9yUGxheWVyBwQAAAAHJG1hdGNoMgkAA+gAAAABBQAAAAtwbGF5ZXJUdHhJZAMJAAABAAAAAgUAAAAHJG1hdGNoMgIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAJcGxheWVyVHR4BQAAAAckbWF0Y2gyBAAAAA9wbGF5ZXJCZXRIZWlnaHQJAQAAAAdleHRyYWN0AAAAAQkAA+kAAAABBQAAAAtwbGF5ZXJUdHhJZAQAAAAOcGxheWVyQmV0VmFsaWQDAwMJAAAAAAAAAggFAAAACXBsYXllclR0eAAAAAZhbW91bnQFAAAAA2JldAkAAAAAAAACCAUAAAAJcGxheWVyVHR4AAAACXJlY2lwaWVudAUAAAACbWUHCQAAAAAAAAIIBQAAAAlwbGF5ZXJUdHgAAAAGc2VuZGVyBQAAAAZwbGF5ZXIHCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAJcGxheWVyVHR4AAAAB2Fzc2V0SWQHAwMFAAAADnBsYXllckJldFZhbGlkCQAAAAAAAAIIBQAAAAlwbGF5ZXJUdHgAAAAJcmVjaXBpZW50BQAAAAJtZQcDCQAAZgAAAAIJAABlAAAAAgUAAAAPcGxheWVyQmV0SGVpZ2h0BQAAAA5zdGFydGluZ0hlaWdodAUAAAAHdGltZW91dAkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAUAAAAGc2VydmVyAwMDAwkAAGYAAAACCQAAZAAAAAIFAAAAEHRvdGFsU2VydmVyRnVuZHMFAAAAA2JldAkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAAAm1lBgMJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAAD3BsYXllckJldEhlaWdodAUAAAAHdGltZW91dAkAAGcAAAACCQAAZQAAAAIFAAAAD3BsYXllckJldEhlaWdodAUAAAAOc3RhcnRpbmdIZWlnaHQA//////////4HBgkAAGYAAAACBQAAAApkaWNlc0NvdW50AAAAAAAAAAAFBgkAAGYAAAACAAAAAAAAAAABBQAAAApkaWNlc0NvdW50CQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZwbGF5ZXIEAAAAFnNlcnZlckNob2ljZUFuZFNhbHRWZWMIBQAAAAZwYXlvdXQAAAAKYXR0YWNobWVudAQAAAAPcGxheWVyQ2hvaWNlVmVjCAUAAAAJcGxheWVyVHR4AAAACmF0dGFjaG1lbnQEAAAAAXMJAADIAAAAAQUAAAAPcGxheWVyQ2hvaWNlVmVjBAAAAA9zZXJ2ZXJDaG9pY2VWZWMJAADJAAAAAgUAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwAAAAAAAAAAAQQAAAARc2VydmVyQ2hvaWNlVmFsaWQDAwMDAwkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABMQYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATIGCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAEzBgkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABNAYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATUGCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAE2BAAAAApwbGF5ZXJXaW5zAwkBAAAAASEAAAABBQAAABFzZXJ2ZXJDaG9pY2VWYWxpZAYDCQAAAAAAAAIFAAAAAXMFAAAACmRpY2VzQ291bnQDAwMDAwMJAABnAAAAAgUAAAABcwAAAAAAAAAAAQkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAAAAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAAAgkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAABAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAAAwkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAACAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAABAkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAADAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAABQkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAAEAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBgMJAABnAAAAAgUAAAABcwAAAAAAAAAABgkAAAAAAAACCQAAyQAAAAIJAADKAAAAAgUAAAAPcGxheWVyQ2hvaWNlVmVjAAAAAAAAAAAFAAAAAAAAAAABBQAAAA9zZXJ2ZXJDaG9pY2VWZWMHBwQAAAAOcmVjaXBpZW50VmFsaWQJAAAAAAAAAggFAAAABnBheW91dAAAAAlyZWNpcGllbnQDBQAAAApwbGF5ZXJXaW5zBQAAAAZwbGF5ZXIFAAAABnNlcnZlcgQAAAAOc2VydmVyU2lnVmFsaWQJAAH0AAAAAwgFAAAABnBheW91dAAAAAlib2R5Qnl0ZXMFAAAADXNlcnZlclR0eFNpZ24FAAAAD3NlcnZlclB1YmxpY0tleQQAAAAJaGFzaFZhbGlkCQAAAAAAAAIJAAH1AAAAAQUAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwUAAAAVc2VydmVyQ2hvaWNlSGFzaEJ5dGVzBAAAAA1oYXNoU2l6ZVZhbGlkCQAAAAAAAAIJAADIAAAAAQUAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwAAAAAAAAAAJgMDAwUAAAAOcmVjaXBpZW50VmFsaWQFAAAADnNlcnZlclNpZ1ZhbGlkBwUAAAAJaGFzaFZhbGlkBwUAAAANaGFzaFNpemVWYWxpZAcHCQAAAgAAAAECAAAAJEludmFsaWQgcGxheWVyIHRyYW5zZmVyIGlkIGluIHByb29mcwcJAAACAAAAAQIAAAAkSW52YWxpZCBzZXJ2ZXIgdHJhbnNmZXIgaWQgaW4gcHJvb2ZzBwkAAAIAAAABAgAAACRUcmFuc2ZlciB0cmFuc2FjdGlvbiBpcyBhbGxvd2VkIG9ubHl09zHM", "chainId": 87, "height": 1447097, "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("8RPZmXmJ4nZPdMfTUb8o8LwemQPAsCEL2ha1R8fmQWx6")
13+let serverPublicKey = fromBase58String("6fKcnpWL4v3Kq51i3j6zocq8nZh68R245CTakkeJLcqF")
14+let bet = 400000000
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 (if ((height >= startingHeight))
47+ then (serverTtx.sender == server)
48+ else false)
49+ then (serverTtx.recipient == me)
50+ else false)
51+ then if (((height - startingHeight) > lifespan))
52+ then {
53+ let serverSigValid = sigVerify(payout.bodyBytes, serverTtxSign, serverPublicKey)
54+ let recipientServerOrPlayer = if ((payout.recipient == server))
55+ then true
56+ else (payout.recipient == player)
57+ if (serverSigValid)
58+ then recipientServerOrPlayer
59+ else false
60+ }
61+ else match transactionById(playerTtxId) {
62+ case playerTtx: TransferTransaction =>
63+ let playerBetHeight = extract(transactionHeightById(playerTtxId))
64+ let playerBetValid = if (if (if ((playerTtx.amount == bet))
65+ then (playerTtx.recipient == me)
66+ else false)
67+ then (playerTtx.sender == player)
68+ else false)
69+ then !(isDefined(playerTtx.assetId))
70+ else false
71+ if (if (playerBetValid)
72+ then (playerTtx.recipient == me)
73+ else false)
74+ then if (((playerBetHeight - startingHeight) > timeout))
75+ then (payout.recipient == server)
76+ else if (if (if (if (((totalServerFunds + bet) > wavesBalance(me)))
77+ then true
78+ else if (((height - playerBetHeight) > timeout))
79+ then ((playerBetHeight - startingHeight) >= -2)
80+ else false)
81+ then true
82+ else (dicesCount > 5))
83+ then true
84+ else (1 > dicesCount))
85+ then (payout.recipient == player)
86+ else {
87+ let serverChoiceAndSaltVec = payout.attachment
88+ let playerChoiceVec = playerTtx.attachment
89+ let s = size(playerChoiceVec)
90+ let serverChoiceVec = take(serverChoiceAndSaltVec, 1)
91+ let serverChoiceValid = if (if (if (if (if ((serverChoiceVec == toBytes("1")))
92+ then true
93+ else (serverChoiceVec == toBytes("2")))
94+ then true
95+ else (serverChoiceVec == toBytes("3")))
96+ then true
97+ else (serverChoiceVec == toBytes("4")))
98+ then true
99+ else (serverChoiceVec == toBytes("5")))
100+ then true
101+ else (serverChoiceVec == toBytes("6"))
102+ let playerWins = if (!(serverChoiceValid))
103+ then true
104+ else if ((s == dicesCount))
105+ then if (if (if (if (if (if ((s >= 1))
106+ then (take(drop(playerChoiceVec, 0), 1) == serverChoiceVec)
107+ else false)
108+ then true
109+ else if ((s >= 2))
110+ then (take(drop(playerChoiceVec, 1), 1) == serverChoiceVec)
111+ else false)
112+ then true
113+ else if ((s >= 3))
114+ then (take(drop(playerChoiceVec, 2), 1) == serverChoiceVec)
115+ else false)
116+ then true
117+ else if ((s >= 4))
118+ then (take(drop(playerChoiceVec, 3), 1) == serverChoiceVec)
119+ else false)
120+ then true
121+ else if ((s >= 5))
122+ then (take(drop(playerChoiceVec, 4), 1) == serverChoiceVec)
123+ else false)
124+ then true
125+ else if ((s >= 6))
126+ then (take(drop(playerChoiceVec, 5), 1) == serverChoiceVec)
127+ else false
128+ else false
129+ let recipientValid = (payout.recipient == (if (playerWins)
130+ then player
131+ else server))
132+ let serverSigValid = sigVerify(payout.bodyBytes, serverTtxSign, serverPublicKey)
133+ let hashValid = (keccak256(serverChoiceAndSaltVec) == serverChoiceHashBytes)
134+ let hashSizeValid = (size(serverChoiceAndSaltVec) == 38)
135+ if (if (if (recipientValid)
136+ then serverSigValid
137+ else false)
138+ then hashValid
139+ else false)
140+ then hashSizeValid
141+ else false
142+ }
143+ else false
144+ case _ =>
145+ throw("Invalid player transfer id in proofs")
146+ }
147+ else false
148+ case _ =>
149+ throw("Invalid server transfer id in proofs")
150+ }
151+ else false
152+ case _ =>
153+ throw("Transfer transaction is allowed only")
154+}

github/deemru/w8io/3ef1775 
44.26 ms