tx · HQQpg1z4BMhJBTHDJFdZBkFSjLycXubFPGX24hS3WYQa

3N9eLqWNqb7jeF383m9qsXEBqpp8qfQmfbx:  -0.01500000 Waves

2022.06.08 10:52 [2087112] smart account 3N9eLqWNqb7jeF383m9qsXEBqpp8qfQmfbx > SELF 0.00000000 Waves

{ "type": 13, "id": "HQQpg1z4BMhJBTHDJFdZBkFSjLycXubFPGX24hS3WYQa", "fee": 1500000, "feeAssetId": null, "timestamp": 1654674811082, "version": 2, "chainId": 84, "sender": "3N9eLqWNqb7jeF383m9qsXEBqpp8qfQmfbx", "senderPublicKey": "5cWdpE4X7mfNkLmxJ389ws6qGZof4fwydqMcqPexhJ7w", "proofs": [ "25qSeCap5twshCvyhRg64ndiWAzmNhHSkiFLBqyUhYwQJPgTYRJkYxiYm9yiZ6FrQPj6fxXMPoZUjekyUDZMQjSR" ], "script": "base64:AAIFAAAAAAAAAEsIAhIHCgUICAgBARIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSBAoCCAkSAwoBCBIFCgMBCAESBAoCCAEAAAAjAAAAAAxsb2NraW5nU3RvcmUFAAAABHRoaXMAAAAADHN0YWtpbmdTdG9yZQIAAAAIX1Jlc2VydmUAAAAAEW1pbmltdW1Mb2NrQW1vdW50AgAAAA5fTWluTG9ja0Ftb3VudAAAAAARbWF4aW11bUxvY2tBbW91bnQCAAAADl9NYXhMb2NrQW1vdW50AAAAAAlhc3NldExpc3QFAAAAA25pbAAAAAARdW5sb2NrRWxpZ2liaWxpdHkCAAAAHF9FbGlnaWJsZV90b191bmxvY2tfYXRfYmxvY2sAAAAADGxvY2tlZEFtb3VudAIAAAAOX0Ftb3VudF9sb2NrZWQAAAAAC2xvY2tlZEFzc2V0AgAAAA1fQXNzZXRfbG9ja2VkAAAAAAR1c2VyAgAAAAVfVXNlcgAAAAAKQVBZX0Ftb3VudAIAAAALX0FQWV9hbW91bnQAAAAAEXRvdGFsTG9ja2VkQU1vdW50AgAAABRfVG90YWxfTG9ja2VkX0Ftb3VudAAAAAANbG9ja2luZ1BlcmlvZAIAAAAMX0RheXNfbG9ja2VkAAAAAAplbnRyeUluZGV4AgAAAAxfRW50cnlfSW5kZXgAAAAADmFscmVhZHlDbGFpbWVkAgAAABBfQWxyZWFkeV9DbGFpbWVkAAAAAAVhZG1pbgIAAAAGYWRtaW5fAAAAAAtCbG9ja1BlckRheQAAAAAAAAAFoAAAAAAUdGhpcnR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAAB4AAAAAE3NpeHR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAADwAAAAAFG5pbmV0eURheXNMb2NrUGVyaW9kAAAAAAAAAABaAQAAAARnZXRJAAAAAQAAAANrZXkJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAARnZXRTAAAAAQAAAANrZXkJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAVnZXRJVgAAAAEAAAADa2V5CQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAFZ2V0U1YAAAABAAAAA2tleQkB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AAtBc3NldFRpY2tlcgAAAAdBc3NldElEAAAADEFzc2V0UmVzZXJ2ZQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50AAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQEAAAABWNoZWNrCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAFY2hlY2sFAAAABWNoZWNrBAAAAA1hU3Rha2luZ1N0b3JlCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAxzdGFraW5nU3RvcmUEAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWluaW11bUxvY2tBbW91bnQEAAAAEmFNYXhpbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWF4aW11bUxvY2tBbW91bnQEAAAAC2NoZWNrTWluTWF4AwkAAGYAAAACBQAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50CQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWF4aW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQFAAAAA25pbAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWluaW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASYU1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50BQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAdBc3NldElECQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAANYVN0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CQAAAAAAAAIFAAAAB3VVc2VySUQFAAAAB3VVc2VySUQEAAAABWFzc2V0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAALQXNzZXRUaWNrZXICAAAADWludmFsaWQgYXNzZXQDCQAAAAAAAAIFAAAABWFzc2V0BQAAAAVhc3NldAQAAAAMdUxvY2tlZEFzc2V0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAAtsb2NrZWRBc3NldAIAAAAYYXNzZXQgbm90IGxvY2tlZCBieSB1c2VyBAAAABJ1QWxyZWFkeUNsYWltZWRLZXkJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAOYWxyZWFkeUNsYWltZWQEAAAABmNoZWNrMAkBAAAAB3Rocm93SWYAAAACCQAAAAAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCAAAAABBQAAABJ1QWxyZWFkeUNsYWltZWRLZXkCAAAAHWNhbm5vdCBhc2NlcnRhaW4gY2xhaW1hYmlsaXR5BgkAASwAAAACCQABLAAAAAICAAAAB3VzZXIgKyAFAAAABnVzZXJJZAIAAAAQIGFscmVhZHkgY2xhaW1lZAMJAAAAAAAAAgUAAAAGY2hlY2swBQAAAAZjaGVjazAEAAAADXVMb2NrZWRBbW91bnQJAQAAAAVnZXRJVgAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAMbG9ja2VkQW1vdW50BAAAAA5zdGFraW5nUmVzZXJ2ZQkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAADnRocm93T3JSZXR1cm5TAAAAAgkBAAAABGdldFMAAAABCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAxzdGFraW5nU3RvcmUCAAAAIGludGVybmFsIGVycm9yOiBubyByZXNlcnZlIGZvdW5kBAAAAAlBUFlBTW91bnQJAQAAAAVnZXRJVgAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAKQVBZX0Ftb3VudAQAAAAGcGVyaW9kCQEAAAAFZ2V0SVYAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAAEXVubG9ja0VsaWdpYmlsaXR5BAAAAApibG9ja3NMZWZ0AwkAAGcAAAACAAAAAAAAAAAACQAAZQAAAAIFAAAABnBlcmlvZAUAAAAGaGVpZ2h0AAAAAAAAAAAACQAAZQAAAAIFAAAABnBlcmlvZAUAAAAGaGVpZ2h0BAAAAAhkYXlzTGVmdAkBAAAADGJsb2Nrc1RvRGF5cwAAAAEFAAAACmJsb2Nrc0xlZnQEAAAABmNoZWNrMQkBAAAAB3Rocm93SWYAAAACCQAAZgAAAAIFAAAABnBlcmlvZAUAAAAGaGVpZ2h0CQABLAAAAAIJAAGkAAAAAQUAAAAIZGF5c0xlZnQCAAAAGC8xMDAwIGRheXMgbGVmdCB0byBjbGFpbQMJAAAAAAAAAgUAAAAGY2hlY2sxBQAAAAZjaGVjazEEAAAAEXRyYW5zZmVyQVBZQW1vdW50CQAD/AAAAAQFAAAADnN0YWtpbmdSZXNlcnZlAgAAABB0cmFuc2ZlckludGVyZXN0CQAETAAAAAIFAAAABnVzZXJJZAkABEwAAAACBQAAAAlBUFlBTW91bnQJAARMAAAAAgkAAZsAAAABBQAAAAx1TG9ja2VkQXNzZXQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABF0cmFuc2ZlckFQWUFtb3VudAUAAAARdHJhbnNmZXJBUFlBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAGdXNlcklkBQAAAA11TG9ja2VkQW1vdW50CQABmwAAAAEFAAAADHVMb2NrZWRBc3NldAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAASdUFscmVhZHlDbGFpbWVkS2V5BgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAEtL+sA==", "height": 2087112, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B5DbpXbkFrLW2uezRhhWz4W8dyKVBwHPJzyEwRuSrE9y Next: 9vsXppgwpx6u9KH6fMzqwLjPBt75cPJKG5x6aWFSct42 Diff:
OldNewDifferences
346346 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
347347 if ((check4 == check4))
348348 then {
349- let uEntryIndexKey = (((userId + "_") + AssetTicker) + entryIndex)
350349 let uEntryToString = toString(EntryIndex)
351350 let uEntry = ((("_" + AssetTicker) + "_") + uEntryToString)
352- let uUserEntryValue = (user + uEntry)
353- let uUserId = ((userId + uEntryToString) + user)
354- let uAsset = ((userId + uEntryToString) + lockedAsset)
355- let uLockingPeriod = ((userId + uEntryToString) + lockingPeriod)
356- let uLockedAmount = ((userId + uEntryToString) + lockedAmount)
357- let uAPY = ((userId + uEntryToString) + APY_Amount)
358- let uUnlockEligibility = ((userId + uEntryToString) + unlockEligibility)
359- let uAlreadyClaimed = ((userId + uEntryToString) + alreadyClaimed)
351+ let uUserEntryKey = (userId + uEntry)
352+ let uUserId = ((userId + uEntry) + user)
353+ let uAsset = ((userId + uEntry) + lockedAsset)
354+ let uLockingPeriod = ((userId + uEntry) + lockingPeriod)
355+ let uLockedAmount = ((userId + uEntry) + lockedAmount)
356+ let uAPY = ((userId + uEntry) + APY_Amount)
357+ let uUnlockEligibility = ((userId + uEntry) + unlockEligibility)
358+ let uAlreadyClaimed = ((userId + uEntry) + alreadyClaimed)
360359 let StoredAPY = invoke(Address(fromBase58String(getSV(admin))), "getAPYAmount", [userId, AssetTicker, EntryIndex], nil)
361360 let APY = match StoredAPY {
362361 case c: Int =>
364363 case _ =>
365364 throw(("could not get the APY amount for " + userId))
366365 }
367-[writeConstInteger(uUserEntryValue, 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)]
366+[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)]
368367 }
369368 else throw("Strict value is not equal to itself.")
370369 }
378377
379378
380379 @Callable(i)
381-func Claim (AssetTicker) = {
380+func Claim (AssetTicker,EntryIndex) = {
382381 let userId = toString(i.caller)
383- let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
384- let asset = toBase58String(assetValue)
385- let check007 = throwIf((getS(AssetTicker) != asset), "asset not supported")
386- if ((check007 == check007))
382+ let uEntry = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
383+ let uUserID = valueOrErrorMessage(getS(((userId + uEntry) + user)), ("no entry found for user " + userId))
384+ if ((uUserID == uUserID))
387385 then {
388- let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(throwOrReturnI(getI(((userId + AssetTicker) + entryIndex)), ("no entry found for user: " + userId))))
389- let uAlreadyClaimedKey = ((userId + uEntryIndex) + alreadyClaimed)
390- let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
391- if ((check0 == check0))
386+ let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
387+ if ((asset == asset))
392388 then {
393- let uAsset = getSV(((userId + uEntryIndex) + lockedAsset))
394- let uLockedAmount = getIV(((userId + uEntryIndex) + lockedAmount))
395- let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
396- let APYAMount = getIV(((userId + uEntryIndex) + APY_Amount))
397- let period = getIV(((userId + uEntryIndex) + unlockEligibility))
398- let blocksLeft = if ((0 >= (period - height)))
399- then 0
400- else (period - height)
401- let daysLeft = blocksToDays(blocksLeft)
402- let check1 = throwIf((period > height), (toString(daysLeft) + "/1000 days left to claim"))
403- if ((check1 == check1))
389+ let uLockedAsset = valueOrErrorMessage(getS(((userId + uEntry) + lockedAsset)), "asset not locked by user")
390+ let uAlreadyClaimedKey = ((userId + uEntry) + alreadyClaimed)
391+ let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
392+ if ((check0 == check0))
404393 then {
405- let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, toBytes(uAsset)], nil)
406- if ((transferAPYAmount == transferAPYAmount))
407- then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, toBytes(uAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
394+ let uLockedAmount = getIV(((userId + uEntry) + lockedAmount))
395+ let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
396+ let APYAMount = getIV(((userId + uEntry) + APY_Amount))
397+ let period = getIV(((userId + uEntry) + unlockEligibility))
398+ let blocksLeft = if ((0 >= (period - height)))
399+ then 0
400+ else (period - height)
401+ let daysLeft = blocksToDays(blocksLeft)
402+ let check1 = throwIf((period > height), (toString(daysLeft) + "/1000 days left to claim"))
403+ if ((check1 == check1))
404+ then {
405+ let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, toBytes(uLockedAsset)], nil)
406+ if ((transferAPYAmount == transferAPYAmount))
407+ then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, toBytes(uLockedAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
408+ else throw("Strict value is not equal to itself.")
409+ }
408410 else throw("Strict value is not equal to itself.")
409411 }
410412 else throw("Strict value is not equal to itself.")
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
3434 let BlockPerDay = 1440
3535
3636 let thirtyDaysLockPeriod = 30
3737
3838 let sixtyDaysLockPeriod = 60
3939
4040 let ninetyDaysLockPeriod = 90
4141
4242 func getI (key) = getInteger(this, key)
4343
4444
4545 func getS (key) = getString(this, key)
4646
4747
4848 func getIV (key) = value(getInteger(this, key))
4949
5050
5151 func getSV (key) = value(getString(this, key))
5252
5353
5454 func throwIf (condition,error) = if (condition)
5555 then throw(error)
5656 else true
5757
5858
5959 func throwOrReturnI (val,error) = match val {
6060 case val: Int =>
6161 val
6262 case _ =>
6363 throw(error)
6464 }
6565
6666
6767 func throwOrReturnS (val,error) = match val {
6868 case val: String =>
6969 val
7070 case _ =>
7171 throw(error)
7272 }
7373
7474
7575 func writeInt (key,value) = if ((0 > value))
7676 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
7777 else IntegerEntry(key, value)
7878
7979
8080 func writeStr (key,value) = if ((" " == value))
8181 then throw(("writing an empty string " + value))
8282 else StringEntry(key, value)
8383
8484
8585 func daysToBlocks (days) = if ((days != thirtyDaysLockPeriod))
8686 then if ((days != sixtyDaysLockPeriod))
8787 then if ((days != ninetyDaysLockPeriod))
8888 then throw("invalid locking period")
8989 else (((days + 1) * BlockPerDay) + height)
9090 else (((days + 1) * BlockPerDay) + height)
9191 else (((days + 1) * BlockPerDay) + height)
9292
9393
9494 func blocksToDays (blocksLeft) = if ((0 >= blocksLeft))
9595 then 0
9696 else {
9797 let multiplier = pow(10, 0, 3, 0, 0, CEILING)
9898 let daysleft = fraction(blocksLeft, multiplier, BlockPerDay)
9999 daysleft
100100 }
101101
102102
103103 func writeConstString (key,value) = if (!(isDefined(getS(key))))
104104 then writeStr(key, value)
105105 else throw(("already initialized: " + key))
106106
107107
108108 func writeConstInteger (key,value) = if (!(isDefined(getS(key))))
109109 then writeInt(key, value)
110110 else throw(("already initialized: " + key))
111111
112112
113113 func adminOnly (i) = {
114114 let inputAddress = toBase58String(i.caller.bytes)
115115 let otherAdmin = (admin + inputAddress)
116116 match getS(admin) {
117117 case a: String =>
118118 if ((inputAddress != getS(admin)))
119119 then throw("unauthorized")
120120 else true
121121 case _ =>
122122 match getS(otherAdmin) {
123123 case b: String =>
124124 if ((inputAddress != getS(otherAdmin)))
125125 then throw("unauthorized")
126126 else true
127127 case _ =>
128128 throw("unauthorizd")
129129 }
130130 }
131131 }
132132
133133
134134 func writeConfigValue (key,data) = match data {
135135 case data: String =>
136136 writeConstString(key, data)
137137 case data: Int =>
138138 writeConstInteger(key, data)
139139 case _ =>
140140 throw("unsupported config type")
141141 }
142142
143143
144144 func incrementEntryIndex (key) = {
145145 let uIndex = getI(key)
146146 if (isDefined(uIndex))
147147 then (value(uIndex) + 1)
148148 else 0
149149 }
150150
151151
152152 @Callable(i)
153153 func addAsset (AssetTicker,AssetID,AssetReserve,AssetMinimumLockAmount,AssetMaximumLockAmount) = {
154154 let check = adminOnly(i)
155155 if ((check == check))
156156 then {
157157 let aStakingStore = (AssetTicker + stakingStore)
158158 let aMinimumLockAmount = (AssetTicker + minimumLockAmount)
159159 let aMaximumLockAmount = (AssetTicker + maximumLockAmount)
160160 let checkMinMax = if ((AssetMaximumLockAmount > AssetMinimumLockAmount))
161161 then [writeConstInteger(aMinimumLockAmount, AssetMinimumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMaximumLockAmount)]
162162 else [writeConstInteger(aMinimumLockAmount, AssetMaximumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMinimumLockAmount)]
163163 ([writeConstString(AssetTicker, AssetID), writeConstString(aStakingStore, AssetReserve)] ++ checkMinMax)
164164 }
165165 else throw("Strict value is not equal to itself.")
166166 }
167167
168168
169169
170170 @Callable(i)
171171 func deleteAsset (AssetTicker) = {
172172 let check = adminOnly(i)
173173 if ((check == check))
174174 then {
175175 let assetID = throwOrReturnS(getS(AssetTicker), (("asset with ticker " + AssetTicker) + " not found"))
176176 if ((assetID == assetID))
177177 then [DeleteEntry(AssetTicker), DeleteEntry((AssetTicker + minimumLockAmount)), DeleteEntry((AssetTicker + maximumLockAmount)), DeleteEntry((AssetTicker + stakingStore))]
178178 else throw("Strict value is not equal to itself.")
179179 }
180180 else throw("Strict value is not equal to itself.")
181181 }
182182
183183
184184
185185 @Callable(i)
186186 func _getAssetIdByTicker (AssetTicker) = {
187187 let check = adminOnly(i)
188188 if ((check == check))
189189 then {
190190 let a = throwOrReturnS(getS(AssetTicker), "asset not found")
191191 $Tuple2(nil, a)
192192 }
193193 else throw("Strict value is not equal to itself.")
194194 }
195195
196196
197197
198198 @Callable(i)
199199 func init (AdminAddress) = {
200200 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
201201 [writeConstString(admin, toString(adminAddr))]
202202 }
203203
204204
205205
206206 @Callable(i)
207207 func _deleteEntry (key) = {
208208 let check = adminOnly(i)
209209 if ((check == check))
210210 then [DeleteEntry(key)]
211211 else throw("Strict value is not equal to itself.")
212212 }
213213
214214
215215
216216 @Callable(i)
217217 func addAdmin (AdminAddress) = {
218218 let check = adminOnly(i)
219219 if ((check == check))
220220 then {
221221 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
222222 let newAdmin = (admin + toString(adminAddr))
223223 [writeConstString(newAdmin, AdminAddress)]
224224 }
225225 else throw("Strict value is not equal to itself.")
226226 }
227227
228228
229229
230230 @Callable(i)
231231 func changeMainAdmin (newAddress) = {
232232 let checks = adminOnly(i)
233233 if ((checks == checks))
234234 then {
235235 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
236236 let del = DeleteEntry(admin)
237237 if ((del == del))
238238 then [writeConstString(admin, toString(adminAddr))]
239239 else throw("Strict value is not equal to itself.")
240240 }
241241 else throw("Strict value is not equal to itself.")
242242 }
243243
244244
245245
246246 @Callable(i)
247247 func updateOtherAdminAddress (newAddress) = {
248248 let checks = adminOnly(i)
249249 if ((checks == checks))
250250 then {
251251 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
252252 let caller = toString(i.caller)
253253 let otherAdmin = (admin + caller)
254254 let checkOldAddress = throwOrReturnS(getS(otherAdmin), "no previous address found")
255255 if ((checkOldAddress == checkOldAddress))
256256 then {
257257 let delAddress = DeleteEntry(otherAdmin)
258258 if ((delAddress == delAddress))
259259 then [writeConstString(otherAdmin, toString(adminAddr))]
260260 else throw("Strict value is not equal to itself.")
261261 }
262262 else throw("Strict value is not equal to itself.")
263263 }
264264 else throw("Strict value is not equal to itself.")
265265 }
266266
267267
268268
269269 @Callable(i)
270270 func removeOtherAdmin (address) = {
271271 let checks = adminOnly(i)
272272 if ((checks == checks))
273273 then {
274274 let adminAddr = valueOrErrorMessage(addressFromString(address), "invalid address")
275275 let otherAddress = (admin + toString(adminAddr))
276276 let delAdmin = DeleteEntry(otherAddress)
277277 if ((delAdmin == delAdmin))
278278 then nil
279279 else throw("Strict value is not equal to itself.")
280280 }
281281 else throw("Strict value is not equal to itself.")
282282 }
283283
284284
285285
286286 @Callable(i)
287287 func updateConfigValue (key,data) = {
288288 let checks = adminOnly(i)
289289 if ((checks == checks))
290290 then {
291291 let del = DeleteEntry(key)
292292 if ((del == del))
293293 then [writeConfigValue(key, data)]
294294 else throw("Strict value is not equal to itself.")
295295 }
296296 else throw("Strict value is not equal to itself.")
297297 }
298298
299299
300300
301301 @Callable(i)
302302 func _getDaysLeftToClaim (userAddress) = {
303303 let check0 = adminOnly(i)
304304 if ((check0 == check0))
305305 then {
306306 let check1 = valueOrErrorMessage(addressFromString(userAddress), "invalid address")
307307 if ((check1 == check1))
308308 then {
309309 let uEntryIndex = ("_" + toString(throwOrReturnI(getI((userAddress + entryIndex)), ("no entry found for " + userAddress))))
310310 let uUnlockEligibility = ((userAddress + uEntryIndex) + unlockEligibility)
311311 let uBlocks = throwOrReturnI(getI(uUnlockEligibility), "internal error")
312312 let uBlocksToDays = daysToBlocks((height - uBlocks))
313313 $Tuple2(nil, uBlocksToDays)
314314 }
315315 else throw("Strict value is not equal to itself.")
316316 }
317317 else throw("Strict value is not equal to itself.")
318318 }
319319
320320
321321
322322 @Callable(i)
323323 func Lock (LockPeriod,AssetTicker,EntryIndex) = {
324324 let check1 = throwIf((1 != size(i.payments)), "attach amount you want to lock")
325325 if ((check1 == check1))
326326 then {
327327 let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
328328 let asset = toBase58String(assetValue)
329329 let check2 = throwIf((getS(AssetTicker) != asset), "asset not supported")
330330 if ((check2 == check2))
331331 then {
332332 let lockPeriod = LockPeriod
333333 let userId = toBase58String(i.caller.bytes)
334334 let amountToStake = i.payments[0].amount
335335 let minToStake = throwOrReturnI(getI((AssetTicker + minimumLockAmount)), "internal error: minimum stacking amount not specified")
336336 let maxToStake = throwOrReturnI(getI((AssetTicker + maximumLockAmount)), "internal error: maximum staking amount not specified")
337337 let check3 = throwIf(if ((minToStake > amountToStake))
338338 then true
339339 else (amountToStake > maxToStake), "staking amount is out of range")
340340 if ((check3 == check3))
341341 then {
342342 let uTotalLocked = (userId + totalLockedAMount)
343343 let uSumTotal = if (!(isDefined(getI(uTotalLocked))))
344344 then 0
345345 else (amountToStake + value(getI(uTotalLocked)))
346346 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
347347 if ((check4 == check4))
348348 then {
349- let uEntryIndexKey = (((userId + "_") + AssetTicker) + entryIndex)
350349 let uEntryToString = toString(EntryIndex)
351350 let uEntry = ((("_" + AssetTicker) + "_") + uEntryToString)
352- let uUserEntryValue = (user + uEntry)
353- let uUserId = ((userId + uEntryToString) + user)
354- let uAsset = ((userId + uEntryToString) + lockedAsset)
355- let uLockingPeriod = ((userId + uEntryToString) + lockingPeriod)
356- let uLockedAmount = ((userId + uEntryToString) + lockedAmount)
357- let uAPY = ((userId + uEntryToString) + APY_Amount)
358- let uUnlockEligibility = ((userId + uEntryToString) + unlockEligibility)
359- let uAlreadyClaimed = ((userId + uEntryToString) + alreadyClaimed)
351+ let uUserEntryKey = (userId + uEntry)
352+ let uUserId = ((userId + uEntry) + user)
353+ let uAsset = ((userId + uEntry) + lockedAsset)
354+ let uLockingPeriod = ((userId + uEntry) + lockingPeriod)
355+ let uLockedAmount = ((userId + uEntry) + lockedAmount)
356+ let uAPY = ((userId + uEntry) + APY_Amount)
357+ let uUnlockEligibility = ((userId + uEntry) + unlockEligibility)
358+ let uAlreadyClaimed = ((userId + uEntry) + alreadyClaimed)
360359 let StoredAPY = invoke(Address(fromBase58String(getSV(admin))), "getAPYAmount", [userId, AssetTicker, EntryIndex], nil)
361360 let APY = match StoredAPY {
362361 case c: Int =>
363362 c
364363 case _ =>
365364 throw(("could not get the APY amount for " + userId))
366365 }
367-[writeConstInteger(uUserEntryValue, 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)]
366+[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)]
368367 }
369368 else throw("Strict value is not equal to itself.")
370369 }
371370 else throw("Strict value is not equal to itself.")
372371 }
373372 else throw("Strict value is not equal to itself.")
374373 }
375374 else throw("Strict value is not equal to itself.")
376375 }
377376
378377
379378
380379 @Callable(i)
381-func Claim (AssetTicker) = {
380+func Claim (AssetTicker,EntryIndex) = {
382381 let userId = toString(i.caller)
383- let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
384- let asset = toBase58String(assetValue)
385- let check007 = throwIf((getS(AssetTicker) != asset), "asset not supported")
386- if ((check007 == check007))
382+ let uEntry = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
383+ let uUserID = valueOrErrorMessage(getS(((userId + uEntry) + user)), ("no entry found for user " + userId))
384+ if ((uUserID == uUserID))
387385 then {
388- let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(throwOrReturnI(getI(((userId + AssetTicker) + entryIndex)), ("no entry found for user: " + userId))))
389- let uAlreadyClaimedKey = ((userId + uEntryIndex) + alreadyClaimed)
390- let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
391- if ((check0 == check0))
386+ let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
387+ if ((asset == asset))
392388 then {
393- let uAsset = getSV(((userId + uEntryIndex) + lockedAsset))
394- let uLockedAmount = getIV(((userId + uEntryIndex) + lockedAmount))
395- let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
396- let APYAMount = getIV(((userId + uEntryIndex) + APY_Amount))
397- let period = getIV(((userId + uEntryIndex) + unlockEligibility))
398- let blocksLeft = if ((0 >= (period - height)))
399- then 0
400- else (period - height)
401- let daysLeft = blocksToDays(blocksLeft)
402- let check1 = throwIf((period > height), (toString(daysLeft) + "/1000 days left to claim"))
403- if ((check1 == check1))
389+ let uLockedAsset = valueOrErrorMessage(getS(((userId + uEntry) + lockedAsset)), "asset not locked by user")
390+ let uAlreadyClaimedKey = ((userId + uEntry) + alreadyClaimed)
391+ let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
392+ if ((check0 == check0))
404393 then {
405- let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, toBytes(uAsset)], nil)
406- if ((transferAPYAmount == transferAPYAmount))
407- then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, toBytes(uAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
394+ let uLockedAmount = getIV(((userId + uEntry) + lockedAmount))
395+ let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
396+ let APYAMount = getIV(((userId + uEntry) + APY_Amount))
397+ let period = getIV(((userId + uEntry) + unlockEligibility))
398+ let blocksLeft = if ((0 >= (period - height)))
399+ then 0
400+ else (period - height)
401+ let daysLeft = blocksToDays(blocksLeft)
402+ let check1 = throwIf((period > height), (toString(daysLeft) + "/1000 days left to claim"))
403+ if ((check1 == check1))
404+ then {
405+ let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, toBytes(uLockedAsset)], nil)
406+ if ((transferAPYAmount == transferAPYAmount))
407+ then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, toBytes(uLockedAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
408+ else throw("Strict value is not equal to itself.")
409+ }
408410 else throw("Strict value is not equal to itself.")
409411 }
410412 else throw("Strict value is not equal to itself.")
411413 }
412414 else throw("Strict value is not equal to itself.")
413415 }
414416 else throw("Strict value is not equal to itself.")
415417 }
416418
417419

github/deemru/w8io/169f3d6 
65.76 ms