tx · 9iQF6Mh8F6J58wWRqmJbAtQvC7yTAfch4zvRRPQnF2jv 3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2: -0.01400000 Waves 2020.10.19 01:27 [2290314] smart account 3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2 > SELF 0.00000000 Waves
{ "type": 13, "id": "9iQF6Mh8F6J58wWRqmJbAtQvC7yTAfch4zvRRPQnF2jv", "fee": 1400000, "feeAssetId": null, "timestamp": 1603060090574, "version": 2, "chainId": 87, "sender": "3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2", "senderPublicKey": "3o7qJCobCVuW81YsLvWLKA9vbEdKavWEdatMWHcV74P3", "proofs": [ "2jLaHB9JRqnwEbC7nVqmQhsq7xhz3BXDe9ZX7R7i6MkbEKj6wQyJrVtGiJSpra1pcdpggAHjWoKabvqufxVmhjnj", "g47isXQPUPGSmMX8psUdPphZhqXVSR3Xq7KrHCDWkU8ghUNvygj36Cma4nxeeGmPZFWZEpKwoUVrFygDtKbaFkF" ], "script": "base64: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", "height": 2290314, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Cud4SLvUJdanBLbUF9icTH8xUfx7NzBMFwLFvxRVZcQQ Next: 878iEYG6DjuoCoa5tTiHLsjdiJZNyv9cQxvJw5LCeZNk Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# CONTENT_TYPE EXPRESSION #-} | |
3 | - | let scriptVersion = "v1. | |
3 | + | let scriptVersion = "v1.02-final_20201019" | |
4 | 4 | let maxFunds = (10000 * 100000) | |
5 | 5 | let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k' | |
6 | 6 | let mmbotPublicKey = base58'62KBavoHK4TtCYmURFVeNC8j3gL8Jo7WwcrweoBLWofc' | |
26 | 26 | let isValidAdmin = if (isValidOwner) | |
27 | 27 | then true | |
28 | 28 | else sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], adminPublicKey) | |
29 | - | let | |
29 | + | let validGuarantors = (((((if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], guarantors[0])) | |
30 | 30 | then 1 | |
31 | 31 | else 0) + (if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[2], guarantors[1])) | |
32 | 32 | then 1 | |
36 | 36 | then 1 | |
37 | 37 | else 0)) + (if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[5], guarantors[4])) | |
38 | 38 | then 1 | |
39 | - | else 0)) >= minSignatures) | |
39 | + | else 0)) | |
40 | + | let isValidGuarantors = (validGuarantors >= minSignatures) | |
40 | 41 | let maxSendAmount = max([0, (assetBalance(this, fmmtAsset) - maxFunds)]) | |
41 | 42 | match tx { | |
42 | - | case b: BurnTransaction => | |
43 | - | if (if (isValidOwner) | |
44 | - | then (b.assetId != xfeeAsset) | |
45 | - | else false) | |
46 | - | then !(containsElement(fixedAssets, b.assetId)) | |
47 | - | else false | |
48 | 43 | case o: Order => | |
49 | 44 | if (if (if (isValidMMBot) | |
50 | 45 | then if (if (if ((o.orderType == Buy)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# CONTENT_TYPE EXPRESSION #-} | |
3 | - | let scriptVersion = "v1. | |
3 | + | let scriptVersion = "v1.02-final_20201019" | |
4 | 4 | let maxFunds = (10000 * 100000) | |
5 | 5 | let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k' | |
6 | 6 | let mmbotPublicKey = base58'62KBavoHK4TtCYmURFVeNC8j3gL8Jo7WwcrweoBLWofc' | |
7 | 7 | let wxchgPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5' | |
8 | 8 | let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58''), valueOrElse(getBinary(this, "guarantor4"), base58''), valueOrElse(getBinary(this, "guarantor5"), base58'')] :+ base58'') | |
9 | 9 | let actualSize = value(indexOf(guarantors, base58'')) | |
10 | 10 | let minSignatures = ((actualSize / 2) + (actualSize % 2)) | |
11 | 11 | let btcAsset = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
12 | 12 | let ethAsset = base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu' | |
13 | 13 | let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ' | |
14 | 14 | let fmmtAsset = base58'7sqT7HvCVtcrCTQV72FM5so65wjzM164rzoqDZRsRXg7' | |
15 | 15 | let xfeeAsset = base58'5EMfVQiB8NF4HuhaXrZzDM637whWuVBsduq59ZaCSNqk' | |
16 | 16 | let fixedAssets = ([btcAsset, ethAsset, usdtAsset, fmmtAsset] :+ unit) | |
17 | 17 | let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x') | |
18 | 18 | let fteam = Address(base58'3P3TMgAUVtJKWHxQMdt8Ao6A1qnRyVmCSr2') | |
19 | 19 | let fsale = Address(base58'3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2') | |
20 | 20 | let fdapp = Address(base58'3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL') | |
21 | 21 | let fcold = Address(base58'3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7') | |
22 | 22 | let isValidOwner = sigVerify_8Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
23 | 23 | let isValidMMBot = if (isValidOwner) | |
24 | 24 | then true | |
25 | 25 | else sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], mmbotPublicKey) | |
26 | 26 | let isValidAdmin = if (isValidOwner) | |
27 | 27 | then true | |
28 | 28 | else sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], adminPublicKey) | |
29 | - | let | |
29 | + | let validGuarantors = (((((if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], guarantors[0])) | |
30 | 30 | then 1 | |
31 | 31 | else 0) + (if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[2], guarantors[1])) | |
32 | 32 | then 1 | |
33 | 33 | else 0)) + (if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[3], guarantors[2])) | |
34 | 34 | then 1 | |
35 | 35 | else 0)) + (if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[4], guarantors[3])) | |
36 | 36 | then 1 | |
37 | 37 | else 0)) + (if (sigVerify_8Kb(tx.bodyBytes, tx.proofs[5], guarantors[4])) | |
38 | 38 | then 1 | |
39 | - | else 0)) >= minSignatures) | |
39 | + | else 0)) | |
40 | + | let isValidGuarantors = (validGuarantors >= minSignatures) | |
40 | 41 | let maxSendAmount = max([0, (assetBalance(this, fmmtAsset) - maxFunds)]) | |
41 | 42 | match tx { | |
42 | - | case b: BurnTransaction => | |
43 | - | if (if (isValidOwner) | |
44 | - | then (b.assetId != xfeeAsset) | |
45 | - | else false) | |
46 | - | then !(containsElement(fixedAssets, b.assetId)) | |
47 | - | else false | |
48 | 43 | case o: Order => | |
49 | 44 | if (if (if (isValidMMBot) | |
50 | 45 | then if (if (if ((o.orderType == Buy)) | |
51 | 46 | then (o.assetPair.priceAsset != xfeeAsset) | |
52 | 47 | else false) | |
53 | 48 | then containsElement(fixedAssets, o.assetPair.amountAsset) | |
54 | 49 | else false) | |
55 | 50 | then true | |
56 | 51 | else if (if ((o.orderType == Sell)) | |
57 | 52 | then (o.assetPair.amountAsset != xfeeAsset) | |
58 | 53 | else false) | |
59 | 54 | then containsElement(fixedAssets, o.assetPair.priceAsset) | |
60 | 55 | else false | |
61 | 56 | else false) | |
62 | 57 | then !(isDefined(o.matcherFeeAssetId)) | |
63 | 58 | else false) | |
64 | 59 | then (o.matcherPublicKey == wxchgPublicKey) | |
65 | 60 | else false | |
66 | 61 | case t: TransferTransaction => | |
67 | 62 | if (if (if (isValidOwner) | |
68 | 63 | then !(containsElement(fixedAssets, t.assetId)) | |
69 | 64 | else false) | |
70 | 65 | then !(containsElement(fixedAssets, t.feeAssetId)) | |
71 | 66 | else false) | |
72 | 67 | then true | |
73 | 68 | else if (if (if (isValidAdmin) | |
74 | 69 | then (t.assetId == fmmtAsset) | |
75 | 70 | else false) | |
76 | 71 | then (maxSendAmount >= t.amount) | |
77 | 72 | else false) | |
78 | 73 | then (addressFromRecipient(t.recipient) == fcold) | |
79 | 74 | else false | |
80 | 75 | case _: SetScriptTransaction|DataTransaction => | |
81 | 76 | if (isValidAdmin) | |
82 | 77 | then isValidGuarantors | |
83 | 78 | else false | |
84 | 79 | case _ => | |
85 | 80 | false | |
86 | 81 | } |
github/deemru/w8io/3ef1775 34.10 ms ◑