tx · GwR79DrHcxcwLH9LHTtTJFaDAgkh4kss5NQNzhrb4LDg

3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g:  -0.01400000 Waves

2019.03.20 19:39 [544864] smart account 3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g > SELF 0.00000000 Waves

{ "type": 13, "id": "GwR79DrHcxcwLH9LHTtTJFaDAgkh4kss5NQNzhrb4LDg", "fee": 1400000, "feeAssetId": null, "timestamp": 1553099971469, "version": 1, "sender": "3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g", "senderPublicKey": "CEx6vd7D5Czxcfshd4vLpSw4LEmGULQw5avVZ7Vfrzgo", "proofs": [ "2t3duePM6DMArQHjdcwFxjGGVBtt1s9ocHvbhebGQjXSjgWUZNybcoxUNXduMZGTP2SwuZf2uq5etzTuW2MLVphF" ], "script": "base64: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", "chainId": 84, "height": 544864, "spentComplexity": 0 } View: original | compacted Prev: CnWUJ27ptC1K6uyGhnPLCUBhhh2jX625rNz9sD9ZM2A2 Next: DyE8VZpNJpSoup5DwqFLmMEMqGv4yufagJBMrjzWA612 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 2 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let feeAddress = "3NCoLorazbf3xXw91fjj3UWmpb93Ah6NnxK"
3+let feeAddress = "3N9vD6GdHspqprY2di6N854fuT7ugJPkHo5"
4+let me = tx.sender
45 match tx {
56 case dt: DataTransaction =>
6- let type = extract(getString(dt.data, "type"))
7- let gameId = extract(getString(dt.data, "gameId"))
87 let serverSigned = sigVerify(dt.bodyBytes, dt.proofs[0], tx.senderPublicKey)
9- if ((type == "start"))
10- then {
11- let betAmount = extract(getInteger(dt.data, (gameId + "_amount")))
12- let player1 = extract(getString(dt.data, (gameId + "_player1")))
13- let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
14- let player2 = extract(getString(dt.data, (gameId + "_player2")))
15- let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
16- let dtStartDataDefined = if (if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
17- then isDefined(getInteger(dt.data, (gameId + "_fee_amount")))
18- else false)
19- then isDefined(getBinary(dt.data, (gameId + "_squadronHash")))
20- else false)
21- then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))
22- else false)
23- then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))
24- else false
25- let player1Tx = transactionById(fromBase58String(player1TxId))
26- let player2Tx = transactionById(fromBase58String(player2TxId))
27- let tr1Ok = match player1Tx {
28- case t: TransferTransaction =>
29- if (if (if (if ((t.amount == betAmount))
30- then !(isDefined(getString(tx.sender, ("used_tx_" + player1TxId))))
31- else false)
32- then !(isDefined(t.assetId))
33- else false)
34- then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId)
35- else false)
36- then (t.recipient == tx.sender)
37- else false
38- case _ =>
39- false
8+ if (!(serverSigned))
9+ then throw("d:1")
10+ else {
11+ let type = extract(getString(dt.data, "type"))
12+ let gameId = extract(getString(dt.data, "gameId"))
13+ if ((type == "init"))
14+ then {
15+ let player1 = extract(getString(dt.data, (gameId + "_player1")))
16+ let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
17+ let player2 = extract(getString(dt.data, (gameId + "_player2")))
18+ let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
19+ if (!(isDefined(getInteger(dt.data, (gameId + "_winAmount")))))
20+ then throw("d:i:1")
21+ else if (!(isDefined(getInteger(dt.data, (gameId + "_fee_amount")))))
22+ then throw("d:i:2")
23+ else if (!(isDefined(getBinary(dt.data, (gameId + "_squadronHash")))))
24+ then throw("d:i:3")
25+ else if (!(isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))))
26+ then throw("d:i:4")
27+ else if (!(isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))))
28+ then throw("d:i:5")
29+ else if (isDefined(getBoolean(me, ("used_tx_" + player1TxId))))
30+ then throw("d:i:6")
31+ else if (isDefined(getBoolean(me, ("used_tx_" + player2TxId))))
32+ then throw("d:i:7")
33+ else true
34+ }
35+ else if ((type == "start"))
36+ then {
37+ let betAmount = extract(getInteger(dt.data, (gameId + "_amount")))
38+ let player1 = extract(getString(dt.data, (gameId + "_player1")))
39+ let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
40+ let player2 = extract(getString(dt.data, (gameId + "_player2")))
41+ let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
42+ let player1Tx = transactionById(fromBase58String(player1TxId))
43+ let player2Tx = transactionById(fromBase58String(player2TxId))
44+ let tr1Ok = match player1Tx {
45+ case t: TransferTransaction =>
46+ if (if (if (if ((t.amount == betAmount))
47+ then !(isDefined(getString(me, ("used_tx_" + player1TxId))))
48+ else false)
49+ then !(isDefined(t.assetId))
50+ else false)
51+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId)
52+ else false)
53+ then (t.recipient == me)
54+ else false
55+ case _ =>
56+ false
57+ }
58+ let tr2Ok = match player2Tx {
59+ case t: TransferTransaction =>
60+ if (if (if (if ((t.amount == betAmount))
61+ then !(isDefined(getString(me, ("used_tx_" + player2TxId))))
62+ else false)
63+ then !(isDefined(t.assetId))
64+ else false)
65+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
66+ else false)
67+ then (t.recipient == me)
68+ else false
69+ case _ =>
70+ false
71+ }
72+ if (!(tr1Ok))
73+ then throw("d:s:1")
74+ else if (!(tr2Ok))
75+ then throw("d:s:2")
76+ else true
77+ }
78+ else if ((type == "finish"))
79+ then {
80+ let winner = extract(getString(dt.data, (gameId + "_winner")))
81+ let correctWinner = if ((winner == extract(getString(me, (gameId + "_player1")))))
82+ then true
83+ else (winner == extract(getString(me, (gameId + "_player2"))))
84+ let squadron1 = extract(getBinary(dt.data, (gameId + "_squadron1")))
85+ let squadron2 = extract(getBinary(dt.data, (gameId + "_squadron2")))
86+ let gameSalt = extract(getBinary(dt.data, (gameId + "_salt")))
87+ let correctSquadrons = (sha256(((squadron1 + squadron2) + gameSalt)) == extract(getBinary(me, (gameId + "_squadronHash"))))
88+ let payoutTxId = extract(getString(dt.data, (gameId + "_payout_tx_id")))
89+ let payoutKey = extract(getString(dt.data, (payoutTxId + "_payout")))
90+ let feeTxId = extract(getString(dt.data, (gameId + "_fee_tx_id")))
91+ let feeKey = extract(getString(dt.data, (feeTxId + "_fee")))
92+ if (!(correctWinner))
93+ then throw("d:f:1")
94+ else if (!(correctSquadrons))
95+ then throw("d:f:2")
96+ else if ((payoutKey != (gameId + "_winAmount")))
97+ then throw("d:f:3")
98+ else if ((feeKey != (gameId + "_fee_amount")))
99+ then throw("d:f:4")
100+ else true
101+ }
102+ else if ((type == "refund"))
103+ then {
104+ let paymentTxId = extract(getString(dt.data, (gameId + "_payment_tx_id")))
105+ let refundTtxId = extract(getString(dt.data, (gameId + "_refund_ttx_id")))
106+ if (isDefined(getBoolean(me, ("used_tx_" + paymentTxId))))
107+ then throw("d:r:1")
108+ else if (!(isDefined(getBoolean(dt.data, ("used_tx_" + paymentTxId)))))
109+ then throw("d:r:2")
110+ else if (!(isDefined(getInteger(dt.data, (refundTtxId + "_refund_amount")))))
111+ then throw("d:r:3")
112+ else if (!(isDefined(getString(dt.data, (refundTtxId + "_refund_recipient")))))
113+ then throw("d:r:4")
114+ else true
115+ }
116+ else throw(("d:2:" + type))
40117 }
41- let tr2Ok = match player2Tx {
42- case t: TransferTransaction =>
43- if (if (if (if ((t.amount == betAmount))
44- then !(isDefined(getString(tx.sender, ("used_tx_" + player2TxId))))
45- else false)
46- then !(isDefined(t.assetId))
47- else false)
48- then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
49- else false)
50- then (t.recipient == tx.sender)
51- else false
52- case _ =>
53- false
54- }
55- if (!(serverSigned))
56- then throw("dtx:start fail - server did not sign tx")
57- else if (!(tr1Ok))
58- then throw("dtx:start fail - player 1 ttx is invalid")
59- else if (!(tr2Ok))
60- then throw("dtx:start fail - player 2 ttx is invalid")
61- else if (!(dtStartDataDefined))
62- then throw("dtx:start fail - start data is incomplete")
63- else true
64- }
65- else if ((type == "finish"))
66- then {
67- let winner = extract(getString(dt.data, (gameId + "_winner")))
68- let correctWinner = if ((winner == extract(getString(tx.sender, (gameId + "_player1")))))
69- then true
70- else (winner == extract(getString(tx.sender, (gameId + "_player2"))))
71- let squadron1 = extract(getBinary(dt.data, (gameId + "_squadron1")))
72- let squadron2 = extract(getBinary(dt.data, (gameId + "_squadron2")))
73- let gameSalt = extract(getBinary(dt.data, (gameId + "_salt")))
74- let correctSquadrons = (sha256(((squadron1 + squadron2) + gameSalt)) == extract(getBinary(tx.sender, (gameId + "_squadronHash"))))
75- let payoutTxId = extract(getString(dt.data, (gameId + "_payout_tx_id")))
76- let payoutKey = extract(getString(dt.data, (payoutTxId + "_payout")))
77- let feeTxId = extract(getString(dt.data, (gameId + "_fee_tx_id")))
78- let feeKey = extract(getString(dt.data, (feeTxId + "_fee")))
79- if (!(serverSigned))
80- then throw("dtx:finish fail - server did not sign tx")
81- else if (!(correctWinner))
82- then throw("dtx:finish fail - winner is incorrect")
83- else if (!(correctSquadrons))
84- then throw("dtx:finish fail - squadrons are incorrect")
85- else if ((payoutKey != (gameId + "_winAmount")))
86- then throw("dtx:finish fail - payout key is not equal win amount key")
87- else if ((feeKey != (gameId + "_fee_amount")))
88- then throw("dtx:finish fail - fee key is not equal fee amount key")
89- else true
90- }
91- else throw(("dtx:type_unknown " + type))
92118 case tt: TransferTransaction =>
93119 let serverSigned = sigVerify(tt.bodyBytes, tt.proofs[0], tx.senderPublicKey)
94120 let recipientAddr = toBase58String(addressFromRecipient(tt.recipient).bytes)
95121 if (!(serverSigned))
96- then throw("ttx fail - tx not signed by server")
97- else if (isDefined(getString(tx.sender, (toBase58String(tt.id) + "_payout"))))
122+ then throw("t:1")
123+ else if (isDefined(getString(me, (toBase58String(tt.id) + "_payout"))))
98124 then {
99- let gameId = extract(getString(tx.sender, ("game_" + recipientAddr)))
100- let winner = extract(getString(tx.sender, (gameId + "_winner")))
125+ let gameId = extract(getString(me, ("game_" + recipientAddr)))
126+ let winner = extract(getString(me, (gameId + "_winner")))
101127 let winnerAddr = toBase58String(addressFromPublicKey(fromBase58String(winner)).bytes)
102- let winAmountKey = extract(getString(tx.sender, (toBase58String(tt.id) + "_payout")))
103- let winAmount = extract(getInteger(tx.sender, winAmountKey))
128+ let winAmountKey = extract(getString(me, (toBase58String(tt.id) + "_payout")))
129+ let winAmount = extract(getInteger(me, winAmountKey))
104130 if ((tt.amount != winAmount))
105- then throw("ttx fail - wrong payout amount")
131+ then throw("t:p:1")
106132 else if (isDefined(tt.assetId))
107- then throw("ttx fail - wrong payout asset")
133+ then throw("t:p:2")
108134 else if ((winnerAddr != recipientAddr))
109- then throw("ttx fail - wrong payout recipient")
135+ then throw("t:p:3")
110136 else true
111137 }
112- else if (isDefined(getString(tx.sender, (toBase58String(tt.id) + "_fee"))))
138+ else if (isDefined(getString(me, (toBase58String(tt.id) + "_fee"))))
113139 then {
114- let feeAmountKey = extract(getString(tx.sender, (toBase58String(tt.id) + "_fee")))
115- let feeAmount = extract(getInteger(tx.sender, feeAmountKey))
140+ let feeAmountKey = extract(getString(me, (toBase58String(tt.id) + "_fee")))
141+ let feeAmount = extract(getInteger(me, feeAmountKey))
116142 if ((tt.amount != feeAmount))
117- then throw("ttx fail - wrong fee amount")
143+ then throw("t:f:1")
118144 else if (isDefined(tt.assetId))
119- then throw("ttx fail - wrong fee asset")
145+ then throw("t:f:2")
120146 else if ((recipientAddr != feeAddress))
121- then throw("ttx fail - wrong fee recipient")
147+ then throw("t:f:3")
122148 else true
123149 }
124- else throw("ttx fail - unknown ttx")
150+ else if (isDefined(getInteger(me, (toBase58String(tt.id) + "_refund_amount"))))
151+ then {
152+ let refundAmount = extract(getInteger(me, (toBase58String(tt.id) + "_refund_amount")))
153+ let refundRecipient = extract(getString(me, (toBase58String(tt.id) + "_refund_recipient")))
154+ if ((tt.amount != refundAmount))
155+ then throw("t:r:1")
156+ else if (isDefined(tt.assetId))
157+ then throw("t:r:2")
158+ else if ((recipientAddr != refundRecipient))
159+ then throw("t:r:3")
160+ else true
161+ }
162+ else throw("t:2")
125163 case st: SetScriptTransaction =>
126164 sigVerify(st.bodyBytes, st.proofs[0], tx.senderPublicKey)
127165 case _ =>
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 2 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let feeAddress = "3NCoLorazbf3xXw91fjj3UWmpb93Ah6NnxK"
3+let feeAddress = "3N9vD6GdHspqprY2di6N854fuT7ugJPkHo5"
4+let me = tx.sender
45 match tx {
56 case dt: DataTransaction =>
6- let type = extract(getString(dt.data, "type"))
7- let gameId = extract(getString(dt.data, "gameId"))
87 let serverSigned = sigVerify(dt.bodyBytes, dt.proofs[0], tx.senderPublicKey)
9- if ((type == "start"))
10- then {
11- let betAmount = extract(getInteger(dt.data, (gameId + "_amount")))
12- let player1 = extract(getString(dt.data, (gameId + "_player1")))
13- let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
14- let player2 = extract(getString(dt.data, (gameId + "_player2")))
15- let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
16- let dtStartDataDefined = if (if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
17- then isDefined(getInteger(dt.data, (gameId + "_fee_amount")))
18- else false)
19- then isDefined(getBinary(dt.data, (gameId + "_squadronHash")))
20- else false)
21- then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))
22- else false)
23- then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))
24- else false
25- let player1Tx = transactionById(fromBase58String(player1TxId))
26- let player2Tx = transactionById(fromBase58String(player2TxId))
27- let tr1Ok = match player1Tx {
28- case t: TransferTransaction =>
29- if (if (if (if ((t.amount == betAmount))
30- then !(isDefined(getString(tx.sender, ("used_tx_" + player1TxId))))
31- else false)
32- then !(isDefined(t.assetId))
33- else false)
34- then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId)
35- else false)
36- then (t.recipient == tx.sender)
37- else false
38- case _ =>
39- false
8+ if (!(serverSigned))
9+ then throw("d:1")
10+ else {
11+ let type = extract(getString(dt.data, "type"))
12+ let gameId = extract(getString(dt.data, "gameId"))
13+ if ((type == "init"))
14+ then {
15+ let player1 = extract(getString(dt.data, (gameId + "_player1")))
16+ let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
17+ let player2 = extract(getString(dt.data, (gameId + "_player2")))
18+ let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
19+ if (!(isDefined(getInteger(dt.data, (gameId + "_winAmount")))))
20+ then throw("d:i:1")
21+ else if (!(isDefined(getInteger(dt.data, (gameId + "_fee_amount")))))
22+ then throw("d:i:2")
23+ else if (!(isDefined(getBinary(dt.data, (gameId + "_squadronHash")))))
24+ then throw("d:i:3")
25+ else if (!(isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))))
26+ then throw("d:i:4")
27+ else if (!(isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))))
28+ then throw("d:i:5")
29+ else if (isDefined(getBoolean(me, ("used_tx_" + player1TxId))))
30+ then throw("d:i:6")
31+ else if (isDefined(getBoolean(me, ("used_tx_" + player2TxId))))
32+ then throw("d:i:7")
33+ else true
34+ }
35+ else if ((type == "start"))
36+ then {
37+ let betAmount = extract(getInteger(dt.data, (gameId + "_amount")))
38+ let player1 = extract(getString(dt.data, (gameId + "_player1")))
39+ let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
40+ let player2 = extract(getString(dt.data, (gameId + "_player2")))
41+ let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
42+ let player1Tx = transactionById(fromBase58String(player1TxId))
43+ let player2Tx = transactionById(fromBase58String(player2TxId))
44+ let tr1Ok = match player1Tx {
45+ case t: TransferTransaction =>
46+ if (if (if (if ((t.amount == betAmount))
47+ then !(isDefined(getString(me, ("used_tx_" + player1TxId))))
48+ else false)
49+ then !(isDefined(t.assetId))
50+ else false)
51+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId)
52+ else false)
53+ then (t.recipient == me)
54+ else false
55+ case _ =>
56+ false
57+ }
58+ let tr2Ok = match player2Tx {
59+ case t: TransferTransaction =>
60+ if (if (if (if ((t.amount == betAmount))
61+ then !(isDefined(getString(me, ("used_tx_" + player2TxId))))
62+ else false)
63+ then !(isDefined(t.assetId))
64+ else false)
65+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
66+ else false)
67+ then (t.recipient == me)
68+ else false
69+ case _ =>
70+ false
71+ }
72+ if (!(tr1Ok))
73+ then throw("d:s:1")
74+ else if (!(tr2Ok))
75+ then throw("d:s:2")
76+ else true
77+ }
78+ else if ((type == "finish"))
79+ then {
80+ let winner = extract(getString(dt.data, (gameId + "_winner")))
81+ let correctWinner = if ((winner == extract(getString(me, (gameId + "_player1")))))
82+ then true
83+ else (winner == extract(getString(me, (gameId + "_player2"))))
84+ let squadron1 = extract(getBinary(dt.data, (gameId + "_squadron1")))
85+ let squadron2 = extract(getBinary(dt.data, (gameId + "_squadron2")))
86+ let gameSalt = extract(getBinary(dt.data, (gameId + "_salt")))
87+ let correctSquadrons = (sha256(((squadron1 + squadron2) + gameSalt)) == extract(getBinary(me, (gameId + "_squadronHash"))))
88+ let payoutTxId = extract(getString(dt.data, (gameId + "_payout_tx_id")))
89+ let payoutKey = extract(getString(dt.data, (payoutTxId + "_payout")))
90+ let feeTxId = extract(getString(dt.data, (gameId + "_fee_tx_id")))
91+ let feeKey = extract(getString(dt.data, (feeTxId + "_fee")))
92+ if (!(correctWinner))
93+ then throw("d:f:1")
94+ else if (!(correctSquadrons))
95+ then throw("d:f:2")
96+ else if ((payoutKey != (gameId + "_winAmount")))
97+ then throw("d:f:3")
98+ else if ((feeKey != (gameId + "_fee_amount")))
99+ then throw("d:f:4")
100+ else true
101+ }
102+ else if ((type == "refund"))
103+ then {
104+ let paymentTxId = extract(getString(dt.data, (gameId + "_payment_tx_id")))
105+ let refundTtxId = extract(getString(dt.data, (gameId + "_refund_ttx_id")))
106+ if (isDefined(getBoolean(me, ("used_tx_" + paymentTxId))))
107+ then throw("d:r:1")
108+ else if (!(isDefined(getBoolean(dt.data, ("used_tx_" + paymentTxId)))))
109+ then throw("d:r:2")
110+ else if (!(isDefined(getInteger(dt.data, (refundTtxId + "_refund_amount")))))
111+ then throw("d:r:3")
112+ else if (!(isDefined(getString(dt.data, (refundTtxId + "_refund_recipient")))))
113+ then throw("d:r:4")
114+ else true
115+ }
116+ else throw(("d:2:" + type))
40117 }
41- let tr2Ok = match player2Tx {
42- case t: TransferTransaction =>
43- if (if (if (if ((t.amount == betAmount))
44- then !(isDefined(getString(tx.sender, ("used_tx_" + player2TxId))))
45- else false)
46- then !(isDefined(t.assetId))
47- else false)
48- then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
49- else false)
50- then (t.recipient == tx.sender)
51- else false
52- case _ =>
53- false
54- }
55- if (!(serverSigned))
56- then throw("dtx:start fail - server did not sign tx")
57- else if (!(tr1Ok))
58- then throw("dtx:start fail - player 1 ttx is invalid")
59- else if (!(tr2Ok))
60- then throw("dtx:start fail - player 2 ttx is invalid")
61- else if (!(dtStartDataDefined))
62- then throw("dtx:start fail - start data is incomplete")
63- else true
64- }
65- else if ((type == "finish"))
66- then {
67- let winner = extract(getString(dt.data, (gameId + "_winner")))
68- let correctWinner = if ((winner == extract(getString(tx.sender, (gameId + "_player1")))))
69- then true
70- else (winner == extract(getString(tx.sender, (gameId + "_player2"))))
71- let squadron1 = extract(getBinary(dt.data, (gameId + "_squadron1")))
72- let squadron2 = extract(getBinary(dt.data, (gameId + "_squadron2")))
73- let gameSalt = extract(getBinary(dt.data, (gameId + "_salt")))
74- let correctSquadrons = (sha256(((squadron1 + squadron2) + gameSalt)) == extract(getBinary(tx.sender, (gameId + "_squadronHash"))))
75- let payoutTxId = extract(getString(dt.data, (gameId + "_payout_tx_id")))
76- let payoutKey = extract(getString(dt.data, (payoutTxId + "_payout")))
77- let feeTxId = extract(getString(dt.data, (gameId + "_fee_tx_id")))
78- let feeKey = extract(getString(dt.data, (feeTxId + "_fee")))
79- if (!(serverSigned))
80- then throw("dtx:finish fail - server did not sign tx")
81- else if (!(correctWinner))
82- then throw("dtx:finish fail - winner is incorrect")
83- else if (!(correctSquadrons))
84- then throw("dtx:finish fail - squadrons are incorrect")
85- else if ((payoutKey != (gameId + "_winAmount")))
86- then throw("dtx:finish fail - payout key is not equal win amount key")
87- else if ((feeKey != (gameId + "_fee_amount")))
88- then throw("dtx:finish fail - fee key is not equal fee amount key")
89- else true
90- }
91- else throw(("dtx:type_unknown " + type))
92118 case tt: TransferTransaction =>
93119 let serverSigned = sigVerify(tt.bodyBytes, tt.proofs[0], tx.senderPublicKey)
94120 let recipientAddr = toBase58String(addressFromRecipient(tt.recipient).bytes)
95121 if (!(serverSigned))
96- then throw("ttx fail - tx not signed by server")
97- else if (isDefined(getString(tx.sender, (toBase58String(tt.id) + "_payout"))))
122+ then throw("t:1")
123+ else if (isDefined(getString(me, (toBase58String(tt.id) + "_payout"))))
98124 then {
99- let gameId = extract(getString(tx.sender, ("game_" + recipientAddr)))
100- let winner = extract(getString(tx.sender, (gameId + "_winner")))
125+ let gameId = extract(getString(me, ("game_" + recipientAddr)))
126+ let winner = extract(getString(me, (gameId + "_winner")))
101127 let winnerAddr = toBase58String(addressFromPublicKey(fromBase58String(winner)).bytes)
102- let winAmountKey = extract(getString(tx.sender, (toBase58String(tt.id) + "_payout")))
103- let winAmount = extract(getInteger(tx.sender, winAmountKey))
128+ let winAmountKey = extract(getString(me, (toBase58String(tt.id) + "_payout")))
129+ let winAmount = extract(getInteger(me, winAmountKey))
104130 if ((tt.amount != winAmount))
105- then throw("ttx fail - wrong payout amount")
131+ then throw("t:p:1")
106132 else if (isDefined(tt.assetId))
107- then throw("ttx fail - wrong payout asset")
133+ then throw("t:p:2")
108134 else if ((winnerAddr != recipientAddr))
109- then throw("ttx fail - wrong payout recipient")
135+ then throw("t:p:3")
110136 else true
111137 }
112- else if (isDefined(getString(tx.sender, (toBase58String(tt.id) + "_fee"))))
138+ else if (isDefined(getString(me, (toBase58String(tt.id) + "_fee"))))
113139 then {
114- let feeAmountKey = extract(getString(tx.sender, (toBase58String(tt.id) + "_fee")))
115- let feeAmount = extract(getInteger(tx.sender, feeAmountKey))
140+ let feeAmountKey = extract(getString(me, (toBase58String(tt.id) + "_fee")))
141+ let feeAmount = extract(getInteger(me, feeAmountKey))
116142 if ((tt.amount != feeAmount))
117- then throw("ttx fail - wrong fee amount")
143+ then throw("t:f:1")
118144 else if (isDefined(tt.assetId))
119- then throw("ttx fail - wrong fee asset")
145+ then throw("t:f:2")
120146 else if ((recipientAddr != feeAddress))
121- then throw("ttx fail - wrong fee recipient")
147+ then throw("t:f:3")
122148 else true
123149 }
124- else throw("ttx fail - unknown ttx")
150+ else if (isDefined(getInteger(me, (toBase58String(tt.id) + "_refund_amount"))))
151+ then {
152+ let refundAmount = extract(getInteger(me, (toBase58String(tt.id) + "_refund_amount")))
153+ let refundRecipient = extract(getString(me, (toBase58String(tt.id) + "_refund_recipient")))
154+ if ((tt.amount != refundAmount))
155+ then throw("t:r:1")
156+ else if (isDefined(tt.assetId))
157+ then throw("t:r:2")
158+ else if ((recipientAddr != refundRecipient))
159+ then throw("t:r:3")
160+ else true
161+ }
162+ else throw("t:2")
125163 case st: SetScriptTransaction =>
126164 sigVerify(st.bodyBytes, st.proofs[0], tx.senderPublicKey)
127165 case _ =>
128166 false
129167 }

github/deemru/w8io/3ef1775 
67.78 ms