tx · DKReoPU7wSiW9c17WrusTAtcrMb7VhUhJ11Yg4WoCjX
3N6mVEULck7uViUaDo1wi98wch9XzYNXriv: -1.00000000 Waves
2019.02.22 07:34 [506003] smart asset 3N6mVEULck7uViUaDo1wi98wch9XzYNXriv > SELF 0.00000000 exchange
{
"type": 15,
"id": "DKReoPU7wSiW9c17WrusTAtcrMb7VhUhJ11Yg4WoCjX",
"fee": 100000000,
"feeAssetId": null,
"timestamp": 1550810039929,
"version": 1,
"sender": "3N6mVEULck7uViUaDo1wi98wch9XzYNXriv",
"senderPublicKey": "GMCkL2F7fYotQtrpQq5sjNm5cjpR7CSfawr9kMSKLHVs",
"proofs": [
"5Hf1r4gpWA9joTjNTRsyNjnKctw5V2KFZbzGdmct1qDK5bGAiaaETD1VrmrmLDVaCYdTsv66PtFqgUD5ce7ZYS3u"
],
"assetId": "CdAw5Uu1A9RT6jafc9cQSUy16naaYjzYgcVWDY8xGw8z",
"script": "base64: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",
"chainId": 84,
"height": 506003,
"spentComplexity": 0
}
View: original | compacted
Prev: E3uPGP65BAoqzShvPr6QufJd9YQoRJMVwP3jxZ9qLwko
Next: 2zNAKVCXGKPro2J9oxC3Nb3QQAnwsBKpihZoq36d1ypu
Diff:
Old | New | | Differences |
---|
13 | 13 | | let startSellPrice = 16666900 |
---|
14 | 14 | | let minSellPrice = (startSellPrice + priceDiff) |
---|
15 | 15 | | let minSellAmount = 600000000 |
---|
| 16 | + | let expirationError = "Expiration must be <= 24 hours" |
---|
| 17 | + | let buyAmountError = ("Buy amount must be <= " + toString((maxBuyAmount / 100000000))) |
---|
| 18 | + | let buyPriceError = (((("Buy price must be <= " + toString(minBuyPrice)) + " wavelets (cycles: ") + toString(cycles)) + ")") |
---|
| 19 | + | let sellAmountError = ("Sell amount must be >= " + toString((minSellAmount / 100000000))) |
---|
| 20 | + | let sellPriceError = (((("Sell price must be >= " + toString(minSellPrice)) + " wavelets (cycles: ") + toString(cycles)) + ")") |
---|
16 | 21 | | match tx { |
---|
17 | 22 | | case e: ExchangeTransaction => |
---|
18 | 23 | | if (((e.sellOrder.expiration - e.sellOrder.timestamp) > maxExpiration)) |
---|
19 | | - | then throw() |
---|
| 24 | + | then throw(expirationError) |
---|
20 | 25 | | else { |
---|
21 | 26 | | let sell = sigVerify(e.sellOrder.bodyBytes, e.sellOrder.proofs[0], e.sellOrder.senderPublicKey) |
---|
22 | 27 | | let buy = sigVerify(e.buyOrder.bodyBytes, e.buyOrder.proofs[0], e.buyOrder.senderPublicKey) |
---|
23 | 28 | | if (sell) |
---|
24 | 29 | | then if ((minSellAmount > e.sellOrder.amount)) |
---|
25 | | - | then throw() |
---|
| 30 | + | then throw(sellAmountError) |
---|
26 | 31 | | else if (if ((minSellPrice > e.sellOrder.price)) |
---|
27 | 32 | | then true |
---|
28 | 33 | | else isDefined(e.sellOrder.assetPair.priceAsset)) |
---|
29 | | - | then throw() |
---|
| 34 | + | then throw(sellPriceError) |
---|
30 | 35 | | else true |
---|
31 | 36 | | else if (buy) |
---|
32 | 37 | | then if ((e.buyOrder.amount > maxBuyAmount)) |
---|
33 | | - | then throw() |
---|
| 38 | + | then throw(buyAmountError) |
---|
34 | 39 | | else if (if ((e.buyOrder.price > minBuyPrice)) |
---|
35 | 40 | | then true |
---|
36 | 41 | | else isDefined(e.buyOrder.assetPair.priceAsset)) |
---|
37 | | - | then throw() |
---|
| 42 | + | then throw(buyPriceError) |
---|
38 | 43 | | else true |
---|
39 | 44 | | else false |
---|
40 | 45 | | } |
---|
41 | | - | case t: MassTransferTransaction|BurnTransaction|TransferTransaction => |
---|
42 | | - | true |
---|
43 | 46 | | case _ => |
---|
44 | 47 | | true |
---|
45 | 48 | | } |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 1 #-} |
---|
2 | 2 | | {-# CONTENT_TYPE EXPRESSION #-} |
---|
3 | 3 | | let heightDiff = 3 |
---|
4 | 4 | | let priceDiffConst = 166600 |
---|
5 | 5 | | let expirationHours = 24 |
---|
6 | 6 | | let maxExpiration = (((expirationHours * 60) * 60) * 1000) |
---|
7 | 7 | | let startHeight = 505995 |
---|
8 | 8 | | let cycles = ((height - startHeight) / heightDiff) |
---|
9 | 9 | | let priceDiff = (priceDiffConst * cycles) |
---|
10 | 10 | | let startBuyPrice = 16666600 |
---|
11 | 11 | | let minBuyPrice = (startBuyPrice + priceDiff) |
---|
12 | 12 | | let maxBuyAmount = 66600000000 |
---|
13 | 13 | | let startSellPrice = 16666900 |
---|
14 | 14 | | let minSellPrice = (startSellPrice + priceDiff) |
---|
15 | 15 | | let minSellAmount = 600000000 |
---|
| 16 | + | let expirationError = "Expiration must be <= 24 hours" |
---|
| 17 | + | let buyAmountError = ("Buy amount must be <= " + toString((maxBuyAmount / 100000000))) |
---|
| 18 | + | let buyPriceError = (((("Buy price must be <= " + toString(minBuyPrice)) + " wavelets (cycles: ") + toString(cycles)) + ")") |
---|
| 19 | + | let sellAmountError = ("Sell amount must be >= " + toString((minSellAmount / 100000000))) |
---|
| 20 | + | let sellPriceError = (((("Sell price must be >= " + toString(minSellPrice)) + " wavelets (cycles: ") + toString(cycles)) + ")") |
---|
16 | 21 | | match tx { |
---|
17 | 22 | | case e: ExchangeTransaction => |
---|
18 | 23 | | if (((e.sellOrder.expiration - e.sellOrder.timestamp) > maxExpiration)) |
---|
19 | | - | then throw() |
---|
| 24 | + | then throw(expirationError) |
---|
20 | 25 | | else { |
---|
21 | 26 | | let sell = sigVerify(e.sellOrder.bodyBytes, e.sellOrder.proofs[0], e.sellOrder.senderPublicKey) |
---|
22 | 27 | | let buy = sigVerify(e.buyOrder.bodyBytes, e.buyOrder.proofs[0], e.buyOrder.senderPublicKey) |
---|
23 | 28 | | if (sell) |
---|
24 | 29 | | then if ((minSellAmount > e.sellOrder.amount)) |
---|
25 | | - | then throw() |
---|
| 30 | + | then throw(sellAmountError) |
---|
26 | 31 | | else if (if ((minSellPrice > e.sellOrder.price)) |
---|
27 | 32 | | then true |
---|
28 | 33 | | else isDefined(e.sellOrder.assetPair.priceAsset)) |
---|
29 | | - | then throw() |
---|
| 34 | + | then throw(sellPriceError) |
---|
30 | 35 | | else true |
---|
31 | 36 | | else if (buy) |
---|
32 | 37 | | then if ((e.buyOrder.amount > maxBuyAmount)) |
---|
33 | | - | then throw() |
---|
| 38 | + | then throw(buyAmountError) |
---|
34 | 39 | | else if (if ((e.buyOrder.price > minBuyPrice)) |
---|
35 | 40 | | then true |
---|
36 | 41 | | else isDefined(e.buyOrder.assetPair.priceAsset)) |
---|
37 | | - | then throw() |
---|
| 42 | + | then throw(buyPriceError) |
---|
38 | 43 | | else true |
---|
39 | 44 | | else false |
---|
40 | 45 | | } |
---|
41 | | - | case t: MassTransferTransaction|BurnTransaction|TransferTransaction => |
---|
42 | | - | true |
---|
43 | 46 | | case _ => |
---|
44 | 47 | | true |
---|
45 | 48 | | } |
---|