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:
Old | New | | Differences |
---|
12 | 12 | | let player1TxId = extract(getString(dt.data, (gameId + "_tx1"))) |
---|
13 | 13 | | let player2 = extract(getString(dt.data, (gameId + "_player2"))) |
---|
14 | 14 | | 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) |
---|
20 | 18 | | then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId))) |
---|
21 | 19 | | else false) |
---|
22 | 20 | | then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId))) |
---|
|
25 | 23 | | let player2Tx = transactionById(fromBase58String(player2TxId)) |
---|
26 | 24 | | let tr1Ok = match player1Tx { |
---|
27 | 25 | | case t: TransferTransaction => |
---|
28 | | - | if (if ((t.amount == betAmount)) |
---|
| 26 | + | if (if (if ((t.amount == betAmount)) |
---|
29 | 27 | | then !(isDefined(t.assetId)) |
---|
| 28 | + | else false) |
---|
| 29 | + | then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId) |
---|
30 | 30 | | else false) |
---|
31 | 31 | | then (t.recipient == tx.sender) |
---|
32 | 32 | | else false |
---|
|
35 | 35 | | } |
---|
36 | 36 | | let tr2Ok = match player2Tx { |
---|
37 | 37 | | case t: TransferTransaction => |
---|
38 | | - | if (if ((t.amount == betAmount)) |
---|
| 38 | + | if (if (if ((t.amount == betAmount)) |
---|
39 | 39 | | then !(isDefined(t.assetId)) |
---|
| 40 | + | else false) |
---|
| 41 | + | then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId) |
---|
40 | 42 | | else false) |
---|
41 | 43 | | then (t.recipient == tx.sender) |
---|
42 | 44 | | else false |
---|
43 | 45 | | case _ => |
---|
44 | 46 | | false |
---|
45 | 47 | | } |
---|
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)))))) |
---|
49 | 49 | | } |
---|
50 | 50 | | else if ((type == "finish")) |
---|
51 | 51 | | then true |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 1 #-} |
---|
2 | 2 | | {-# CONTENT_TYPE EXPRESSION #-} |
---|
3 | 3 | | match tx { |
---|
4 | 4 | | case dt: DataTransaction => |
---|
5 | 5 | | let type = extract(getString(dt.data, "type")) |
---|
6 | 6 | | let gameId = extract(getString(dt.data, "gameId")) |
---|
7 | 7 | | let serverSigned = sigVerify(dt.bodyBytes, dt.proofs[0], tx.senderPublicKey) |
---|
8 | 8 | | if ((type == "start")) |
---|
9 | 9 | | then { |
---|
10 | 10 | | let betAmount = extract(getInteger(dt.data, (gameId + "_amount"))) |
---|
11 | 11 | | let player1 = extract(getString(dt.data, (gameId + "_player1"))) |
---|
12 | 12 | | let player1TxId = extract(getString(dt.data, (gameId + "_tx1"))) |
---|
13 | 13 | | let player2 = extract(getString(dt.data, (gameId + "_player2"))) |
---|
14 | 14 | | 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) |
---|
20 | 18 | | then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId))) |
---|
21 | 19 | | else false) |
---|
22 | 20 | | then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId))) |
---|
23 | 21 | | else false |
---|
24 | 22 | | let player1Tx = transactionById(fromBase58String(player1TxId)) |
---|
25 | 23 | | let player2Tx = transactionById(fromBase58String(player2TxId)) |
---|
26 | 24 | | let tr1Ok = match player1Tx { |
---|
27 | 25 | | case t: TransferTransaction => |
---|
28 | | - | if (if ((t.amount == betAmount)) |
---|
| 26 | + | if (if (if ((t.amount == betAmount)) |
---|
29 | 27 | | then !(isDefined(t.assetId)) |
---|
| 28 | + | else false) |
---|
| 29 | + | then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player1)).bytes)))) == gameId) |
---|
30 | 30 | | else false) |
---|
31 | 31 | | then (t.recipient == tx.sender) |
---|
32 | 32 | | else false |
---|
33 | 33 | | case _ => |
---|
34 | 34 | | false |
---|
35 | 35 | | } |
---|
36 | 36 | | let tr2Ok = match player2Tx { |
---|
37 | 37 | | case t: TransferTransaction => |
---|
38 | | - | if (if ((t.amount == betAmount)) |
---|
| 38 | + | if (if (if ((t.amount == betAmount)) |
---|
39 | 39 | | then !(isDefined(t.assetId)) |
---|
| 40 | + | else false) |
---|
| 41 | + | then (extract(getString(dt.data, ("game_" + toBase58String(addressFromPublicKey(fromBase58String(player2)).bytes)))) == gameId) |
---|
40 | 42 | | else false) |
---|
41 | 43 | | then (t.recipient == tx.sender) |
---|
42 | 44 | | else false |
---|
43 | 45 | | case _ => |
---|
44 | 46 | | false |
---|
45 | 47 | | } |
---|
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)))))) |
---|
49 | 49 | | } |
---|
50 | 50 | | else if ((type == "finish")) |
---|
51 | 51 | | then true |
---|
52 | 52 | | else if ((type == "payout")) |
---|
53 | 53 | | then true |
---|
54 | 54 | | else if ((type == "refund")) |
---|
55 | 55 | | then true |
---|
56 | 56 | | else throw(("dtx:type_unknown " + type)) |
---|
57 | 57 | | case tt: TransferTransaction => |
---|
58 | 58 | | sigVerify(tt.bodyBytes, tt.proofs[0], tx.senderPublicKey) |
---|
59 | 59 | | case st: SetScriptTransaction => |
---|
60 | 60 | | sigVerify(st.bodyBytes, st.proofs[0], tx.senderPublicKey) |
---|
61 | 61 | | case _ => |
---|
62 | 62 | | false |
---|
63 | 63 | | } |
---|