tx · E7yKhBZWJuyku6nFsWdrx4yc6rza3Dxm4M5ChjJimHur

3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g:  -0.01400000 Waves

2019.03.05 18:00 [522783] smart account 3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g > SELF 0.00000000 Waves

{ "type": 13, "id": "E7yKhBZWJuyku6nFsWdrx4yc6rza3Dxm4M5ChjJimHur", "fee": 1400000, "feeAssetId": null, "timestamp": 1551797986475, "version": 1, "sender": "3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g", "senderPublicKey": "CEx6vd7D5Czxcfshd4vLpSw4LEmGULQw5avVZ7Vfrzgo", "proofs": [ "21L6yvuPuhdcnzdyvQk9RqbZziL1RACjB7nNrK6faCRy5mX5sLYckLUyLSCdBGxUVt1J6PC99dTYtnFiabo5pPzi" ], "script": "base64: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", "chainId": 84, "height": 522783, "spentComplexity": 0 } View: original | compacted Prev: 5SKgDvqJpvFsnoJHVpFJ4kJsjbNqjZ7b1WXFaYUmucTy Next: 2tgTniRMz6NhQXbqr8N8LXRraaveLwxr6Y7QUiBnLNBx Diff:
OldNewDifferences
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")))
15- let hash = extract(getBinary(dt.data, (gameId + "_hash")))
16- let v1 = extract(getBinary(dt.data, (gameId + "_v1")))
17- let v2 = extract(getBinary(dt.data, (gameId + "_v2")))
18- let v3 = extract(getBinary(dt.data, (gameId + "_v3")))
19- let dtStartDataDefined = if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
15+ let dtStartDataDefined = if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
16+ then isDefined(getBinary(dt.data, (gameId + "_squadronHash")))
17+ else false)
2018 then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))
2119 else false)
2220 then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))
2523 let player2Tx = transactionById(fromBase58String(player2TxId))
2624 let tr1Ok = match player1Tx {
2725 case t: TransferTransaction =>
28- if (if ((t.amount == betAmount))
26+ if (if (if ((t.amount == betAmount))
2927 then !(isDefined(t.assetId))
28+ else false)
29+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId)
3030 else false)
3131 then (t.recipient == tx.sender)
3232 else false
3535 }
3636 let tr2Ok = match player2Tx {
3737 case t: TransferTransaction =>
38- if (if ((t.amount == betAmount))
38+ if (if (if ((t.amount == betAmount))
3939 then !(isDefined(t.assetId))
40+ else false)
41+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
4042 else false)
4143 then (t.recipient == tx.sender)
4244 else false
4345 case _ =>
4446 false
4547 }
46- if ((hash == sha256(((v1 + v2) + v3))))
47- then throw("hash equal")
48- else throw("hash not equal")
48+ throw((extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) + extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes))))))
4949 }
5050 else if ((type == "finish"))
5151 then true
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")))
15- let hash = extract(getBinary(dt.data, (gameId + "_hash")))
16- let v1 = extract(getBinary(dt.data, (gameId + "_v1")))
17- let v2 = extract(getBinary(dt.data, (gameId + "_v2")))
18- let v3 = extract(getBinary(dt.data, (gameId + "_v3")))
19- let dtStartDataDefined = if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
15+ let dtStartDataDefined = if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount"))))
16+ then isDefined(getBinary(dt.data, (gameId + "_squadronHash")))
17+ else false)
2018 then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId)))
2119 else false)
2220 then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId)))
2321 else false
2422 let player1Tx = transactionById(fromBase58String(player1TxId))
2523 let player2Tx = transactionById(fromBase58String(player2TxId))
2624 let tr1Ok = match player1Tx {
2725 case t: TransferTransaction =>
28- if (if ((t.amount == betAmount))
26+ if (if (if ((t.amount == betAmount))
2927 then !(isDefined(t.assetId))
28+ else false)
29+ 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 =>
38- if (if ((t.amount == betAmount))
38+ if (if (if ((t.amount == betAmount))
3939 then !(isDefined(t.assetId))
40+ else false)
41+ then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId)
4042 else false)
4143 then (t.recipient == tx.sender)
4244 else false
4345 case _ =>
4446 false
4547 }
46- if ((hash == sha256(((v1 + v2) + v3))))
47- then throw("hash equal")
48- else throw("hash not equal")
48+ throw((extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) + extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes))))))
4949 }
5050 else if ((type == "finish"))
5151 then true
5252 else if ((type == "payout"))
5353 then true
5454 else if ((type == "refund"))
5555 then true
5656 else throw(("dtx:type_unknown " + type))
5757 case tt: TransferTransaction =>
5858 sigVerify(tt.bodyBytes, tt.proofs[0], tx.senderPublicKey)
5959 case st: SetScriptTransaction =>
6060 sigVerify(st.bodyBytes, st.proofs[0], tx.senderPublicKey)
6161 case _ =>
6262 false
6363 }

github/deemru/w8io/3ef1775 
49.74 ms