tx · GdrRXWwTCaUfpvWwP2nJCwiycPCuXDsJYhrpntDzSEo5

3N4PzCkHU7VTJeNCPpT8w9XZLnjTsi2YMHN:  -0.01000000 Waves

2022.04.08 11:33 [1999356] smart account 3N4PzCkHU7VTJeNCPpT8w9XZLnjTsi2YMHN > SELF 0.00000000 Waves

{ "type": 13, "id": "GdrRXWwTCaUfpvWwP2nJCwiycPCuXDsJYhrpntDzSEo5", "fee": 1000000, "feeAssetId": null, "timestamp": 1649406892397, "version": 2, "chainId": 84, "sender": "3N4PzCkHU7VTJeNCPpT8w9XZLnjTsi2YMHN", "senderPublicKey": "2DVVUYkJNWCMHSCPWEXRjF3THHEdc5bVinyp2c4z8nV8", "proofs": [ "SLsB7ShW9MQcdJo4SWafNdpLRg7fVhx4ad6kUjpu8FcQ6JunVxupfYWpu3BHGWa595oPTBoBXZKgk5y6My9n1zL" ], "script": "base64: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", "height": 1999356, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BtjiSioBKbapZmQ6YQ7Qo9PkFG2XkcuXTPQ2RuRmEY63 Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "init"
4+let a = 1
55
6-let b = "assetId"
6+let b = [1, 10, 30, 90, 180]
77
8-let c = "staked_total"
8+let c = ["REDSmb", "rBTC"]
99
10-func d (e) = e
10+let d = 86400000
11+
12+let e = 1649376000000
13+
14+let f = lastBlock.timestamp
15+
16+let g = "init"
17+
18+let h = "assetId"
19+
20+let i = "staked_total"
21+
22+func j (k) = k
1123
1224
13-let f = valueOrElse(getBoolean(this, a), false)
25+let l = valueOrElse(getBoolean(this, g), false)
1426
15-let g = fromBase58String(getStringValue(this, b))
27+let m = fromBase58String(getStringValue(this, h))
1628
17-let h = valueOrErrorMessage(getInteger(this, c), (("Can't read field '" + c) + "'"))
29+let n = valueOrErrorMessage(getInteger(this, i), (("Can't read field '" + i) + "'"))
1830
19-func i (j) = if ((size(j) != 1))
31+func o (p) = if ((size(p) != 1))
2032 then throw("Single payment required")
21- else if ((j[0].assetId != g))
22- then throw("Payment should be in REDS token")
23- else if ((0 >= j[0].amount))
24- then throw("Payment amount must be greater then 0")
25- else j[0].amount
33+ else if ((p[0].assetId != m))
34+ then throw("Only REDSmb token is accepted")
35+ else if ((a > p[0].amount))
36+ then throw(("Payment amount must be greater then threshold " + toString(a)))
37+ else p[0].amount
2638
2739
28-func k (l) = valueOrElse(getInteger(this, d(l)), 0)
40+func q (r) = valueOrElse(getInteger(this, j(r)), 0)
2941
3042
31-@Callable(m)
32-func init (n) = {
33- let o = valueOrErrorMessage(assetInfo(fromBase58String(n)), "Can't find asset").id
34- if (f)
43+@Callable(s)
44+func init (t) = {
45+ let u = valueOrErrorMessage(assetInfo(fromBase58String(t)), "Can't find asset").id
46+ if (l)
3547 then throw("DApp is already init")
36- else [BooleanEntry(a, true), StringEntry("assetId", toBase58String(o)), IntegerEntry(c, 0)]
48+ else [BooleanEntry(g, true), StringEntry("assetId", toBase58String(u)), IntegerEntry(i, 0)]
3749 }
3850
3951
4052
41-@Callable(m)
42-func stake () = {
43- let p = toString(m.caller)
44- let q = i(m.payments)
45- let r = k(p)
46-[IntegerEntry(d(p), (r + q)), IntegerEntry(c, (h + q))]
53+@Callable(s)
54+func createNewStaking (v,w) = {
55+ let x = toString(s.caller)
56+ let y = o(s.payments)
57+ let z = ((f + d) - (f % d))
58+ let A = (z + (w * d))
59+ let B = ((x + "_") + toBase58String(s.transactionId))
60+ let C = makeString([toString(y), v, toString(w), toString(f), toString(A)], ",")
61+ if (isDefined(getString(this, B)))
62+ then throw((("Staking '" + B) + "' already exists"))
63+ else if (!(containsElement(b, w)))
64+ then throw((("Unsupported number of days " + toString(w)) + " to mine"))
65+ else if (!(containsElement(c, v)))
66+ then throw((("Unsupported reward type '" + v) + "'"))
67+ else [StringEntry(B, C), IntegerEntry(i, (n + y))]
4768 }
4869
4970
5071
51-@Callable(m)
52-func withdraw (s) = {
53- let p = toString(m.caller)
54- let t = k(p)
55- if ((size(m.payments) != 0))
72+@Callable(s)
73+func withdraw (r,D) = {
74+ let E = valueOrErrorMessage(addressFromString(r), (("Can't parse user address '" + r) + "'"))
75+ func F (G,H) = {
76+ let I = {
77+ let J = split(valueOrErrorMessage(getString(this, ((r + "_") + H)), ((("Staking " + H) + " doesn't exist for user ") + r)), ",")
78+ if ((size(J) != 5))
79+ then throw(("Can't parse parameters of staking " + H))
80+ else J
81+ }
82+ let K = $Tuple2(parseIntValue(I[0]), parseIntValue(I[4]))
83+ let L = K._1
84+ let M = K._2
85+ if ((M > f))
86+ then throw(((("Unable to withdraw staking " + H) + " because it is still locked until ") + toString(M)))
87+ else $Tuple2((G._1 :+ DeleteEntry(((r + "_") + H))), (G._2 + L))
88+ }
89+
90+ let N = {
91+ let O = D
92+ let P = size(O)
93+ let Q = $Tuple2(nil, 0)
94+ func R (S,T) = if ((T >= P))
95+ then S
96+ else F(S, O[T])
97+
98+ func U (S,T) = if ((T >= P))
99+ then S
100+ else throw("List size exceeds 10")
101+
102+ U(R(R(R(R(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
103+ }
104+ let V = N._1
105+ let W = N._2
106+ if ((size(s.payments) != 0))
56107 then throw("There should be no payments for this function")
57- else if ((0 >= s))
58- then throw("Amount must be positive")
59- else if ((s > h))
60- then throw("You cannot withdraw more funds than total staked on the dApp")
61- else if ((s > t))
62- then throw("You don't have enough staked funds available to withdraw")
63- else [if ((s == t))
64- then DeleteEntry(d(p))
65- else IntegerEntry(d(p), (t - s)), IntegerEntry(c, (h - s)), ScriptTransfer(m.caller, s, g)]
108+ else if (if ((s.caller != this))
109+ then (E != s.caller)
110+ else false)
111+ then throw("Only users themselves can withdraw their unlocked staking, or admin for them")
112+ else (V ++ [IntegerEntry(i, (n - W)), ScriptTransfer(E, W, m)])
66113 }
67114
68115

github/deemru/w8io/169f3d6 
36.64 ms