tx · 2XfuSq2VAmFfhmNP8YED7kXFAuc9v8xsaLa874MkBMbW

3PGDVaX8XbS4QJDGZ4KCaiHJsHAmMtpsnoq:  -0.01000000 Waves

2019.03.21 03:35 [1446566] smart account 3PGDVaX8XbS4QJDGZ4KCaiHJsHAmMtpsnoq > SELF 0.00000000 Waves

{ "type": 13, "id": "2XfuSq2VAmFfhmNP8YED7kXFAuc9v8xsaLa874MkBMbW", "fee": 1000000, "feeAssetId": null, "timestamp": 1553128595759, "version": 1, "sender": "3PGDVaX8XbS4QJDGZ4KCaiHJsHAmMtpsnoq", "senderPublicKey": "2YVmdoVUEqFGQ42zy3Q8GNxtyP6oKAZ4QdfPEqhXNDuz", "proofs": [ "5w69nxyUmBDnNTHbfBRNRPK3VCJAo2BGCkFCCUhx7F6wH1ChtoQm58LUXZiZHmrYAgf9omCpg7Y7i3Z6Ge8xtoj3" ], "script": "base64:AgQAAAACbWUIBQAAAAJ0eAAAAAZzZW5kZXIEAAAABXR4RmVlAAAAAAAACSfABAAAAAd0aW1lb3V0AAAAAAAAAAAKBAAAAAhsaWZlc3BhbgAAAAAAAAAAHgQAAAAHaW50MVZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAEAAAAAAAAAAAcEAAAAB2ludDJWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAACAAAAAAAAAAAHBAAAAAdpbnQzVmVjCQAAygAAAAIJAAGaAAAAAQAAAAAAAAAAAwAAAAAAAAAABwQAAAAHaW50NFZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAQAAAAAAAAAAAcEAAAAB2ludDVWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAAFAAAAAAAAAAAHBAAAABVzZXJ2ZXJDaG9pY2VIYXNoQnl0ZXMJAAJZAAAAAQIAAAArWGMxREFmQWRIVzc2ckdxRjlpb3FyRllQMXdRbzVoVEM1cWRCdXo2RXppbwQAAAAPc2VydmVyUHVibGljS2V5CQACWQAAAAECAAAALDZmS2NucFdMNHYzS3E1MWkzajZ6b2NxOG5aaDY4UjI0NUNUYWtrZUpMY3FGBAAAAANiZXQAAAAAAAX14QAEAAAABnNlcnZlcgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAPc2VydmVyUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAGcGF5b3V0BQAAAAckbWF0Y2gwBAAAABNwYXlPdXRBc3NldElkc1ZhbGlkAwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAZwYXlvdXQAAAAHYXNzZXRJZAkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAABnBheW91dAAAAApmZWVBc3NldElkBwkAAAAAAAACCAUAAAAGcGF5b3V0AAAAA2ZlZQUAAAAFdHhGZWUHBAAAAAtzZXJ2ZXJUdHhJZAkAAZEAAAACCAUAAAAGcGF5b3V0AAAABnByb29mcwAAAAAAAAAAAAQAAAALcGxheWVyVHR4SWQJAAGRAAAAAggFAAAABnBheW91dAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAADXNlcnZlclR0eFNpZ24JAAGRAAAAAggFAAAABnBheW91dAAAAAZwcm9vZnMAAAAAAAAAAAIDBQAAABNwYXlPdXRBc3NldElkc1ZhbGlkBAAAAAckbWF0Y2gxCQAD6AAAAAEFAAAAC3NlcnZlclR0eElkAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAlzZXJ2ZXJUdHgFAAAAByRtYXRjaDEEAAAADnN0YXJ0aW5nSGVpZ2h0CQEAAAAHZXh0cmFjdAAAAAEJAAPpAAAAAQUAAAALc2VydmVyVHR4SWQEAAAAEHRvdGFsU2VydmVyRnVuZHMIBQAAAAlzZXJ2ZXJUdHgAAAAGYW1vdW50BAAAABBzZXJ2ZXJGdWxsQXR0YWNoCAUAAAAJc2VydmVyVHR4AAAACmF0dGFjaG1lbnQEAAAADmRpY2VzQXR0YWNoVmVjCQAAyQAAAAIFAAAAEHNlcnZlckZ1bGxBdHRhY2gAAAAAAAAAAAEEAAAACmRpY2VzQ291bnQDCQAAAAAAAAIFAAAADmRpY2VzQXR0YWNoVmVjBQAAAAdpbnQxVmVjAAAAAAAAAAABAwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50MlZlYwAAAAAAAAAAAgMJAAAAAAAAAgUAAAAOZGljZXNBdHRhY2hWZWMFAAAAB2ludDNWZWMAAAAAAAAAAAMDCQAAAAAAAAIFAAAADmRpY2VzQXR0YWNoVmVjBQAAAAdpbnQ0VmVjAAAAAAAAAAAEAwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50NVZlYwAAAAAAAAAABQAAAAAAAAAABgQAAAAVcGxheWVyUHVibGljVmVjQXR0YWNoCQAAygAAAAIFAAAAEHNlcnZlckZ1bGxBdHRhY2gAAAAAAAAAAAEEAAAABnBsYXllcgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAVcGxheWVyUHVibGljVmVjQXR0YWNoAwMDCQAAZwAAAAIFAAAABmhlaWdodAUAAAAOc3RhcnRpbmdIZWlnaHQJAAAAAAAAAggFAAAACXNlcnZlclR0eAAAAAZzZW5kZXIFAAAABnNlcnZlcgcJAAAAAAAAAggFAAAACXNlcnZlclR0eAAAAAlyZWNpcGllbnQFAAAAAm1lBwMJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0BQAAAAhsaWZlc3BhbgQAAAAOc2VydmVyU2lnVmFsaWQJAAH0AAAAAwgFAAAABnBheW91dAAAAAlib2R5Qnl0ZXMFAAAADXNlcnZlclR0eFNpZ24FAAAAD3NlcnZlclB1YmxpY0tleQQAAAAXcmVjaXBpZW50U2VydmVyT3JQbGF5ZXIDCQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZzZXJ2ZXIGCQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZwbGF5ZXIDBQAAAA5zZXJ2ZXJTaWdWYWxpZAUAAAAXcmVjaXBpZW50U2VydmVyT3JQbGF5ZXIHBAAAAAckbWF0Y2gyCQAD6AAAAAEFAAAAC3BsYXllclR0eElkAwkAAAEAAAACBQAAAAckbWF0Y2gyAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAlwbGF5ZXJUdHgFAAAAByRtYXRjaDIEAAAAD3BsYXllckJldEhlaWdodAkBAAAAB2V4dHJhY3QAAAABCQAD6QAAAAEFAAAAC3BsYXllclR0eElkBAAAAA5wbGF5ZXJCZXRWYWxpZAMDAwkAAAAAAAACCAUAAAAJcGxheWVyVHR4AAAABmFtb3VudAUAAAADYmV0CQAAAAAAAAIIBQAAAAlwbGF5ZXJUdHgAAAAJcmVjaXBpZW50BQAAAAJtZQcJAAAAAAAAAggFAAAACXBsYXllclR0eAAAAAZzZW5kZXIFAAAABnBsYXllcgcJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAlwbGF5ZXJUdHgAAAAHYXNzZXRJZAcDAwUAAAAOcGxheWVyQmV0VmFsaWQJAAAAAAAAAggFAAAACXBsYXllclR0eAAAAAlyZWNpcGllbnQFAAAAAm1lBwMJAABmAAAAAgkAAGUAAAACBQAAAA9wbGF5ZXJCZXRIZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0BQAAAAd0aW1lb3V0CQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZzZXJ2ZXIDAwMDCQAAZgAAAAIJAABkAAAAAgUAAAAQdG90YWxTZXJ2ZXJGdW5kcwUAAAADYmV0CQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAACbWUGCQAAZgAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA9wbGF5ZXJCZXRIZWlnaHQFAAAAB3RpbWVvdXQGCQAAZgAAAAIFAAAACmRpY2VzQ291bnQAAAAAAAAAAAUGCQAAZgAAAAIAAAAAAAAAAAEFAAAACmRpY2VzQ291bnQJAAAAAAAAAggFAAAABnBheW91dAAAAAlyZWNpcGllbnQFAAAABnBsYXllcgQAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwgFAAAABnBheW91dAAAAAphdHRhY2htZW50BAAAAA9wbGF5ZXJDaG9pY2VWZWMIBQAAAAlwbGF5ZXJUdHgAAAAKYXR0YWNobWVudAQAAAABcwkAAMgAAAABBQAAAA9wbGF5ZXJDaG9pY2VWZWMEAAAAD3NlcnZlckNob2ljZVZlYwkAAMkAAAACBQAAABZzZXJ2ZXJDaG9pY2VBbmRTYWx0VmVjAAAAAAAAAAABBAAAABFzZXJ2ZXJDaG9pY2VWYWxpZAMDAwMDCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAExBgkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABMgYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATMGCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAE0BgkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABNQYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATYEAAAACnBsYXllcldpbnMDCQEAAAABIQAAAAEFAAAAEXNlcnZlckNob2ljZVZhbGlkBgMJAAAAAAAAAgUAAAABcwUAAAAKZGljZXNDb3VudAMDAwMDAwkAAGcAAAACBQAAAAFzAAAAAAAAAAABCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAAAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAACCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAEAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAADCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAIAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAAECQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAMAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAAFCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAQAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAAGCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAUAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcHBAAAAA5yZWNpcGllbnRWYWxpZAkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAMFAAAACnBsYXllcldpbnMFAAAABnBsYXllcgUAAAAGc2VydmVyBAAAAA5zZXJ2ZXJTaWdWYWxpZAkAAfQAAAADCAUAAAAGcGF5b3V0AAAACWJvZHlCeXRlcwUAAAANc2VydmVyVHR4U2lnbgUAAAAPc2VydmVyUHVibGljS2V5BAAAAAloYXNoVmFsaWQJAAAAAAAAAgkAAfUAAAABBQAAABZzZXJ2ZXJDaG9pY2VBbmRTYWx0VmVjBQAAABVzZXJ2ZXJDaG9pY2VIYXNoQnl0ZXMEAAAADWhhc2hTaXplVmFsaWQJAAAAAAAAAgkAAMgAAAABBQAAABZzZXJ2ZXJDaG9pY2VBbmRTYWx0VmVjAAAAAAAAAAAmAwMDBQAAAA5yZWNpcGllbnRWYWxpZAUAAAAOc2VydmVyU2lnVmFsaWQHBQAAAAloYXNoVmFsaWQHBQAAAA1oYXNoU2l6ZVZhbGlkBwcJAAACAAAAAQIAAAAkSW52YWxpZCBwbGF5ZXIgdHJhbnNmZXIgaWQgaW4gcHJvb2ZzBwkAAAIAAAABAgAAACRJbnZhbGlkIHNlcnZlciB0cmFuc2ZlciBpZCBpbiBwcm9vZnMHCQAAAgAAAAECAAAAJFRyYW5zZmVyIHRyYW5zYWN0aW9uIGlzIGFsbG93ZWQgb25seWWSmak=", "chainId": 87, "height": 1446566, "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("Xc1DAfAdHW76rGqF9ioqrFYP1wQo5hTC5qdBuz6Ezio")
13+let serverPublicKey = fromBase58String("6fKcnpWL4v3Kq51i3j6zocq8nZh68R245CTakkeJLcqF")
14+let bet = 100000000
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 ((height - playerBetHeight) > timeout))
79+ then true
80+ else (dicesCount > 5))
81+ then true
82+ else (1 > dicesCount))
83+ then (payout.recipient == player)
84+ else {
85+ let serverChoiceAndSaltVec = payout.attachment
86+ let playerChoiceVec = playerTtx.attachment
87+ let s = size(playerChoiceVec)
88+ let serverChoiceVec = take(serverChoiceAndSaltVec, 1)
89+ let serverChoiceValid = if (if (if (if (if ((serverChoiceVec == toBytes("1")))
90+ then true
91+ else (serverChoiceVec == toBytes("2")))
92+ then true
93+ else (serverChoiceVec == toBytes("3")))
94+ then true
95+ else (serverChoiceVec == toBytes("4")))
96+ then true
97+ else (serverChoiceVec == toBytes("5")))
98+ then true
99+ else (serverChoiceVec == toBytes("6"))
100+ let playerWins = if (!(serverChoiceValid))
101+ then true
102+ else if ((s == dicesCount))
103+ then if (if (if (if (if (if ((s >= 1))
104+ then (take(drop(playerChoiceVec, 0), 1) == serverChoiceVec)
105+ else false)
106+ then true
107+ else if ((s >= 2))
108+ then (take(drop(playerChoiceVec, 1), 1) == serverChoiceVec)
109+ else false)
110+ then true
111+ else if ((s >= 3))
112+ then (take(drop(playerChoiceVec, 2), 1) == serverChoiceVec)
113+ else false)
114+ then true
115+ else if ((s >= 4))
116+ then (take(drop(playerChoiceVec, 3), 1) == serverChoiceVec)
117+ else false)
118+ then true
119+ else if ((s >= 5))
120+ then (take(drop(playerChoiceVec, 4), 1) == serverChoiceVec)
121+ else false)
122+ then true
123+ else if ((s >= 6))
124+ then (take(drop(playerChoiceVec, 5), 1) == serverChoiceVec)
125+ else false
126+ else false
127+ let recipientValid = (payout.recipient == (if (playerWins)
128+ then player
129+ else server))
130+ let serverSigValid = sigVerify(payout.bodyBytes, serverTtxSign, serverPublicKey)
131+ let hashValid = (keccak256(serverChoiceAndSaltVec) == serverChoiceHashBytes)
132+ let hashSizeValid = (size(serverChoiceAndSaltVec) == 38)
133+ if (if (if (recipientValid)
134+ then serverSigValid
135+ else false)
136+ then hashValid
137+ else false)
138+ then hashSizeValid
139+ else false
140+ }
141+ else false
142+ case _ =>
143+ throw("Invalid player transfer id in proofs")
144+ }
145+ else false
146+ case _ =>
147+ throw("Invalid server transfer id in proofs")
148+ }
149+ else false
150+ case _ =>
151+ throw("Transfer transaction is allowed only")
152+}

github/deemru/w8io/3ef1775 
55.95 ms