tx · 93PeCPKGjjxCQ3RFwb4bwx9QsEaRDLZBiNYkuX6SsWEi 3P89GyrcNa5dQkYSmesYa6KyeJoCuuVdCz9: -0.01400000 Waves 2020.01.07 23:00 [1874398] smart account 3P89GyrcNa5dQkYSmesYa6KyeJoCuuVdCz9 > SELF 0.00000000 Waves
{ "type": 13, "id": "93PeCPKGjjxCQ3RFwb4bwx9QsEaRDLZBiNYkuX6SsWEi", "fee": 1400000, "feeAssetId": null, "timestamp": 1578427093401, "version": 1, "sender": "3P89GyrcNa5dQkYSmesYa6KyeJoCuuVdCz9", "senderPublicKey": "6ZJKMPB6S6K9MF8YNg9ppUmWavmC3KCebp1JeaEBdHu1", "proofs": [ "2BdqcwC1wQUBi4EZMaa7vyCawGt79FMKhPd7NkrSZomGPE3PEqATaBeLogTo6YsiQMyUQULxwwUxpjTG2BJkyGuG", "3KZhaVt5pCor7DuFK7qaGMp6gd31gykuJ6Cu9As4egnfvGR4pirCgTCfuNsDQZiYHN21EzXsCVWEfkrCRd9V3rh1" ], "script": "base64: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", "chainId": 87, "height": 1874398, "spentComplexity": 0 } View: original | compacted Prev: FtkxY2GGuNe5Qdfzm2RrTZvjDPVxtcQbzgQuw7hbKkYN Next: 6bMHy6UfXsRKAUJ8qz5w1UyGyotvzT8jyFKc7hEp2TA5 Diff:
Old | New | Differences | |
---|---|---|---|
8 | 8 | let matcherFeeId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
9 | 9 | let payoutAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
10 | 10 | let traderPubKey = extract(tx.senderPublicKey) | |
11 | - | let managerPubKey = base58' | |
12 | - | let investorPubKeys = [base58' | |
11 | + | let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT' | |
12 | + | let investorPubKeys = [base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'] | |
13 | 13 | func isFiatAsset (assetId) = if (if (if (if (if ((assetId == base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck')) | |
14 | 14 | then true | |
15 | 15 | else (assetId == base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU')) | |
56 | 56 | then sigVerify(b.bodyBytes, b.proofs[0], traderPubKey) | |
57 | 57 | else false | |
58 | 58 | case t: TransferTransaction => | |
59 | + | let recipient = addressFromRecipient(t.recipient) | |
59 | 60 | let rightTransfer = if (if ((t.assetId == payoutAssetId)) | |
60 | - | then ( | |
61 | + | then (recipient == addressFromString(payoutAddress)) | |
61 | 62 | else false) | |
62 | 63 | then true | |
63 | 64 | else if (if ((t.assetId == priceAssetId)) | |
64 | 65 | then true | |
65 | 66 | else (t.assetId == amountAssetId)) | |
66 | - | then ( | |
67 | + | then (recipient == addressFromString(redeemAddress)) | |
67 | 68 | else false | |
68 | 69 | if (rightTransfer) | |
69 | 70 | then if (sigVerify(t.bodyBytes, t.proofs[1], managerPubKey)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# CONTENT_TYPE EXPRESSION #-} | |
3 | 3 | let payoutAddress = "3P8uxNCMRWjj2DUWAXaRXF4Q4thX9jQxXcs" | |
4 | 4 | let redeemAddress = "3PAkNyfHB5NV9jXioZ1DG3mynhUZyUzHWML" | |
5 | 5 | let lockExpired = (value(lastBlock.timestamp) >= (1609459200 * 1000)) | |
6 | 6 | let priceAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
7 | 7 | let amountAssetId = base58'EYz8Zvs62D4d7F5ZgXHCWuzuFaZg63FYnfVQrTWQoLSK' | |
8 | 8 | let matcherFeeId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
9 | 9 | let payoutAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
10 | 10 | let traderPubKey = extract(tx.senderPublicKey) | |
11 | - | let managerPubKey = base58' | |
12 | - | let investorPubKeys = [base58' | |
11 | + | let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT' | |
12 | + | let investorPubKeys = [base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'] | |
13 | 13 | func isFiatAsset (assetId) = if (if (if (if (if ((assetId == base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck')) | |
14 | 14 | then true | |
15 | 15 | else (assetId == base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU')) | |
16 | 16 | then true | |
17 | 17 | else (assetId == base58'DEJbZipbKQjwEiRjx2AqQFucrj5CZ3rAc4ZvFM8nAsoA')) | |
18 | 18 | then true | |
19 | 19 | else (assetId == base58'2mX5DzVKWrAJw8iwdJnV2qtoeVG9h5nTDpTqC1wb1WEN')) | |
20 | 20 | then true | |
21 | 21 | else (assetId == base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ')) | |
22 | 22 | then true | |
23 | 23 | else (assetId == base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p') | |
24 | 24 | ||
25 | 25 | match tx { | |
26 | 26 | case o: Order => | |
27 | 27 | let rightOrder = if (if (if ((o.matcherFeeAssetId == matcherFeeId)) | |
28 | 28 | then (o.assetPair.priceAsset == priceAssetId) | |
29 | 29 | else false) | |
30 | 30 | then (o.assetPair.amountAsset == amountAssetId) | |
31 | 31 | else false) | |
32 | 32 | then true | |
33 | 33 | else if (if (if ((o.orderType == Sell)) | |
34 | 34 | then !(isDefined(o.matcherFeeAssetId)) | |
35 | 35 | else false) | |
36 | 36 | then if (!(isDefined(o.assetPair.priceAsset))) | |
37 | 37 | then true | |
38 | 38 | else !(isDefined(o.assetPair.amountAsset)) | |
39 | 39 | else false) | |
40 | 40 | then !(isFiatAsset(o.assetPair.priceAsset)) | |
41 | 41 | else false | |
42 | 42 | if (rightOrder) | |
43 | 43 | then sigVerify(o.bodyBytes, o.proofs[0], traderPubKey) | |
44 | 44 | else false | |
45 | 45 | case b: BurnTransaction => | |
46 | 46 | let rightBurn = if (if ((b.assetId != payoutAssetId)) | |
47 | 47 | then (b.assetId != if (isDefined(priceAssetId)) | |
48 | 48 | then priceAssetId | |
49 | 49 | else base58'') | |
50 | 50 | else false) | |
51 | 51 | then (b.assetId != if (isDefined(amountAssetId)) | |
52 | 52 | then amountAssetId | |
53 | 53 | else base58'') | |
54 | 54 | else false | |
55 | 55 | if (rightBurn) | |
56 | 56 | then sigVerify(b.bodyBytes, b.proofs[0], traderPubKey) | |
57 | 57 | else false | |
58 | 58 | case t: TransferTransaction => | |
59 | + | let recipient = addressFromRecipient(t.recipient) | |
59 | 60 | let rightTransfer = if (if ((t.assetId == payoutAssetId)) | |
60 | - | then ( | |
61 | + | then (recipient == addressFromString(payoutAddress)) | |
61 | 62 | else false) | |
62 | 63 | then true | |
63 | 64 | else if (if ((t.assetId == priceAssetId)) | |
64 | 65 | then true | |
65 | 66 | else (t.assetId == amountAssetId)) | |
66 | - | then ( | |
67 | + | then (recipient == addressFromString(redeemAddress)) | |
67 | 68 | else false | |
68 | 69 | if (rightTransfer) | |
69 | 70 | then if (sigVerify(t.bodyBytes, t.proofs[1], managerPubKey)) | |
70 | 71 | then true | |
71 | 72 | else lockExpired | |
72 | 73 | else false | |
73 | 74 | case s: SetScriptTransaction => | |
74 | 75 | let keys = extract(s.senderPublicKey) :: investorPubKeys | |
75 | 76 | let rightSetScript = ((if (sigVerify(s.bodyBytes, s.proofs[1], keys[1])) | |
76 | 77 | then 1 | |
77 | 78 | else 0) > (size(investorPubKeys) / 2)) | |
78 | 79 | if (rightSetScript) | |
79 | 80 | then sigVerify(s.bodyBytes, s.proofs[0], keys[0]) | |
80 | 81 | else false | |
81 | 82 | case _ => | |
82 | 83 | false | |
83 | 84 | } |
github/deemru/w8io/3ef1775 59.09 ms ◑