tx · HA7xiL7ndmW9mkk1AxofddnJsBGtt4jgkurKJZjXnusb 3NA3yH1QryPynpwGhEYR3W3LSneJK73rWeL: -0.01000000 Waves 2022.06.06 17:23 [2084611] smart account 3NA3yH1QryPynpwGhEYR3W3LSneJK73rWeL > SELF 0.00000000 Waves
{ "type": 13, "id": "HA7xiL7ndmW9mkk1AxofddnJsBGtt4jgkurKJZjXnusb", "fee": 1000000, "feeAssetId": null, "timestamp": 1654525392179, "version": 2, "chainId": 84, "sender": "3NA3yH1QryPynpwGhEYR3W3LSneJK73rWeL", "senderPublicKey": "6Ji8AyKFQegAeGHgCr6CYZgm3xxVSbQ9A884zpfzxS77", "proofs": [ "4W6i3sT6FnBNfjHQxEkXDhVi6SMkHFm1eH1aZF6GCCe9QWvf4hs89FPTBqmCGx6PWCQba8zvZCeKTxkpWxpn98LN" ], "script": "base64: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", "height": 2084611, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 6DaPD16Yqps9GjwdXMDWTy14yvGCJztqcJJ1qbG8WrFb Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let stakeAmountThreshold = 1 | |
5 | + | ||
6 | + | let lockPeriodsInDays = [1, 10, 30, 90, 180] | |
7 | + | ||
8 | + | let possibleTokensForRewards = ["REDSmb", "rBTC"] | |
9 | + | ||
10 | + | let hours24 = 86400000 | |
11 | + | ||
12 | + | let apr8of2022 = 1649376000000 | |
13 | + | ||
14 | + | let currentTimestamp = lastBlock.timestamp | |
15 | + | ||
16 | + | let keyInit = "init" | |
17 | + | ||
18 | + | let keyAssetId = "assetId" | |
19 | + | ||
20 | + | let keyTotal = "staked_total" | |
21 | + | ||
22 | + | func keyStaked (address) = address | |
23 | + | ||
24 | + | ||
25 | + | let isInit = valueOrElse(getBoolean(this, keyInit), false) | |
26 | + | ||
27 | + | let assetId = fromBase58String(getStringValue(this, keyAssetId)) | |
28 | + | ||
29 | + | let totalStaked = valueOrErrorMessage(getInteger(this, keyTotal), (("Can't read field '" + keyTotal) + "'")) | |
30 | + | ||
31 | + | func extractPaymentAmount (payments) = if ((size(payments) != 1)) | |
32 | + | then throw("Single payment required") | |
33 | + | else if ((payments[0].assetId != assetId)) | |
34 | + | then throw("Only REDSmb token is accepted") | |
35 | + | else if ((stakeAmountThreshold > payments[0].amount)) | |
36 | + | then throw(("Payment amount must be greater then threshold " + toString(stakeAmountThreshold))) | |
37 | + | else payments[0].amount | |
38 | + | ||
39 | + | ||
40 | + | func getCurrentStakedAmount (user) = valueOrElse(getInteger(this, keyStaked(user)), 0) | |
41 | + | ||
42 | + | ||
43 | + | @Callable(inv) | |
44 | + | func init (hashrateAssetId) = { | |
45 | + | let newAssetId = valueOrErrorMessage(assetInfo(fromBase58String(hashrateAssetId)), "Can't find asset").id | |
46 | + | if (isInit) | |
47 | + | then throw("DApp is already init") | |
48 | + | else [BooleanEntry(keyInit, true), StringEntry("assetId", toBase58String(newAssetId)), IntegerEntry(keyTotal, 0)] | |
49 | + | } | |
50 | + | ||
51 | + | ||
52 | + | ||
53 | + | @Callable(inv) | |
54 | + | func stake (forRewardIn,daysToMine) = { | |
55 | + | let callerStr = toString(inv.caller) | |
56 | + | let pmtAmount = extractPaymentAmount(inv.payments) | |
57 | + | let beginningOfNexDayTimestamp = ((currentTimestamp + hours24) - (currentTimestamp % hours24)) | |
58 | + | let lockUntilTimestamp = (beginningOfNexDayTimestamp + (daysToMine * hours24)) | |
59 | + | let stakingKey = ((callerStr + "_staking_") + toBase58String(inv.transactionId)) | |
60 | + | let stakingValue = makeString([toString(pmtAmount), forRewardIn, toString(daysToMine), toString(currentTimestamp), toString(lockUntilTimestamp)], ",") | |
61 | + | let userTotalKey = (callerStr + "_lockedTotal") | |
62 | + | if (isDefined(getString(this, stakingKey))) | |
63 | + | then throw((("Staking '" + stakingKey) + "' already exists")) | |
64 | + | else if (!(containsElement(lockPeriodsInDays, daysToMine))) | |
65 | + | then throw((("Unsupported number of days " + toString(daysToMine)) + " to mine")) | |
66 | + | else if (!(containsElement(possibleTokensForRewards, forRewardIn))) | |
67 | + | then throw((("Unsupported reward type '" + forRewardIn) + "'")) | |
68 | + | else [StringEntry(stakingKey, stakingValue), IntegerEntry(userTotalKey, (valueOrElse(getInteger(this, userTotalKey), 0) + pmtAmount)), IntegerEntry(keyTotal, (totalStaked + pmtAmount))] | |
69 | + | } | |
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | @Callable(inv) | |
74 | + | func withdraw (user,staking) = { | |
75 | + | let userAddress = valueOrErrorMessage(addressFromString(user), (("Can't parse user address '" + user) + "'")) | |
76 | + | func extractStaking (acc,txId) = { | |
77 | + | let parameters = { | |
78 | + | let val = split(valueOrErrorMessage(getString(this, ((user + "_staking_") + txId)), ((("Staking " + txId) + " doesn't exist for user ") + user)), ",") | |
79 | + | if ((size(val) != 5)) | |
80 | + | then throw(("Can't parse parameters of staking " + txId)) | |
81 | + | else val | |
82 | + | } | |
83 | + | let $t037433831 = $Tuple2(parseIntValue(parameters[0]), parseIntValue(parameters[4])) | |
84 | + | let amount = $t037433831._1 | |
85 | + | let lockUntil = $t037433831._2 | |
86 | + | if ((lockUntil > currentTimestamp)) | |
87 | + | then throw(((("Unable to withdraw staking " + txId) + " because it is still locked until ") + toString(lockUntil))) | |
88 | + | else $Tuple2((acc._1 :+ DeleteEntry(((user + "_") + txId))), (acc._2 + amount)) | |
89 | + | } | |
90 | + | ||
91 | + | let $t040914169 = { | |
92 | + | let $l = staking | |
93 | + | let $s = size($l) | |
94 | + | let $acc0 = $Tuple2(nil, 0) | |
95 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
96 | + | then $a | |
97 | + | else extractStaking($a, $l[$i]) | |
98 | + | ||
99 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
100 | + | then $a | |
101 | + | else throw("List size exceeds 10") | |
102 | + | ||
103 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
104 | + | } | |
105 | + | let unstakeList = $t040914169._1 | |
106 | + | let totalUnstaked = $t040914169._2 | |
107 | + | let userTotalKey = (toString(inv.caller) + "_lockedTotal") | |
108 | + | let userTotal = valueOrElse(getInteger(this, userTotalKey), 0) | |
109 | + | let userTotalAfter = (userTotal - totalUnstaked) | |
110 | + | if ((size(inv.payments) != 0)) | |
111 | + | then throw("There should be no payments for this function") | |
112 | + | else if (if ((inv.caller != this)) | |
113 | + | then (userAddress != inv.caller) | |
114 | + | else false) | |
115 | + | then throw("Only users themselves can withdraw their unlocked staking, or admin for them") | |
116 | + | else if (if (if ((0 > userTotal)) | |
117 | + | then true | |
118 | + | else (0 > totalUnstaked)) | |
119 | + | then true | |
120 | + | else (0 > userTotalAfter)) | |
121 | + | then throw("negative result") | |
122 | + | else (unstakeList ++ [IntegerEntry(keyTotal, (totalStaked - totalUnstaked)), if ((userTotalAfter > 0)) | |
123 | + | then IntegerEntry(userTotalKey, (userTotal - totalUnstaked)) | |
124 | + | else DeleteEntry(userTotalKey), ScriptTransfer(userAddress, totalUnstaked, assetId)]) | |
125 | + | } | |
126 | + | ||
127 | + |
github/deemru/w8io/873ac7e 18.36 ms ◑