tx · 6YD5vfr4pQYEhAyFb1iChDbqoravc8jTxXCVRR9QpKSV 3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g: -0.01400000 Waves 2019.03.05 16:00 [522660] smart account 3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g > SELF 0.00000000 Waves
{ "type": 13, "id": "6YD5vfr4pQYEhAyFb1iChDbqoravc8jTxXCVRR9QpKSV", "fee": 1400000, "feeAssetId": null, "timestamp": 1551790889622, "version": 1, "sender": "3MrTMXEvaz63AHA6K7U5hDgTY54gZZe3R4g", "senderPublicKey": "CEx6vd7D5Czxcfshd4vLpSw4LEmGULQw5avVZ7Vfrzgo", "proofs": [ "P4mzE5fJMNdeMcsSpucEtMh2tNEf4MpFbdeoqx3tH7jRwy2feTbpFfmRCZ2Pb8H9cgaATvMogExbAKFgfVaMUTZ" ], "script": "base64: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", "chainId": 84, "height": 522660, "spentComplexity": 0 } View: original | compacted Prev: 4evZaGC8rnZvz6Gk8cxeu7BHjYmh8cbCLUVuzmgFoACP Next: 6FBEo2WHTk4aRPSW5dqnhxBKzJEVHnNMUX3WiRjpxgS3 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 dtStartDataDefined = if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount")))) | |
16 | + | then isDefined(getBinary(dt.data, (gameId + "_squadronHash"))) | |
17 | + | else false) | |
18 | + | then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId))) | |
19 | + | else false) | |
20 | + | then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId))) | |
21 | + | else false | |
15 | 22 | let player1Tx = transactionById(fromBase58String(player1TxId)) | |
16 | 23 | let player2Tx = transactionById(fromBase58String(player2TxId)) | |
17 | 24 | let tr1Ok = match player1Tx { | |
34 | 41 | case _ => | |
35 | 42 | false | |
36 | 43 | } | |
37 | - | if (tr1Ok) | |
38 | - | then throw("tr1 ok") | |
39 | - | else if (tr2Ok) | |
40 | - | then throw("tr1 not ok, tr2 ok") | |
41 | - | else throw("tr1 not ok, tr2 not ok") | |
44 | + | if (dtStartDataDefined) | |
45 | + | then throw("dt start data defined") | |
46 | + | else throw("dt start data undefined") | |
42 | 47 | } | |
43 | 48 | else if ((type == "finish")) | |
44 | 49 | then true |
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 dtStartDataDefined = if (if (if (isDefined(getInteger(dt.data, (gameId + "_winAmount")))) | |
16 | + | then isDefined(getBinary(dt.data, (gameId + "_squadronHash"))) | |
17 | + | else false) | |
18 | + | then isDefined(getBoolean(dt.data, ("used_tx_" + player1TxId))) | |
19 | + | else false) | |
20 | + | then isDefined(getBoolean(dt.data, ("used_tx_" + player2TxId))) | |
21 | + | else false | |
15 | 22 | let player1Tx = transactionById(fromBase58String(player1TxId)) | |
16 | 23 | let player2Tx = transactionById(fromBase58String(player2TxId)) | |
17 | 24 | let tr1Ok = match player1Tx { | |
18 | 25 | case t: TransferTransaction => | |
19 | 26 | if (if ((t.amount == betAmount)) | |
20 | 27 | then !(isDefined(t.assetId)) | |
21 | 28 | else false) | |
22 | 29 | then (t.recipient == tx.sender) | |
23 | 30 | else false | |
24 | 31 | case _ => | |
25 | 32 | false | |
26 | 33 | } | |
27 | 34 | let tr2Ok = match player2Tx { | |
28 | 35 | case t: TransferTransaction => | |
29 | 36 | if (if ((t.amount == betAmount)) | |
30 | 37 | then !(isDefined(t.assetId)) | |
31 | 38 | else false) | |
32 | 39 | then (t.recipient == tx.sender) | |
33 | 40 | else false | |
34 | 41 | case _ => | |
35 | 42 | false | |
36 | 43 | } | |
37 | - | if (tr1Ok) | |
38 | - | then throw("tr1 ok") | |
39 | - | else if (tr2Ok) | |
40 | - | then throw("tr1 not ok, tr2 ok") | |
41 | - | else throw("tr1 not ok, tr2 not ok") | |
44 | + | if (dtStartDataDefined) | |
45 | + | then throw("dt start data defined") | |
46 | + | else throw("dt start data undefined") | |
42 | 47 | } | |
43 | 48 | else if ((type == "finish")) | |
44 | 49 | then true | |
45 | 50 | else if ((type == "payout")) | |
46 | 51 | then true | |
47 | 52 | else if ((type == "refund")) | |
48 | 53 | then true | |
49 | 54 | else throw(("dtx:type_unknown " + type)) | |
50 | 55 | case tt: TransferTransaction => | |
51 | 56 | sigVerify(tt.bodyBytes, tt.proofs[0], tx.senderPublicKey) | |
52 | 57 | case st: SetScriptTransaction => | |
53 | 58 | sigVerify(st.bodyBytes, st.proofs[0], tx.senderPublicKey) | |
54 | 59 | case _ => | |
55 | 60 | false | |
56 | 61 | } |
github/deemru/w8io/873ac7e 23.84 ms ◑![]()