2019.03.14 16:03 [1437136] smart account 3PDd7SiWJN1f9Wavez22K4xz3jECNDgbMTB > SELF 0.00000000 Waves

{ "type": 13, "id": "9Lp1sXRFGtZbXUTH7YH386YQGj8cTJjwzXjPaWxgKDzi", "fee": 1000000, "feeAssetId": null, "timestamp": 1552568623400, "version": 1, "sender": "3PDd7SiWJN1f9Wavez22K4xz3jECNDgbMTB", "senderPublicKey": "9GXeKmyUtJqUQD1944e28HUKxXc6oyWBhmFCmw4agvPG", "proofs": [ "3zbpHewQMF6anuRJn4by6ES4joKAAe7haW4M6YLTUQsUFcV6J48wARNJphKfz1CV26gW3YxPTamWNwnTULFaLBYH" ], "script": "base64:AgQAAAACbWUIBQAAAAJ0eAAAAAZzZW5kZXIEAAAABXR4RmVlAAAAAAAACSfABAAAAAd0aW1lb3V0AAAAAAAAAAAKBAAAAAhsaWZlc3BhbgAAAAAAAAAAHgQAAAAHaW50MVZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAEAAAAAAAAAAAcEAAAAB2ludDJWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAACAAAAAAAAAAAHBAAAAAdpbnQzVmVjCQAAygAAAAIJAAGaAAAAAQAAAAAAAAAAAwAAAAAAAAAABwQAAAAHaW50NFZlYwkAAMoAAAACCQABmgAAAAEAAAAAAAAAAAQAAAAAAAAAAAcEAAAAB2ludDVWZWMJAADKAAAAAgkAAZoAAAABAAAAAAAAAAAFAAAAAAAAAAAHBAAAABVzZXJ2ZXJDaG9pY2VIYXNoQnl0ZXMJAAJZAAAAAQIAAAArQjREVm1CeXBCWmhwNW9uWVBqY2Vqdmg0UXhrMmpqYTFLcEJ0eTZiSFk1dAQAAAAPc2VydmVyUHVibGljS2V5CQACWQAAAAECAAAALDZmS2NucFdMNHYzS3E1MWkzajZ6b2NxOG5aaDY4UjI0NUNUYWtrZUpMY3FGBAAAAANiZXQAAAAAABfXhAAEAAAABnNlcnZlcgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAPc2VydmVyUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAGcGF5b3V0BQAAAAckbWF0Y2gwBAAAABNwYXlPdXRBc3NldElkc1ZhbGlkAwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAZwYXlvdXQAAAAHYXNzZXRJZAkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAABnBheW91dAAAAApmZWVBc3NldElkBwkAAAAAAAACCAUAAAAGcGF5b3V0AAAAA2ZlZQUAAAAFdHhGZWUHBAAAAAtzZXJ2ZXJUdHhJZAkAAZEAAAACCAUAAAAGcGF5b3V0AAAABnByb29mcwAAAAAAAAAAAAQAAAALcGxheWVyVHR4SWQJAAGRAAAAAggFAAAABnBheW91dAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAADXNlcnZlclR0eFNpZ24JAAGRAAAAAggFAAAABnBheW91dAAAAAZwcm9vZnMAAAAAAAAAAAIDBQAAABNwYXlPdXRBc3NldElkc1ZhbGlkBAAAAAckbWF0Y2gxCQAD6AAAAAEFAAAAC3NlcnZlclR0eElkAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAlzZXJ2ZXJUdHgFAAAAByRtYXRjaDEEAAAADnN0YXJ0aW5nSGVpZ2h0CQEAAAAHZXh0cmFjdAAAAAEJAAPpAAAAAQUAAAALc2VydmVyVHR4SWQEAAAAEHRvdGFsU2VydmVyRnVuZHMIBQAAAAlzZXJ2ZXJUdHgAAAAGYW1vdW50BAAAABBzZXJ2ZXJGdWxsQXR0YWNoCAUAAAAJc2VydmVyVHR4AAAACmF0dGFjaG1lbnQEAAAADmRpY2VzQXR0YWNoVmVjCQAAyQAAAAIFAAAAEHNlcnZlckZ1bGxBdHRhY2gAAAAAAAAAAAEEAAAACmRpY2VzQ291bnQDCQAAAAAAAAIFAAAADmRpY2VzQXR0YWNoVmVjBQAAAAdpbnQxVmVjAAAAAAAAAAABAwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50MlZlYwAAAAAAAAAAAgMJAAAAAAAAAgUAAAAOZGljZXNBdHRhY2hWZWMFAAAAB2ludDNWZWMAAAAAAAAAAAMDCQAAAAAAAAIFAAAADmRpY2VzQXR0YWNoVmVjBQAAAAdpbnQ0VmVjAAAAAAAAAAAEAwkAAAAAAAACBQAAAA5kaWNlc0F0dGFjaFZlYwUAAAAHaW50NVZlYwAAAAAAAAAABQAAAAAAAAAABgQAAAAVcGxheWVyUHVibGljVmVjQXR0YWNoCQAAygAAAAIFAAAAEHNlcnZlckZ1bGxBdHRhY2gAAAAAAAAAAAEEAAAABnBsYXllcgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAVcGxheWVyUHVibGljVmVjQXR0YWNoAwMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAA5zdGFydGluZ0hlaWdodAkAAAAAAAACCAUAAAAJc2VydmVyVHR4AAAABnNlbmRlcgUAAAAGc2VydmVyBwMJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0BQAAAAhsaWZlc3BhbgQAAAAOc2VydmVyU2lnVmFsaWQJAAH0AAAAAwgFAAAABnBheW91dAAAAAlib2R5Qnl0ZXMFAAAADXNlcnZlclR0eFNpZ24FAAAAD3NlcnZlclB1YmxpY0tleQQAAAAXcmVjaXBpZW50U2VydmVyT3JQbGF5ZXIDCQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZzZXJ2ZXIGCQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZwbGF5ZXIDBQAAAA5zZXJ2ZXJTaWdWYWxpZAUAAAAXcmVjaXBpZW50U2VydmVyT3JQbGF5ZXIHBAAAAAckbWF0Y2gyCQAD6AAAAAEFAAAAC3BsYXllclR0eElkAwkAAAEAAAACBQAAAAckbWF0Y2gyAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAlwbGF5ZXJUdHgFAAAAByRtYXRjaDIEAAAAD3BsYXllckJldEhlaWdodAkBAAAAB2V4dHJhY3QAAAABCQAD6QAAAAEFAAAAC3BsYXllclR0eElkBAAAAA5wbGF5ZXJCZXRWYWxpZAMDAwkAAAAAAAACCAUAAAAJcGxheWVyVHR4AAAABmFtb3VudAUAAAADYmV0CQAAAAAAAAIIBQAAAAlwbGF5ZXJUdHgAAAAJcmVjaXBpZW50BQAAAAJtZQcJAAAAAAAAAggFAAAACXBsYXllclR0eAAAAAZzZW5kZXIFAAAABnBsYXllcgcJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAlwbGF5ZXJUdHgAAAAHYXNzZXRJZAcDBQAAAA5wbGF5ZXJCZXRWYWxpZAMJAABmAAAAAgkAAGUAAAACBQAAAA9wbGF5ZXJCZXRIZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0BQAAAAd0aW1lb3V0CQAAAAAAAAIIBQAAAAZwYXlvdXQAAAAJcmVjaXBpZW50BQAAAAZzZXJ2ZXIDAwMDCQAAZgAAAAIJAABkAAAAAgUAAAAQdG90YWxTZXJ2ZXJGdW5kcwUAAAADYmV0CQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAACbWUGCQAAZgAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA9wbGF5ZXJCZXRIZWlnaHQFAAAAB3RpbWVvdXQGCQAAZgAAAAIFAAAACmRpY2VzQ291bnQAAAAAAAAAAAUGCQAAZgAAAAIAAAAAAAAAAAEFAAAACmRpY2VzQ291bnQJAAAAAAAAAggFAAAABnBheW91dAAAAAlyZWNpcGllbnQFAAAABnBsYXllcgQAAAAWc2VydmVyQ2hvaWNlQW5kU2FsdFZlYwgFAAAABnBheW91dAAAAAphdHRhY2htZW50BAAAAA9wbGF5ZXJDaG9pY2VWZWMIBQAAAAlwbGF5ZXJUdHgAAAAKYXR0YWNobWVudAQAAAABcwkAAMgAAAABBQAAAA9wbGF5ZXJDaG9pY2VWZWMEAAAAD3NlcnZlckNob2ljZVZlYwkAAMkAAAACBQAAABZzZXJ2ZXJDaG9pY2VBbmRTYWx0VmVjAAAAAAAAAAABBAAAABFzZXJ2ZXJDaG9pY2VWYWxpZAMDAwMDCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAExBgkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABMgYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATMGCQAAAAAAAAIFAAAAD3NlcnZlckNob2ljZVZlYwkAAZsAAAABAgAAAAE0BgkAAAAAAAACBQAAAA9zZXJ2ZXJDaG9pY2VWZWMJAAGbAAAAAQIAAAABNQYJAAAAAAAAAgUAAAAPc2VydmVyQ2hvaWNlVmVjCQABmwAAAAECAAAAATYEAAAACnBsYXllcldpbnMDCQEAAAABIQAAAAEFAAAAEXNlcnZlckNob2ljZVZhbGlkBgMJAAAAAAAAAgUAAAABcwUAAAAKZGljZXNDb3VudAMDAwMDAwkAAGcAAAACBQAAAAFzAAAAAAAAAAABCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAAAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAACCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAEAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAADCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAIAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAAECQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAMAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAAFCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAQAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcGAwkAAGcAAAACBQAAAAFzAAAAAAAAAAAGCQAAAAAAAAIJAADJAAAAAgkAAMoAAAACBQAAAA9wbGF5ZXJDaG9pY2VWZWMAAAAAAAAAAAUAAAAAAAAAAAEFAAAAD3NlcnZlckNob2ljZVZlYwcHBAAAAA5yZWNpcGllbnRWYWxpZAkAAAAAAAACCAUAAAAGcGF5b3V0AAAACXJlY2lwaWVudAMFAAAACnBsYXllcldpbnMFAAAABnBsYXllcgUAAAAGc2VydmVyBAAAAA5zZXJ2ZXJTaWdWYWxpZAkAAfQAAAADCAUAAAAGcGF5b3V0AAAACWJvZHlCeXRlcwUAAAANc2VydmVyVHR4U2lnbgUAAAAPc2VydmVyUHVibGljS2V5BAAAAAloYXNoVmFsaWQJAAAAAAAAAgkAAfUAAAABBQAAABZzZXJ2ZXJDaG9pY2VBbmRTYWx0VmVjBQAAABVzZXJ2ZXJDaG9pY2VIYXNoQnl0ZXMEAAAADWhhc2hTaXplVmFsaWQJAAAAAAAAAgkAAMgAAAABBQAAABZzZXJ2ZXJDaG9pY2VBbmRTYWx0VmVjAAAAAAAAAAAmAwMDBQAAAA5yZWNpcGllbnRWYWxpZAUAAAAOc2VydmVyU2lnVmFsaWQHBQAAAAloYXNoVmFsaWQHBQAAAA1oYXNoU2l6ZVZhbGlkBwcJAAACAAAAAQIAAAAkSW52YWxpZCBwbGF5ZXIgdHJhbnNmZXIgaWQgaW4gcHJvb2ZzBwkAAAIAAAABAgAAACRJbnZhbGlkIHNlcnZlciB0cmFuc2ZlciBpZCBpbiBwcm9vZnMHCQAAAgAAAAECAAAAJFRyYW5zZmVyIHRyYW5zYWN0aW9uIGlzIGFsbG93ZWQgb25seToyZxU=", "chainId": 87, "height": 1437136, "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("B4DVmBypBZhp5onYPjcejvh4Qxk2jja1KpBty6bHY5t")
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 ((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 
88.90 ms