tx · H1jseNjmkLoQN17dip3yYDZhRzEJcQbLFJGGheEubn5g

3ND5M2ZTSjWFCpizvg3PD2KXzh7Di3xkD9d:  -0.01000000 Waves

2018.12.19 15:26 [411732] smart account 3ND5M2ZTSjWFCpizvg3PD2KXzh7Di3xkD9d > SELF 0.00000000 Waves

{ "type": 13, "id": "H1jseNjmkLoQN17dip3yYDZhRzEJcQbLFJGGheEubn5g", "fee": 1000000, "feeAssetId": null, "timestamp": 1545222360930, "version": 1, "sender": "3ND5M2ZTSjWFCpizvg3PD2KXzh7Di3xkD9d", "senderPublicKey": "Hzctgqwh6as9hoCHVzzQuuAh14U6c8KpEpEbUqyUWHVT", "proofs": [ "3G9txA7LBbw1J3dzAoqRvdSqJjDxYaMTuUYxj4BWt7X8XDbUdDKTchwBsUVwj6edid2MWbd3Wjzoge6GL8ZKUVEA" ], "script": "base64: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", "chainId": 84, "height": 411732, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 1 #-}
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let me = tx.sender
4+let serviceAddress = addressFromString("3N7oF5J5m9BwBFCmVJZWr3AEH3u4c6CLoB9")
5+let heightKey = "height"
6+let stage1 = "p2MoveHash"
7+let stage2 = "p2Move"
8+let stage3 = "p1Move"
9+let wave = 100000000
10+let gameBet = (1 * wave)
11+let serviceCommission = 200
12+let rock = base58'1'
13+let paper = base58'2'
14+let scissors = base58'3'
15+let matchKey = extract(getBinary(me, "matchKey"))
16+let player1Key = extract(getBinary(me, "player1Key"))
17+match tx {
18+ case dataTx: DataTransaction =>
19+ let dataTxFeeIsOk = (dataTx.fee == 500000)
20+ let dataTxDataIsOk = if (isDefined(getBinary(dataTx.data, stage1)))
21+ then {
22+ let oldHeight = if (isDefined(getInteger(me, heightKey)))
23+ then extract(getInteger(me, heightKey))
24+ else 9223372036854775807
25+ let canWriteP2Move = if (!(isDefined(getBinary(me, stage1))))
26+ then true
27+ else (-3 > (oldHeight - height))
28+ let isDataSizeValid = (size(dataTx.data) == 3)
29+ let isDataTxSignatureValid = sigVerify(dataTx.bodyBytes, dataTx.proofs[0], extract(getBinary(dataTx.data, "player2Key")))
30+ let isHeightFieldCorrect = if (if ((height == extract(getInteger(dataTx.data, heightKey))))
31+ then true
32+ else ((height - 1) == extract(getInteger(dataTx.data, heightKey))))
33+ then true
34+ else ((height + 1) == extract(getInteger(dataTx.data, heightKey)))
35+ if (if (if (canWriteP2Move)
36+ then isDataSizeValid
37+ else false)
38+ then isDataTxSignatureValid
39+ else false)
40+ then isHeightFieldCorrect
41+ else false
42+ }
43+ else if (isDefined(getBinary(dataTx.data, stage2)))
44+ then if (if (if (if (!(isDefined(getBinary(me, stage2))))
45+ then (size(dataTx.data) == 2)
46+ else false)
47+ then (size(extract(getBinary(dataTx.data, stage2))) == 32)
48+ else false)
49+ then (sha256(extract(getBinary(dataTx.data, stage2))) == extract(getBinary(me, stage1)))
50+ else false)
51+ then match transactionById(extract(getBinary(dataTx.data, "payment"))) {
52+ case p2payment: TransferTransaction =>
53+ if (if (if ((p2payment.amount == (1 * wave)))
54+ then (p2payment.recipient == me)
55+ else false)
56+ then (p2payment.senderPublicKey == extract(getBinary(me, "player2Key")))
57+ else false)
58+ then sigVerify(p2payment.bodyBytes, p2payment.proofs[0], p2payment.senderPublicKey)
59+ else false
60+ case _ =>
61+ false
62+ }
63+ else false
64+ else if (isDefined(getBinary(dataTx.data, stage3)))
65+ then if (if (if (!(isDefined(getBinary(me, stage3))))
66+ then (size(dataTx.data) == 1)
67+ else false)
68+ then (size(extract(getBinary(dataTx.data, stage3))) == 32)
69+ else false)
70+ then (sha256(extract(getBinary(dataTx.data, stage3))) == extract(getBinary(me, "p1MoveHash")))
71+ else false
72+ else false
73+ if (dataTxFeeIsOk)
74+ then dataTxDataIsOk
75+ else false
76+ case payout: MassTransferTransaction =>
77+ let p1moves = take(extract(getBinary(me, stage3)), 3)
78+ let p2moves = take(extract(getBinary(me, stage2)), 3)
79+ let p1m1 = take(p1moves, 1)
80+ let p2m1 = take(p2moves, 1)
81+ let p1m2 = takeRightBytes(take(p1moves, 2), 1)
82+ let p2m2 = takeRightBytes(take(p2moves, 2), 1)
83+ let p1m3 = takeRightBytes(p1moves, 1)
84+ let p2m3 = takeRightBytes(p2moves, 1)
85+ let round1 = if (if (if (if ((p1m1 == rock))
86+ then (p2m1 == scissors)
87+ else false)
88+ then true
89+ else if ((p1m1 == paper))
90+ then (p2m1 == rock)
91+ else false)
92+ then true
93+ else if ((p1m1 == scissors))
94+ then (p2m1 == paper)
95+ else false)
96+ then 1
97+ else if ((p1m1 == p2m1))
98+ then 0
99+ else -1
100+ let round2 = if (if (if (if ((p1m2 == rock))
101+ then (p2m2 == scissors)
102+ else false)
103+ then true
104+ else if ((p1m2 == paper))
105+ then (p2m2 == rock)
106+ else false)
107+ then true
108+ else if ((p1m2 == scissors))
109+ then (p2m2 == paper)
110+ else false)
111+ then 1
112+ else if ((p1m2 == p2m2))
113+ then 0
114+ else -1
115+ let round3 = if (if (if (if ((p1m3 == rock))
116+ then (p2m3 == scissors)
117+ else false)
118+ then true
119+ else if ((p1m3 == paper))
120+ then (p2m3 == rock)
121+ else false)
122+ then true
123+ else if ((p1m3 == scissors))
124+ then (p2m3 == paper)
125+ else false)
126+ then 1
127+ else if ((p1m3 == p2m3))
128+ then 0
129+ else -1
130+ let score = ((round1 + round2) + round3)
131+ let p1 = addressFromPublicKey(player1Key)
132+ let p2 = addressFromPublicKey(extract(getBinary(me, "player2Key")))
133+ let isCommissionIncluded = if ((payout.transfers[0].recipient == serviceAddress))
134+ then (payout.transfers[0].amount == (gameBet / serviceCommission))
135+ else false
136+ let protect = (600000 >= payout.fee)
137+ let isPayoutValid = if ((score == 0))
138+ then if (if (if ((size(payout.transfers) == 3))
139+ then (payout.transfers[1].amount == payout.transfers[2].amount)
140+ else false)
141+ then (payout.transfers[1].recipient == p1)
142+ else false)
143+ then (payout.transfers[2].recipient == p2)
144+ else false
145+ else {
146+ let winner = if ((score > 0))
147+ then p1
148+ else p2
149+ if ((size(payout.transfers) == 2))
150+ then (payout.transfers[1].recipient == winner)
151+ else false
152+ }
153+ if (if (protect)
154+ then isCommissionIncluded
155+ else false)
156+ then isPayoutValid
157+ else false
158+ case _ =>
159+ false
160+}

github/deemru/w8io/c3f4982 
35.99 ms