tx · FV2jCuEQBtCPBK6EqvawZ1QmYNzQXnRhusbSrU6hGbL5 3PM1rLmzig8f3aAwgPzNcqEHrK7739yqipe: -0.00700000 Waves 2022.09.11 21:16 [3290297] smart account 3PM1rLmzig8f3aAwgPzNcqEHrK7739yqipe > SELF 0.00000000 Waves
{ "type": 13, "id": "FV2jCuEQBtCPBK6EqvawZ1QmYNzQXnRhusbSrU6hGbL5", "fee": 700000, "feeAssetId": null, "timestamp": 1662920226637, "version": 2, "chainId": 87, "sender": "3PM1rLmzig8f3aAwgPzNcqEHrK7739yqipe", "senderPublicKey": "2cQ896ajFpwtrs1irqizzzzCkJvDj2qkbU2mouQAheTJ", "proofs": [ "iQtAfM6R93nwPMDkUZ1CnWEMKWFkDW1xVqnM4WtuSgeozo3Q7SJquSwsf1AduQTAwJqRAy5awVjDbw6QkDT1KRp" ], "script": "base64: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", "height": 3290297, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F4YJRVXSU8RTGSLTXaiw5X8KdxuNJJwRXiRdpMrWF1UG Next: none Diff:
Old | New | Differences | |
---|---|---|---|
49 | 49 | func startVesting (address,months) = { | |
50 | 50 | let amount = i.payments[0].amount | |
51 | 51 | let assetIdStr = getAssetString(i.payments[0].assetId) | |
52 | - | [IntegerEntry((address + "_amount"), amount), StringEntry((address + "_assetId"), assetIdStr), IntegerEntry((address + "_start"), height), IntegerEntry((address + "_blocks"), (((months * 30) * 24) * 60)), IntegerEntry((address + "_lastHeight"), height), StringEntry((address + "_owner"), toString(i.caller))] | |
52 | + | if (if ((tryGetString((address + "_owner")) != "")) | |
53 | + | then (tryGetString((address + "_owner")) != toString(i.caller)) | |
54 | + | else false) | |
55 | + | then throw("you have to be vesting owner") | |
56 | + | else [IntegerEntry((address + "_amount"), amount), StringEntry((address + "_assetId"), assetIdStr), IntegerEntry((address + "_start"), height), IntegerEntry((address + "_blocks"), (((months * 30) * 24) * 60)), IntegerEntry((address + "_lastHeight"), height), StringEntry((address + "_owner"), toString(i.caller))] | |
53 | 57 | } | |
58 | + | ||
59 | + | ||
60 | + | ||
61 | + | @Callable(i) | |
62 | + | func updateVesting (address,months) = if (if ((tryGetString((address + "_owner")) != "")) | |
63 | + | then (tryGetString((address + "_owner")) != toString(i.caller)) | |
64 | + | else false) | |
65 | + | then throw("you have to be vesting owner") | |
66 | + | else [IntegerEntry((address + "_blocks"), (((months * 30) * 24) * 60))] | |
54 | 67 | ||
55 | 68 | ||
56 | 69 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func getAssetString (assetId) = match assetId { | |
5 | 5 | case b: ByteVector => | |
6 | 6 | toBase58String(b) | |
7 | 7 | case _ => | |
8 | 8 | "WAVES" | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
13 | 13 | then unit | |
14 | 14 | else fromBase58String(assetIdStr) | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func tryGetInteger (key) = match getInteger(this, key) { | |
18 | 18 | case b: Int => | |
19 | 19 | b | |
20 | 20 | case _ => | |
21 | 21 | 0 | |
22 | 22 | } | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | func tryGetString (key) = match getString(this, key) { | |
26 | 26 | case b: String => | |
27 | 27 | b | |
28 | 28 | case _ => | |
29 | 29 | "" | |
30 | 30 | } | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | @Callable(i) | |
34 | 34 | func claim () = { | |
35 | 35 | let address = toString(i.caller) | |
36 | 36 | let amount = tryGetInteger((address + "_amount")) | |
37 | 37 | let assetIdStr = tryGetString((address + "_assetId")) | |
38 | 38 | let startHeight = tryGetInteger((address + "_start")) | |
39 | 39 | let blocks = tryGetInteger((address + "_blocks")) | |
40 | 40 | let lastHeight = tryGetInteger((address + "_lastHeight")) | |
41 | 41 | let heightDelta = (min([height, (blocks + startHeight)]) - lastHeight) | |
42 | 42 | let toPay = fraction(amount, heightDelta, blocks) | |
43 | 43 | [ScriptTransfer(i.caller, toPay, getAssetBytes(assetIdStr)), IntegerEntry((address + "_lastHeight"), height)] | |
44 | 44 | } | |
45 | 45 | ||
46 | 46 | ||
47 | 47 | ||
48 | 48 | @Callable(i) | |
49 | 49 | func startVesting (address,months) = { | |
50 | 50 | let amount = i.payments[0].amount | |
51 | 51 | let assetIdStr = getAssetString(i.payments[0].assetId) | |
52 | - | [IntegerEntry((address + "_amount"), amount), StringEntry((address + "_assetId"), assetIdStr), IntegerEntry((address + "_start"), height), IntegerEntry((address + "_blocks"), (((months * 30) * 24) * 60)), IntegerEntry((address + "_lastHeight"), height), StringEntry((address + "_owner"), toString(i.caller))] | |
52 | + | if (if ((tryGetString((address + "_owner")) != "")) | |
53 | + | then (tryGetString((address + "_owner")) != toString(i.caller)) | |
54 | + | else false) | |
55 | + | then throw("you have to be vesting owner") | |
56 | + | else [IntegerEntry((address + "_amount"), amount), StringEntry((address + "_assetId"), assetIdStr), IntegerEntry((address + "_start"), height), IntegerEntry((address + "_blocks"), (((months * 30) * 24) * 60)), IntegerEntry((address + "_lastHeight"), height), StringEntry((address + "_owner"), toString(i.caller))] | |
53 | 57 | } | |
58 | + | ||
59 | + | ||
60 | + | ||
61 | + | @Callable(i) | |
62 | + | func updateVesting (address,months) = if (if ((tryGetString((address + "_owner")) != "")) | |
63 | + | then (tryGetString((address + "_owner")) != toString(i.caller)) | |
64 | + | else false) | |
65 | + | then throw("you have to be vesting owner") | |
66 | + | else [IntegerEntry((address + "_blocks"), (((months * 30) * 24) * 60))] | |
54 | 67 | ||
55 | 68 | ||
56 | 69 | ||
57 | 70 | @Callable(i) | |
58 | 71 | func cancelVesting () = nil | |
59 | 72 | ||
60 | 73 | ||
61 | 74 | @Verifier(tx) | |
62 | 75 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
63 | 76 |
github/deemru/w8io/873ac7e 38.88 ms ◑