tx · Gq5LDbrXUnFLGhaeRuCETmtuszScLiRD3xDbqHjVgvEr

3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g:  -0.01400000 Waves

2019.03.05 18:32 [522817] smart account 3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g > SELF 0.00000000 Waves

{ "type": 13, "id": "Gq5LDbrXUnFLGhaeRuCETmtuszScLiRD3xDbqHjVgvEr", "fee": 1400000, "feeAssetId": null, "timestamp": 1551800015075, "version": 1, "sender": "3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g", "senderPublicKey": "CEx6vd7D5Czxcfshd4vLpSw4LEmGULQw5avVZ7Vfrzgo", "proofs": [ "4r4mJPyT3Cn4yd2x1FJ8U9Y9Yri7efcanWaguX3c8sHEzAj5rJLh5VdabcTPHvsTM59JQzfhKv97z2FGuJHnw8Xy" ], "script": "base64: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", "chainId": 84, "height": 522817, "spentComplexity": 0 } View: original | compacted Prev: DMwdxGVi6WvfFGhaMaN3xjRuemoRgna135cMzSYWMDrW Next: 8E9eFXsfjdNghQfNTd4CjxnaostzQov1QCJKg7Py5jQU Diff:
OldNewDifferences
6565 let squadron2 = extract(getBinary(dt.data, (gameId + "_squadron2")))
6666 let gameSalt = extract(getBinary(dt.data, (gameId + "_salt")))
6767 let correctSquadrons = (sha256(((squadron1 + squadron2) + gameSalt)) == extract(getBinary(tx.sender, (gameId + "_squadronHash"))))
68- if (correctWinner)
69- then throw("winner correct")
70- else throw("winner incorrect")
68+ if (!(serverSigned))
69+ then throw("not server signed")
70+ else if (!(correctWinner))
71+ then throw("winner incorrect")
72+ else if (!(correctSquadrons))
73+ then throw("squadrons incorrect")
74+ else throw("dtx:finish ok")
7175 }
7276 else if ((type == "payout"))
7377 then throw("dtx:payout - success")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 1 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
33 match tx {
44 case dt: DataTransaction =>
55 let type = extract(getString(dt.data, "type"))
66 let gameId = extract(getString(dt.data, "gameId"))
77 let serverSigned = sigVerify(dt.bodyBytes, dt.proofs[0], tx.senderPublicKey)
88 if ((type == "start"))
99 then {
1010 let betAmount = extract(getInteger(dt.data, (gameId + "_amount")))
1111 let player1 = extract(getString(dt.data, (gameId + "_player1")))
1212 let player1TxId = extract(getString(dt.data, (gameId + "_tx1")))
1313 let player2 = extract(getString(dt.data, (gameId + "_player2")))
1414 let player2TxId = extract(getString(dt.data, (gameId + "_tx2")))
1515 let dtStartDataDefined = if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
1616 then isDefined(getBinary(dt.data, (gameId + "_squadronHash")))
1717 else false)
1818 then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))
1919 else false)
2020 then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))
2121 else false
2222 let player1Tx = transactionById(fromBase58String(player1TxId))
2323 let player2Tx = transactionById(fromBase58String(player2TxId))
2424 let tr1Ok = match player1Tx {
2525 case t: TransferTransaction =>
2626 if (if (if ((t.amount == betAmount))
2727 then !(isDefined(t.assetId))
2828 else false)
2929 then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId)
3030 else false)
3131 then (t.recipient == tx.sender)
3232 else false
3333 case _ =>
3434 false
3535 }
3636 let tr2Ok = match player2Tx {
3737 case t: TransferTransaction =>
3838 if (if (if ((t.amount == betAmount))
3939 then !(isDefined(t.assetId))
4040 else false)
4141 then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
4242 else false)
4343 then (t.recipient == tx.sender)
4444 else false
4545 case _ =>
4646 false
4747 }
4848 if (!(serverSigned))
4949 then throw("not server signed")
5050 else if (!(tr1Ok))
5151 then throw("not tr1 ok")
5252 else if (!(tr2Ok))
5353 then throw("not tr2 ok")
5454 else if (!(dtStartDataDefined))
5555 then throw("not dt start data defined")
5656 else true
5757 }
5858 else if ((type == "finish"))
5959 then {
6060 let winner = extract(getString(dt.data, (gameId + "_winner")))
6161 let correctWinner = if ((winner == extract(getString(tx.sender, (gameId + "_player1")))))
6262 then true
6363 else (winner == extract(getString(tx.sender, (gameId + "_player2"))))
6464 let squadron1 = extract(getBinary(dt.data, (gameId + "_squadron1")))
6565 let squadron2 = extract(getBinary(dt.data, (gameId + "_squadron2")))
6666 let gameSalt = extract(getBinary(dt.data, (gameId + "_salt")))
6767 let correctSquadrons = (sha256(((squadron1 + squadron2) + gameSalt)) == extract(getBinary(tx.sender, (gameId + "_squadronHash"))))
68- if (correctWinner)
69- then throw("winner correct")
70- else throw("winner incorrect")
68+ if (!(serverSigned))
69+ then throw("not server signed")
70+ else if (!(correctWinner))
71+ then throw("winner incorrect")
72+ else if (!(correctSquadrons))
73+ then throw("squadrons incorrect")
74+ else throw("dtx:finish ok")
7175 }
7276 else if ((type == "payout"))
7377 then throw("dtx:payout - success")
7478 else if ((type == "refund"))
7579 then throw("dtx:refund - success")
7680 else throw(("dtx:type_unknown " + type))
7781 case tt: TransferTransaction =>
7882 sigVerify(tt.bodyBytes, tt.proofs[0], tx.senderPublicKey)
7983 case st: SetScriptTransaction =>
8084 sigVerify(st.bodyBytes, st.proofs[0], tx.senderPublicKey)
8185 case _ =>
8286 false
8387 }

github/deemru/w8io/3ef1775 
51.88 ms