tx · Cb2NvzHP1JzrBxcjMZHMoa7KAbYr8yKtx5VnGm1p5a6x

3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY:  -0.01500000 Waves

2022.10.01 02:49 [2252535] smart account 3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY > SELF 0.00000000 Waves

{ "type": 13, "id": "Cb2NvzHP1JzrBxcjMZHMoa7KAbYr8yKtx5VnGm1p5a6x", "fee": 1500000, "feeAssetId": null, "timestamp": 1664581801588, "version": 2, "chainId": 84, "sender": "3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY", "senderPublicKey": "AcDSZVzDQTVsumAAwEQdT8iWi8xHRjLNJJ53MzYzk4m7", "proofs": [ "J2FMkBne8hqeMYVSfxk79ZdPBW1LHvVN2wpTb5rV4mf15hZQAayFBEiTznqjRhEw7GVxAE1DMFhooyy1d6VmCHQ" ], "script": "base64:AAIFAAAAAAAAAE0IAhIHCgUICAgBARIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSBAoCCAkSBQoDCAgBEgUKAwEIARIECgIIAQAAACQAAAAADGxvY2tpbmdTdG9yZQUAAAAEdGhpcwAAAAAMc3Rha2luZ1N0b3JlAgAAAAhfUmVzZXJ2ZQAAAAARbWluaW11bUxvY2tBbW91bnQCAAAADl9NaW5Mb2NrQW1vdW50AAAAABFtYXhpbXVtTG9ja0Ftb3VudAIAAAAOX01heExvY2tBbW91bnQAAAAACWFzc2V0TGlzdAUAAAADbmlsAAAAABF1bmxvY2tFbGlnaWJpbGl0eQIAAAAcX0VsaWdpYmxlX3RvX3VubG9ja19hdF9ibG9jawAAAAAMbG9ja2VkQW1vdW50AgAAAA5fQW1vdW50X2xvY2tlZAAAAAALbG9ja2VkQXNzZXQCAAAADV9Bc3NldF9sb2NrZWQAAAAABHVzZXICAAAABV9Vc2VyAAAAAApBUFlfQW1vdW50AgAAAAtfQVBZX2Ftb3VudAAAAAARdG90YWxMb2NrZWRBTW91bnQCAAAAFF9Ub3RhbF9Mb2NrZWRfQW1vdW50AAAAAA1sb2NraW5nUGVyaW9kAgAAAAxfRGF5c19sb2NrZWQAAAAACmVudHJ5SW5kZXgCAAAADF9FbnRyeV9JbmRleAAAAAAOYWxyZWFkeUNsYWltZWQCAAAAEF9BbHJlYWR5X0NsYWltZWQAAAAABWFkbWluAgAAAAZhZG1pbl8AAAAADW1pbGlTZWNQZXJEYXkAAAAAAAUmXAAAAAAAE3NldmVuRGF5c0xvY2tQZXJpb2QAAAAAAAAAAAcAAAAAFmZvdXJ0ZWVuRGF5c0xvY2tQZXJpb2QAAAAAAAAAAA4AAAAAFHRoaXJ0eURheXNMb2NrUGVyaW9kAAAAAAAAAAAeAAAAABNzaXh0eURheXNMb2NrUGVyaW9kAAAAAAAAAAA8AAAAABRuaW5ldHlEYXlzTG9ja1BlcmlvZAAAAAAAAAAAWgEAAAAEZ2V0SQAAAAEAAAADa2V5CQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAEZ2V0UwAAAAEAAAADa2V5CQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAFZ2V0SVYA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AAABBQAAAAZ1SW5kZXgJAABkAAAAAgkBAAAABXZhbHVlAAAAAQUAAAAGdUluZGV4AAAAAAAAAAABAAAAAAAAAAAAAAAADQAAAAFpAQAAAAhhZGRBc3NldAAAAAUAAAALQXNzZXRUaWNrZXIAAAAHQXNzZXRJRAAAAAxBc3NldFJlc2VydmUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50BAAAAAVjaGVjawkBAAAACWFkbWluT25seQAAAAEFAAAAAWkDCQAAAAAAAAIFAAAABWNoZWNrBQAAAAVjaGVjawQAAAANYVN0YWtpbmdTdG9yZQkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAAMc3Rha2luZ1N0b3JlBAAAABJhTWluaW11bUxvY2tBbW91bnQJAAEsAAAAAgUAAAALQXNzZXRUaWNrZXIFAAAAEW1pbmltdW1Mb2NrQW1vdW50BAAAABJhTWF4aW11bUxvY2tBbW91bnQJAAEsAAAAAgUAAAALQXNzZXRUaWNrZXIFAAAAEW1heGltdW1Mb2NrQW1vdW50BAAAAAtjaGVja01pbk1heAMJAABmAAAAAgUAAAAWQXNzZXRNYXhpbXVtTG9ja0Ftb3VudAUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWluaW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWluaW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASYU1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50BQAAAANuaWwJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASYU1pbmltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50CQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAEmFNYXhpbXVtTG9ja0Ftb3VudAUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAUAAAADbmlsCQAETgAAAAIJAARMAAAAAgkBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACBQAAAAtBc3NldFRpY2tlcgUAAAAHQXNzZXRJRAkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAADWFTdGFraW5nU3RvcmUFAAAADEFzc2V0UmVzZXJ2ZQUAAAADbmlsBQAAAAtjaGVja01pbk1heAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALZGVsZXRlQXNzZXQAAAABAAAAC0Fzc2V0VGlja2VyBAAAAAVjaGVjawkBAAAACWFkbWluT25seQAAAAEFAAAAAWkDCQAAAAAAAAIFAAAABWNoZWNrBQAAAAVjaGVjawQAAAAHYXNzZXRJRAkBAAAADnRocm93T3JSZXR1cm5TAAAAAgkBAAAABGdldFMAAAABBQAAAAtBc3NldFRpY2tlcgkAASwAAAACCQABLAAAAAICAAAAEmFzc2V0IHdpdGggdGlja2VyIAUAAAALQXNzZXRUaWNrZXICAAAACiBub3QgZm91bmQDCQAAAAAAAAIFAAAAB2Fzc2V0SUQFAAAAB2Fzc2V0SUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAALQXNzZXRUaWNrZXIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWluaW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWF4aW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAAMc3Rha2luZ1N0b3JlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABNfZ2V0QXNzZXRJZEJ5VGlja2VyAAAAAQAAAAtBc3NldFRpY2tlcgQAAAAFY2hlY2sJAQAA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YXhpbXVtTG9ja0Ftb3VudAIAAAA0aW50ZXJuYWwgZXJyb3I6IG1heGltdW0gc3Rha2luZyBhbW91bnQgbm90IHNwZWNpZmllZAQAAAAGY2hlY2szCQEAAAAHdGhyb3dJZgAAAAIDCQAAZgAAAAIFAAAACm1pblRvU3Rha2UFAAAADWFtb3VudFRvU3Rha2UGCQAAZgAAAAIFAAAADWFtb3VudFRvU3Rha2UFAAAACm1heFRvU3Rha2UCAAAAHnN0YWtpbmcgYW1vdW50IGlzIG91dCBvZiByYW5nZQMJAAAAAAAAAgUAAAAGY2hlY2szBQAAAAZjaGVjazMEAAAADHVUb3RhbExvY2tlZAkAASwAAAACBQAAAAZ1c2VySWQFAAAAEXRvdGFsTG9ja2VkQU1vdW50BAAAAAl1U3VtVG90YWwDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAFZ2V0SVYAAAABBQAAAAx1VG90YWxMb2NrZWQFAAAADWFtb3VudFRvU3Rha2UJAABkAAAAAgUAAAANYW1vdW50VG9TdGFrZQkBAAAABWdldElWAAAAAQUAAAAMdVRvdGFsTG9ja2VkBAAAAAZjaGVjazQJAQAAAAd0aHJvd0lmAAAAAgkAAGYAAAACBQAAAAl1U3VtVG90YWwFAAAACm1heFRvU3Rha2UCAAAAHXlvdSBoYXZlIG1heGVkIG91dCB5b3VyIHF1b3RhAwkAAAAAAAACBQAAAAZjaGVjazQFAAAABmNoZWNrNAQAAAAOdUVudHJ5VG9TdHJpbmcJAAGkAAAAAQUAAAAKRW50cnlJbmRleAQAAAAGdUVudHJ5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAFfBQAAAAtBc3NldFRpY2tlcgIAAAABXwUAAAAOdUVudHJ5VG9TdHJpbmcEAAAADXVVc2VyRW50cnlLZXkJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkEAAAAB3VVc2VySWQJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAEdXNlcgQAAAAGdUFzc2V0CQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAAC2xvY2tlZEFzc2V0BAAAAA51TG9ja2lu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", "height": 2252535, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DHGQf5v8G5DQSK2G6ac7Sq4d1VWwnjhpJ6oVr1y3ATpf Next: 7UUAG4KdCFj3QfnPkmpnDuben3QeaiCV2sPSE1F8SWma Diff:
OldNewDifferences
3131
3232 let admin = "admin_"
3333
34-let BlockPerDay = 1440
35-
36-let oneDayLockperiod = 1
34+let miliSecPerDay = 86400000
3735
3836 let sevenDaysLockPeriod = 7
3937
40-let fourteenDaysLockePeriod = 14
38+let fourteenDaysLockPeriod = 14
4139
4240 let thirtyDaysLockPeriod = 30
4341
4442 let sixtyDaysLockPeriod = 60
4543
4644 let ninetyDaysLockPeriod = 90
47-
48-let validityBlocks = 360
4945
5046 func getI (key) = getInteger(this, key)
5147
9086 else StringEntry(key, value)
9187
9288
93-func daysToBlocks (days) = if ((days != oneDayLockperiod))
94- then if ((days != sevenDaysLockPeriod))
95- then if ((days != fourteenDaysLockePeriod))
96- then if ((days != thirtyDaysLockPeriod))
97- then if ((days != sixtyDaysLockPeriod))
98- then if ((days != ninetyDaysLockPeriod))
99- then throw("invalid locking period")
100- else (((days * BlockPerDay) + validityBlocks) + height)
101- else (((days * BlockPerDay) + validityBlocks) + height)
102- else (((days * BlockPerDay) + validityBlocks) + height)
103- else (((days * BlockPerDay) + validityBlocks) + height)
104- else (((days * BlockPerDay) + validityBlocks) + height)
105- else (((days * BlockPerDay) + validityBlocks) + height)
106-
107-
108-func blocksToDays (blocksLeft) = if ((0 >= blocksLeft))
109- then 0
110- else {
111- let daysleft = fraction(blocksLeft, 1000, BlockPerDay, CEILING)
112- daysleft
113- }
89+func daysToMiliSec (days) = if ((days != sevenDaysLockPeriod))
90+ then if ((days != fourteenDaysLockPeriod))
91+ then if ((days != thirtyDaysLockPeriod))
92+ then if ((days != sixtyDaysLockPeriod))
93+ then if ((days != ninetyDaysLockPeriod))
94+ then throw("invalid locking period")
95+ else ((days * miliSecPerDay) + lastBlock.timestamp)
96+ else ((days * miliSecPerDay) + lastBlock.timestamp)
97+ else ((days * miliSecPerDay) + lastBlock.timestamp)
98+ else ((days * miliSecPerDay) + lastBlock.timestamp)
99+ else ((days * miliSecPerDay) + lastBlock.timestamp)
114100
115101
116102 func writeConstString (key,value) = if (!(isDefined(getS(key))))
321307 then {
322308 let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
323309 let uUnlockEligibility = ((userAddress + uEntryIndex) + unlockEligibility)
324- let uBlocksLeft = valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress))
325- let uBlocksToDays = blocksToDays((uBlocksLeft - height))
326- $Tuple2(nil, uBlocksToDays)
310+ let uDaysLeft = (valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress)) / 1000)
311+ $Tuple2(nil, uDaysLeft)
327312 }
328313 else throw("Strict value is not equal to itself.")
329314 }
353338 if ((check3 == check3))
354339 then {
355340 let uTotalLocked = (userId + totalLockedAMount)
356- let uSumTotal = if (!(isDefined(getI(uTotalLocked))))
341+ let uSumTotal = if (!(isDefined(getIV(uTotalLocked))))
357342 then amountToStake
358- else (amountToStake + value(getI(uTotalLocked)))
343+ else (amountToStake + getIV(uTotalLocked))
359344 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
360345 if ((check4 == check4))
361346 then {
376361 case _ =>
377362 throw(("could not get the APY amount for " + userId))
378363 }
379-[writeConstInteger(uUserEntryKey, EntryIndex), writeConstString(uUserId, userId), writeConstString(uAsset, asset), writeConstInteger(uLockingPeriod, lockPeriod), writeConstInteger(uLockedAmount, i.payments[0].amount), writeConstInteger(uTotalLocked, uSumTotal), writeConstInteger(uUnlockEligibility, daysToBlocks(LockPeriod)), writeConstInteger(uAPY, APY), BooleanEntry(uAlreadyClaimed, false)]
364+[writeConstInteger(uUserEntryKey, EntryIndex), writeConstString(uUserId, userId), writeConstString(uAsset, asset), writeConstInteger(uLockingPeriod, lockPeriod), writeConstInteger(uLockedAmount, i.payments[0].amount), writeConstInteger(uTotalLocked, uSumTotal), writeConstInteger(uUnlockEligibility, daysToMiliSec(LockPeriod)), writeConstInteger(uAPY, APY), BooleanEntry(uAlreadyClaimed, false)]
380365 }
381366 else throw("Strict value is not equal to itself.")
382367 }
391376
392377 @Callable(i)
393378 func Claim (AssetTicker,EntryIndex) = {
379+ let currentTime = lastBlock.timestamp
394380 let userId = toString(i.caller)
395381 let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
396382 if ((asset == asset))
408394 let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
409395 let APYAMount = getIV(((userId + uEntry) + APY_Amount))
410396 let period = getIV(((userId + uEntry) + unlockEligibility))
411- let blocksLeft = if ((0 >= (period - height)))
397+ let daysLeft = if ((0 >= (period - currentTime)))
412398 then 0
413- else (period - height)
414- let daysLeft = blocksToDays(blocksLeft)
415- let check1 = throwIf((period > height), (toString(blocksLeft) + " blocks left to claim"))
399+ else (period - currentTime)
400+ let check1 = throwIf((daysLeft > currentTime), (toString((daysLeft / 1000)) + " days left to claim"))
416401 if ((check1 == check1))
417402 then {
418403 let uTotalLocked = (userId + totalLockedAMount)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let lockingStore = this
55
66 let stakingStore = "_Reserve"
77
88 let minimumLockAmount = "_MinLockAmount"
99
1010 let maximumLockAmount = "_MaxLockAmount"
1111
1212 let assetList = nil
1313
1414 let unlockEligibility = "_Eligible_to_unlock_at_block"
1515
1616 let lockedAmount = "_Amount_locked"
1717
1818 let lockedAsset = "_Asset_locked"
1919
2020 let user = "_User"
2121
2222 let APY_Amount = "_APY_amount"
2323
2424 let totalLockedAMount = "_Total_Locked_Amount"
2525
2626 let lockingPeriod = "_Days_locked"
2727
2828 let entryIndex = "_Entry_Index"
2929
3030 let alreadyClaimed = "_Already_Claimed"
3131
3232 let admin = "admin_"
3333
34-let BlockPerDay = 1440
35-
36-let oneDayLockperiod = 1
34+let miliSecPerDay = 86400000
3735
3836 let sevenDaysLockPeriod = 7
3937
40-let fourteenDaysLockePeriod = 14
38+let fourteenDaysLockPeriod = 14
4139
4240 let thirtyDaysLockPeriod = 30
4341
4442 let sixtyDaysLockPeriod = 60
4543
4644 let ninetyDaysLockPeriod = 90
47-
48-let validityBlocks = 360
4945
5046 func getI (key) = getInteger(this, key)
5147
5248
5349 func getS (key) = getString(this, key)
5450
5551
5652 func getIV (key) = value(getInteger(this, key))
5753
5854
5955 func getSV (key) = value(getString(this, key))
6056
6157
6258 func throwIf (condition,error) = if (condition)
6359 then throw(error)
6460 else true
6561
6662
6763 func throwOrReturnI (val,error) = match val {
6864 case val: Int =>
6965 val
7066 case _ =>
7167 throw(error)
7268 }
7369
7470
7571 func throwOrReturnS (val,error) = match val {
7672 case val: String =>
7773 val
7874 case _ =>
7975 throw(error)
8076 }
8177
8278
8379 func writeInt (key,value) = if ((0 > value))
8480 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
8581 else IntegerEntry(key, value)
8682
8783
8884 func writeStr (key,value) = if ((" " == value))
8985 then throw(("writing an empty string " + value))
9086 else StringEntry(key, value)
9187
9288
93-func daysToBlocks (days) = if ((days != oneDayLockperiod))
94- then if ((days != sevenDaysLockPeriod))
95- then if ((days != fourteenDaysLockePeriod))
96- then if ((days != thirtyDaysLockPeriod))
97- then if ((days != sixtyDaysLockPeriod))
98- then if ((days != ninetyDaysLockPeriod))
99- then throw("invalid locking period")
100- else (((days * BlockPerDay) + validityBlocks) + height)
101- else (((days * BlockPerDay) + validityBlocks) + height)
102- else (((days * BlockPerDay) + validityBlocks) + height)
103- else (((days * BlockPerDay) + validityBlocks) + height)
104- else (((days * BlockPerDay) + validityBlocks) + height)
105- else (((days * BlockPerDay) + validityBlocks) + height)
106-
107-
108-func blocksToDays (blocksLeft) = if ((0 >= blocksLeft))
109- then 0
110- else {
111- let daysleft = fraction(blocksLeft, 1000, BlockPerDay, CEILING)
112- daysleft
113- }
89+func daysToMiliSec (days) = if ((days != sevenDaysLockPeriod))
90+ then if ((days != fourteenDaysLockPeriod))
91+ then if ((days != thirtyDaysLockPeriod))
92+ then if ((days != sixtyDaysLockPeriod))
93+ then if ((days != ninetyDaysLockPeriod))
94+ then throw("invalid locking period")
95+ else ((days * miliSecPerDay) + lastBlock.timestamp)
96+ else ((days * miliSecPerDay) + lastBlock.timestamp)
97+ else ((days * miliSecPerDay) + lastBlock.timestamp)
98+ else ((days * miliSecPerDay) + lastBlock.timestamp)
99+ else ((days * miliSecPerDay) + lastBlock.timestamp)
114100
115101
116102 func writeConstString (key,value) = if (!(isDefined(getS(key))))
117103 then writeStr(key, value)
118104 else throw((" entry already initialized: " + key))
119105
120106
121107 func writeConstInteger (key,value) = if (!(isDefined(getS(key))))
122108 then writeInt(key, value)
123109 else throw((" entry already initialized: " + key))
124110
125111
126112 func adminOnly (i) = {
127113 let inputAddress = toBase58String(i.caller.bytes)
128114 let otherAdmin = (admin + inputAddress)
129115 match getS(admin) {
130116 case a: String =>
131117 if ((inputAddress != getS(admin)))
132118 then throw("unauthorized")
133119 else true
134120 case _ =>
135121 match getS(otherAdmin) {
136122 case b: String =>
137123 if ((inputAddress != getS(otherAdmin)))
138124 then throw("unauthorized")
139125 else true
140126 case _ =>
141127 throw("unauthorizd")
142128 }
143129 }
144130 }
145131
146132
147133 func writeConfigValue (key,data) = match data {
148134 case data: String =>
149135 writeConstString(key, data)
150136 case data: Int =>
151137 writeConstInteger(key, data)
152138 case _ =>
153139 throw("unsupported config type")
154140 }
155141
156142
157143 func incrementEntryIndex (key) = {
158144 let uIndex = getI(key)
159145 if (isDefined(uIndex))
160146 then (value(uIndex) + 1)
161147 else 0
162148 }
163149
164150
165151 @Callable(i)
166152 func addAsset (AssetTicker,AssetID,AssetReserve,AssetMinimumLockAmount,AssetMaximumLockAmount) = {
167153 let check = adminOnly(i)
168154 if ((check == check))
169155 then {
170156 let aStakingStore = (AssetTicker + stakingStore)
171157 let aMinimumLockAmount = (AssetTicker + minimumLockAmount)
172158 let aMaximumLockAmount = (AssetTicker + maximumLockAmount)
173159 let checkMinMax = if ((AssetMaximumLockAmount > AssetMinimumLockAmount))
174160 then [writeConstInteger(aMinimumLockAmount, AssetMinimumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMaximumLockAmount)]
175161 else [writeConstInteger(aMinimumLockAmount, AssetMaximumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMinimumLockAmount)]
176162 ([writeConstString(AssetTicker, AssetID), writeConstString(aStakingStore, AssetReserve)] ++ checkMinMax)
177163 }
178164 else throw("Strict value is not equal to itself.")
179165 }
180166
181167
182168
183169 @Callable(i)
184170 func deleteAsset (AssetTicker) = {
185171 let check = adminOnly(i)
186172 if ((check == check))
187173 then {
188174 let assetID = throwOrReturnS(getS(AssetTicker), (("asset with ticker " + AssetTicker) + " not found"))
189175 if ((assetID == assetID))
190176 then [DeleteEntry(AssetTicker), DeleteEntry((AssetTicker + minimumLockAmount)), DeleteEntry((AssetTicker + maximumLockAmount)), DeleteEntry((AssetTicker + stakingStore))]
191177 else throw("Strict value is not equal to itself.")
192178 }
193179 else throw("Strict value is not equal to itself.")
194180 }
195181
196182
197183
198184 @Callable(i)
199185 func _getAssetIdByTicker (AssetTicker) = {
200186 let check = adminOnly(i)
201187 if ((check == check))
202188 then {
203189 let a = throwOrReturnS(getS(AssetTicker), "asset not found")
204190 $Tuple2(nil, a)
205191 }
206192 else throw("Strict value is not equal to itself.")
207193 }
208194
209195
210196
211197 @Callable(i)
212198 func init (AdminAddress) = {
213199 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
214200 [writeConstString(admin, toString(adminAddr))]
215201 }
216202
217203
218204
219205 @Callable(i)
220206 func _deleteEntry (key) = {
221207 let check = adminOnly(i)
222208 if ((check == check))
223209 then [DeleteEntry(key)]
224210 else throw("Strict value is not equal to itself.")
225211 }
226212
227213
228214
229215 @Callable(i)
230216 func addAdmin (AdminAddress) = {
231217 let check = adminOnly(i)
232218 if ((check == check))
233219 then {
234220 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
235221 let newAdmin = (admin + toString(adminAddr))
236222 [writeConstString(newAdmin, AdminAddress)]
237223 }
238224 else throw("Strict value is not equal to itself.")
239225 }
240226
241227
242228
243229 @Callable(i)
244230 func changeMainAdmin (newAddress) = {
245231 let checks = adminOnly(i)
246232 if ((checks == checks))
247233 then {
248234 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
249235 let del = DeleteEntry(admin)
250236 if ((del == del))
251237 then [writeConstString(admin, toString(adminAddr))]
252238 else throw("Strict value is not equal to itself.")
253239 }
254240 else throw("Strict value is not equal to itself.")
255241 }
256242
257243
258244
259245 @Callable(i)
260246 func updateOtherAdminAddress (newAddress) = {
261247 let checks = adminOnly(i)
262248 if ((checks == checks))
263249 then {
264250 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
265251 let caller = toString(i.caller)
266252 let otherAdmin = (admin + caller)
267253 let checkOldAddress = throwOrReturnS(getS(otherAdmin), "no previous address found")
268254 if ((checkOldAddress == checkOldAddress))
269255 then {
270256 let delAddress = DeleteEntry(otherAdmin)
271257 if ((delAddress == delAddress))
272258 then [writeConstString(otherAdmin, toString(adminAddr))]
273259 else throw("Strict value is not equal to itself.")
274260 }
275261 else throw("Strict value is not equal to itself.")
276262 }
277263 else throw("Strict value is not equal to itself.")
278264 }
279265
280266
281267
282268 @Callable(i)
283269 func removeOtherAdmin (address) = {
284270 let checks = adminOnly(i)
285271 if ((checks == checks))
286272 then {
287273 let adminAddr = valueOrErrorMessage(addressFromString(address), "invalid address")
288274 let otherAddress = (admin + toString(adminAddr))
289275 let delAdmin = DeleteEntry(otherAddress)
290276 if ((delAdmin == delAdmin))
291277 then nil
292278 else throw("Strict value is not equal to itself.")
293279 }
294280 else throw("Strict value is not equal to itself.")
295281 }
296282
297283
298284
299285 @Callable(i)
300286 func updateConfigValue (key,data) = {
301287 let checks = adminOnly(i)
302288 if ((checks == checks))
303289 then {
304290 let del = DeleteEntry(key)
305291 if ((del == del))
306292 then [writeConfigValue(key, data)]
307293 else throw("Strict value is not equal to itself.")
308294 }
309295 else throw("Strict value is not equal to itself.")
310296 }
311297
312298
313299
314300 @Callable(i)
315301 func _getDaysLeftToClaim (userAddress,AssetTicker,EntryIndex) = {
316302 let check0 = adminOnly(i)
317303 if ((check0 == check0))
318304 then {
319305 let check1 = valueOrErrorMessage(addressFromString(userAddress), "invalid address")
320306 if ((check1 == check1))
321307 then {
322308 let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
323309 let uUnlockEligibility = ((userAddress + uEntryIndex) + unlockEligibility)
324- let uBlocksLeft = valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress))
325- let uBlocksToDays = blocksToDays((uBlocksLeft - height))
326- $Tuple2(nil, uBlocksToDays)
310+ let uDaysLeft = (valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress)) / 1000)
311+ $Tuple2(nil, uDaysLeft)
327312 }
328313 else throw("Strict value is not equal to itself.")
329314 }
330315 else throw("Strict value is not equal to itself.")
331316 }
332317
333318
334319
335320 @Callable(i)
336321 func Lock (LockPeriod,AssetTicker,EntryIndex) = {
337322 let check1 = throwIf((1 != size(i.payments)), "attach amount you want to lock")
338323 if ((check1 == check1))
339324 then {
340325 let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
341326 let asset = toBase58String(assetValue)
342327 let check2 = throwIf((getS(AssetTicker) != asset), "asset not supported")
343328 if ((check2 == check2))
344329 then {
345330 let lockPeriod = LockPeriod
346331 let userId = toBase58String(i.caller.bytes)
347332 let amountToStake = i.payments[0].amount
348333 let minToStake = throwOrReturnI(getI((AssetTicker + minimumLockAmount)), "internal error: minimum stacking amount not specified")
349334 let maxToStake = throwOrReturnI(getI((AssetTicker + maximumLockAmount)), "internal error: maximum staking amount not specified")
350335 let check3 = throwIf(if ((minToStake > amountToStake))
351336 then true
352337 else (amountToStake > maxToStake), "staking amount is out of range")
353338 if ((check3 == check3))
354339 then {
355340 let uTotalLocked = (userId + totalLockedAMount)
356- let uSumTotal = if (!(isDefined(getI(uTotalLocked))))
341+ let uSumTotal = if (!(isDefined(getIV(uTotalLocked))))
357342 then amountToStake
358- else (amountToStake + value(getI(uTotalLocked)))
343+ else (amountToStake + getIV(uTotalLocked))
359344 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
360345 if ((check4 == check4))
361346 then {
362347 let uEntryToString = toString(EntryIndex)
363348 let uEntry = ((("_" + AssetTicker) + "_") + uEntryToString)
364349 let uUserEntryKey = (userId + uEntry)
365350 let uUserId = ((userId + uEntry) + user)
366351 let uAsset = ((userId + uEntry) + lockedAsset)
367352 let uLockingPeriod = ((userId + uEntry) + lockingPeriod)
368353 let uLockedAmount = ((userId + uEntry) + lockedAmount)
369354 let uAPY = ((userId + uEntry) + APY_Amount)
370355 let uUnlockEligibility = ((userId + uEntry) + unlockEligibility)
371356 let uAlreadyClaimed = ((userId + uEntry) + alreadyClaimed)
372357 let StoredAPY = invoke(Address(fromBase58String(getSV(admin))), "getAPYAmount", [userId, AssetTicker, EntryIndex], nil)
373358 let APY = match StoredAPY {
374359 case c: Int =>
375360 c
376361 case _ =>
377362 throw(("could not get the APY amount for " + userId))
378363 }
379-[writeConstInteger(uUserEntryKey, EntryIndex), writeConstString(uUserId, userId), writeConstString(uAsset, asset), writeConstInteger(uLockingPeriod, lockPeriod), writeConstInteger(uLockedAmount, i.payments[0].amount), writeConstInteger(uTotalLocked, uSumTotal), writeConstInteger(uUnlockEligibility, daysToBlocks(LockPeriod)), writeConstInteger(uAPY, APY), BooleanEntry(uAlreadyClaimed, false)]
364+[writeConstInteger(uUserEntryKey, EntryIndex), writeConstString(uUserId, userId), writeConstString(uAsset, asset), writeConstInteger(uLockingPeriod, lockPeriod), writeConstInteger(uLockedAmount, i.payments[0].amount), writeConstInteger(uTotalLocked, uSumTotal), writeConstInteger(uUnlockEligibility, daysToMiliSec(LockPeriod)), writeConstInteger(uAPY, APY), BooleanEntry(uAlreadyClaimed, false)]
380365 }
381366 else throw("Strict value is not equal to itself.")
382367 }
383368 else throw("Strict value is not equal to itself.")
384369 }
385370 else throw("Strict value is not equal to itself.")
386371 }
387372 else throw("Strict value is not equal to itself.")
388373 }
389374
390375
391376
392377 @Callable(i)
393378 func Claim (AssetTicker,EntryIndex) = {
379+ let currentTime = lastBlock.timestamp
394380 let userId = toString(i.caller)
395381 let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
396382 if ((asset == asset))
397383 then {
398384 let uEntry = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
399385 let uUserID = valueOrErrorMessage(getS(((userId + uEntry) + user)), ("no entry found for user " + userId))
400386 if ((uUserID == uUserID))
401387 then {
402388 let uLockedAsset = valueOrErrorMessage(getS(((userId + uEntry) + lockedAsset)), "asset not locked by user")
403389 let uAlreadyClaimedKey = ((userId + uEntry) + alreadyClaimed)
404390 let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
405391 if ((check0 == check0))
406392 then {
407393 let uLockedAmount = getIV(((userId + uEntry) + lockedAmount))
408394 let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
409395 let APYAMount = getIV(((userId + uEntry) + APY_Amount))
410396 let period = getIV(((userId + uEntry) + unlockEligibility))
411- let blocksLeft = if ((0 >= (period - height)))
397+ let daysLeft = if ((0 >= (period - currentTime)))
412398 then 0
413- else (period - height)
414- let daysLeft = blocksToDays(blocksLeft)
415- let check1 = throwIf((period > height), (toString(blocksLeft) + " blocks left to claim"))
399+ else (period - currentTime)
400+ let check1 = throwIf((daysLeft > currentTime), (toString((daysLeft / 1000)) + " days left to claim"))
416401 if ((check1 == check1))
417402 then {
418403 let uTotalLocked = (userId + totalLockedAMount)
419404 let sumTotal = (getIV(uTotalLocked) - uLockedAmount)
420405 let sumTotalLeft = if ((0 >= sumTotal))
421406 then 0
422407 else sumTotal
423408 let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, fromBase58String(uLockedAsset)], nil)
424409 if ((transferAPYAmount == transferAPYAmount))
425410 then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, fromBase58String(uLockedAsset)), writeConstInteger(uTotalLocked, sumTotalLeft), BooleanEntry(uAlreadyClaimedKey, true)]
426411 else throw("Strict value is not equal to itself.")
427412 }
428413 else throw("Strict value is not equal to itself.")
429414 }
430415 else throw("Strict value is not equal to itself.")
431416 }
432417 else throw("Strict value is not equal to itself.")
433418 }
434419 else throw("Strict value is not equal to itself.")
435420 }
436421
437422

github/deemru/w8io/873ac7e 
57.28 ms