tx · 2jztBp8Upc83j3LYGseTTgbpWqpHEKTBwdAuKzcBNeq9 3MxtQrEmBbDFbySn3ayXvcRjZbyScx4xzzc: -0.01000000 Waves 2018.12.16 07:35 [406885] smart account 3MxtQrEmBbDFbySn3ayXvcRjZbyScx4xzzc > SELF 0.00000000 Waves
{ "type": 13, "id": "2jztBp8Upc83j3LYGseTTgbpWqpHEKTBwdAuKzcBNeq9", "fee": 1000000, "feeAssetId": null, "timestamp": 1544934918682, "version": 1, "sender": "3MxtQrEmBbDFbySn3ayXvcRjZbyScx4xzzc", "senderPublicKey": "8eoHp1Jim29PQhkXAFXPJz9VisX26f32aDzcruV2oAp6", "proofs": [ "wZfJV1VmKoSKP1emnNwHEeW1UWWniCCfCsBy5CSGPb9vdjotuMHRMebZnK6YujHr9zvrK6u73GFi1aGZSVuJQ5v" ], "script": "base64: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", "chainId": 84, "height": 406885, "spentComplexity": 0 } View: original | compacted Prev: none Next: FuDNeLRg4dW2EQieV6sNAM4hPyNdMiRkJTcfk1WSTnK2 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 1 #-} | |
2 | + | {-# CONTENT_TYPE EXPRESSION #-} | |
3 | + | let dealer = base58'BrpLMJrt3XATLKfqc24Vf95caJgpz781uz58riLeJAQj' | |
4 | + | let dealerAddress = addressFromPublicKey(base58'BrpLMJrt3XATLKfqc24Vf95caJgpz781uz58riLeJAQj') | |
5 | + | let player = base58'2KwU4vzdgPmKyf7q354H9kSyX9NZjNiq4qbnH2wi2VDF' | |
6 | + | let playerAddress = addressFromPublicKey(base58'2KwU4vzdgPmKyf7q354H9kSyX9NZjNiq4qbnH2wi2VDF') | |
7 | + | let multiSigAddress = addressFromPublicKey(base58'8eoHp1Jim29PQhkXAFXPJz9VisX26f32aDzcruV2oAp6') | |
8 | + | match tx { | |
9 | + | case tx: DataTransaction => | |
10 | + | let dealerSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], dealer)) | |
11 | + | then 1 | |
12 | + | else 0 | |
13 | + | let playerSigned = if (sigVerify(tx.bodyBytes, tx.proofs[1], player)) | |
14 | + | then 1 | |
15 | + | else 0 | |
16 | + | let block = extract(getInteger(multiSigAddress, "block")) | |
17 | + | if ((block > 0)) | |
18 | + | then { | |
19 | + | let method = extract(getString(tx.data, "method")) | |
20 | + | if ((method == "game")) | |
21 | + | then { | |
22 | + | let lastBlock = extract(getInteger(multiSigAddress, "lastBlock")) | |
23 | + | let newLastBlock = extract(getInteger(tx.data, "lastBlock")) | |
24 | + | if ((newLastBlock > lastBlock)) | |
25 | + | then ((dealerSigned + playerSigned) == 2) | |
26 | + | else false | |
27 | + | } | |
28 | + | else if ((method == "getSaltDealer")) | |
29 | + | then (playerSigned == 1) | |
30 | + | else if ((method == "getSaltPlayer")) | |
31 | + | then (dealerSigned == 1) | |
32 | + | else if ((method == "setSaltPlayer")) | |
33 | + | then { | |
34 | + | let hashLastGame = extract(getString(multiSigAddress, "hashLastGame")) | |
35 | + | let hashLastBlock = extract(getString(multiSigAddress, "hashLastBlock")) | |
36 | + | let saltPlayer = extract(getString(tx.data, "saltPlayer")) | |
37 | + | if ((sha256(toBytes((saltPlayer + hashLastBlock))) == toBytes(hashLastBlock))) | |
38 | + | then (playerSigned == 1) | |
39 | + | else false | |
40 | + | } | |
41 | + | else if ((method == "setSaltDealer")) | |
42 | + | then { | |
43 | + | let hashLastGame = extract(getString(multiSigAddress, "hashLastGame")) | |
44 | + | let hashLastBlock = extract(getString(multiSigAddress, "hashLastBlock")) | |
45 | + | let saltDealer = extract(getString(tx.data, "saltDealer")) | |
46 | + | if ((sha256(toBytes((saltDealer + hashLastGame))) == toBytes(hashLastBlock))) | |
47 | + | then (dealerSigned == 1) | |
48 | + | else false | |
49 | + | } | |
50 | + | else false | |
51 | + | } | |
52 | + | else { | |
53 | + | let newBlock = extract(getInteger(tx.data, "block")) | |
54 | + | (newBlock > 0) | |
55 | + | } | |
56 | + | case tt: TransferTransaction => | |
57 | + | let failurePayOut = extract(getBoolean(multiSigAddress, "failurePayOut")) | |
58 | + | let lastBlock = extract(getInteger(multiSigAddress, "lastBlock")) | |
59 | + | if ((tt.recipient == multiSigAddress)) | |
60 | + | then if ((dealerAddress == tt.sender)) | |
61 | + | then (tt.amount != 0) | |
62 | + | else (tt.amount != 0) | |
63 | + | else if (if ((failurePayOut == true)) | |
64 | + | then (height > lastBlock) | |
65 | + | else false) | |
66 | + | then true | |
67 | + | else false | |
68 | + | case mtx: MassTransferTransaction => | |
69 | + | if ((mtx.sender == multiSigAddress)) | |
70 | + | then { | |
71 | + | let block = extract(getInteger(multiSigAddress, "block")) | |
72 | + | if ((height > block)) | |
73 | + | then true | |
74 | + | else { | |
75 | + | let failurePayOut = extract(getBoolean(multiSigAddress, "failurePayOut")) | |
76 | + | let lastBlock = extract(getInteger(multiSigAddress, "lastBlock")) | |
77 | + | if (((lastBlock + 3) > height)) | |
78 | + | then if ((failurePayOut == false)) | |
79 | + | then { | |
80 | + | let dealerSigned = if (sigVerify(mtx.bodyBytes, mtx.proofs[0], dealer)) | |
81 | + | then 1 | |
82 | + | else 0 | |
83 | + | let playerSigned = if (sigVerify(mtx.bodyBytes, mtx.proofs[1], player)) | |
84 | + | then 1 | |
85 | + | else 0 | |
86 | + | ((dealerSigned + playerSigned) == 2) | |
87 | + | } | |
88 | + | else false | |
89 | + | else false | |
90 | + | } | |
91 | + | } | |
92 | + | else false | |
93 | + | case ta: SetScriptTransaction => | |
94 | + | true | |
95 | + | case _ => | |
96 | + | false | |
97 | + | } |
github/deemru/w8io/026f985 19.32 ms ◑