tx · EWhnmehQhjZ4wsijiMV95pXptwtzHJk4Qomk9yXQG7RE

3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY:  -0.01500000 Waves

2022.09.22 12:45 [2240179] smart account 3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY > SELF 0.00000000 Waves

{ "type": 13, "id": "EWhnmehQhjZ4wsijiMV95pXptwtzHJk4Qomk9yXQG7RE", "fee": 1500000, "feeAssetId": null, "timestamp": 1663839919793, "version": 2, "chainId": 84, "sender": "3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY", "senderPublicKey": "AcDSZVzDQTVsumAAwEQdT8iWi8xHRjLNJJ53MzYzk4m7", "proofs": [ "4Vk9NSGT1ktyc5t2ur2hLzqXfx4E51RPJcJRaEJvhyBCpWw7tMCFt3heYGUyTivc7AKEJXkLuEHgUjH74jgb1oze" ], "script": "base64:AAIFAAAAAAAAAE0IAhIHCgUICAgBARIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSBAoCCAkSBQoDCAgBEgUKAwEIARIECgIIAQAAACcAAAAADGxvY2tpbmdTdG9yZQUAAAAEdGhpcwAAAAAMc3Rha2luZ1N0b3JlAgAAAAhfUmVzZXJ2ZQAAAAARbWluaW11bUxvY2tBbW91bnQCAAAADl9NaW5Mb2NrQW1vdW50AAAAABFtYXhpbXVtTG9ja0Ftb3VudAIAAAAOX01heExvY2tBbW91bnQAAAAACWFzc2V0TGlzdAUAAAADbmlsAAAAABF1bmxvY2tFbGlnaWJpbGl0eQIAAAAcX0VsaWdpYmxlX3RvX3VubG9ja19hdF9ibG9jawAAAAAMbG9ja2VkQW1vdW50AgAAAA5fQW1vdW50X2xvY2tlZAAAAAALbG9ja2VkQXNzZXQCAAAADV9Bc3NldF9sb2NrZWQAAAAABHVzZXICAAAABV9Vc2VyAAAAAApBUFlfQW1vdW50AgAAAAtfQVBZX2Ftb3VudAAAAAARdG90YWxMb2NrZWRBTW91bnQCAAAAFF9Ub3RhbF9Mb2NrZWRfQW1vdW50AAAAAA1sb2NraW5nUGVyaW9kAgAAAAxfRGF5c19sb2NrZWQAAAAACmVudHJ5SW5kZXgCAAAADF9FbnRyeV9JbmRleAAAAAAOYWxyZWFkeUNsYWltZWQCAAAAEF9BbHJlYWR5X0NsYWltZWQAAAAABWFkbWluAgAAAAZhZG1pbl8AAAAAC0Jsb2NrUGVyRGF5AAAAAAAAAAWgAAAAABBvbmVEYXlMb2NrcGVyaW9kAAAAAAAAAAABAAAAABNzZXZlbkRheXNMb2NrUGVyaW9kAAAAAAAAAAAHAAAAABdmb3VydGVlbkRheXNMb2NrZVBlcmlvZAAAAAAAAAAADgAAAAAUdGhpcnR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAAB4AAAAAE3NpeHR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAADwAAAAAFG5pbmV0eURheXNMb2NrUGVyaW9kAAAAAAAAAABaAAAAAA52YWxpZGl0eUJsb2NrcwAAAAAAAAABaAEAAAAEZ2V0SQAAAAEAAAADa2V5CQAEGgAAAAIFAAAABHRoaXMFAAAAA2tl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AAAAAQIAAAALdW5hdXRob3JpemQBAAAAEHdyaXRlQ29uZmlnVmFsdWUAAAACAAAAA2tleQAAAARkYXRhBAAAAAckbWF0Y2gwBQAAAARkYXRhAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABGRhdGEFAAAAByRtYXRjaDAJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAADa2V5BQAAAARkYXRhAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABGRhdGEFAAAAByRtYXRjaDAJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAA2tleQUAAAAEZGF0YQkAAAIAAAABAgAAABd1bnN1cHBvcnRlZCBjb25maWcgdHlwZQEAAAATaW5jcmVtZW50RW50cnlJbmRleAAAAAEAAAADa2V5BAAAAAZ1SW5kZXgJAQAAAARnZXRJAAAAAQUAAAADa2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAABnVJbmRleAkAAGQAAAACCQEAAAAFdmFsdWUAAAABBQAAAAZ1SW5kZXgAAAAAAAAAAAEAAAAAAAAAAAAAAAANAAAAAWkBAAAACGFkZEFzc2V0AAAABQAAAAtBc3NldFRpY2tlcgAAAAdBc3NldElEAAAADEFzc2V0UmVzZXJ2ZQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50AAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQEAAAABWNoZWNrCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAFY2hlY2sFAAAABWNoZWNrBAAAAA1hU3Rha2luZ1N0b3JlCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAxzdGFraW5nU3RvcmUEAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWluaW11bUxvY2tBbW91bnQEAAAAEmFNYXhpbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWF4aW11bUxvY2tBbW91bnQEAAAAC2NoZWNrTWluTWF4AwkAAGYAAAACBQAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50CQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWF4aW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQFAAAAA25pbAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWluaW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASYU1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50BQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAdBc3NldElECQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAANYVN0YWtpbmdTdG9yZQUAAAAMQXNzZXRSZXNlcnZlBQAAAANuaWwFAAAAC2NoZWNrTWluTWF4CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtkZWxldGVBc3NldAAAAAEAAAALQXNzZXRUaWNrZXIEAAAABWNoZWNrCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAFY2hlY2sFAAAABWNoZWNrBAAAAAdhc3NldElECQEAAAAOdGhyb3dPclJldHVyblMAAAACCQEAAAAEZ2V0UwAAAAEFAAAAC0Fzc2V0VGlja2VyCQABLAAAAAIJAAEsAAAAAgIAAAASYXNzZXQgd2l0aCB0aWNrZXIgBQAAAAtBc3NldFRpY2tlcgIAAAAKIG5vdCBmb3VuZAMJAAAAAAAAAgUAAAAHYXNzZXRJRAUAAAAHYXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAtBc3NldFRp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aW5BZGRyZXNzAAAAAQAAAApuZXdBZGRyZXNzBAAAAAZjaGVja3MJAQAAAAlhZG1pbk9ubHkAAAABBQAAAAFpAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAJYWRtaW5BZGRyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAKbmV3QWRkcmVzcwIAAAAPaW52YWxpZCBhZGRyZXNzBAAAAAZjYWxsZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAApvdGhlckFkbWluCQABLAAAAAIFAAAABWFkbWluBQAAAAZjYWxsZXIEAAAAD2NoZWNrT2xkQWRkcmVzcwkBAAAADnRocm93T3JSZXR1cm5TAAAAAgkBAAAABGdldFMAAAABBQAAAApvdGhlckFkbWluAgAAABlubyBwcmV2aW91cyBhZGRyZXNzIGZvdW5kAwkAAAAAAAACBQAAAA9jaGVja09sZEFkZHJlc3MFAAAAD2NoZWNrT2xkQWRkcmVzcwQAAAAKZGVsQWRkcmVzcwkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAKb3RoZXJBZG1pbgMJAAAAAAAAAgUAAAAKZGVsQWRkcmVzcwUAAAAKZGVsQWRkcmVzcwkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAACm90aGVyQWRtaW4JAAQlAAAAAQUAAAAJYWRtaW5BZGRyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAQcmVtb3ZlT3RoZXJBZG1pbgAAAAEAAAAHYWRkcmVzcwQAAAAGY2hlY2tzCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACWFkbWluQWRkcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAB2FkZHJlc3MC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c3NldFRpY2tlcgUAAAAFYXNzZXQCAAAAE2Fzc2V0IG5vdCBzdXBwb3J0ZWQDCQAAAAAAAAIFAAAABmNoZWNrMgUAAAAGY2hlY2syBAAAAApsb2NrUGVyaW9kBQAAAApMb2NrUGVyaW9kBAAAAAZ1c2VySWQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAANYW1vdW50VG9TdGFrZQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAAAptaW5Ub1N0YWtlCQEAAAAOdGhyb3dPclJldHVybkkAAAACCQEAAAAEZ2V0SQAAAAEJAAEsAAAAAgUAAAALQXNzZXRUaWNrZXIFAAAAEW1pbmltdW1Mb2NrQW1vdW50AgAAADVpbnRlcm5hbCBlcnJvcjogbWluaW11bSBzdGFja2luZyBhbW91bnQgbm90IHNwZWNpZmllZAQAAAAKbWF4VG9TdGFrZQkBAAAADnRocm93T3JSZXR1cm5JAAAAAgkBAAAABGdldEkAAAABCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAABFtYXhpbXVtTG9ja0Ftb3VudAIAAAA0aW50ZXJuYWwgZXJyb3I6IG1heGltdW0gc3Rha2luZyBhbW91bnQgbm90IHNwZWNpZmllZAQAAAAGY2hlY2szCQEAAAAHdGhyb3dJZgAAAAIDCQAAZgAAAAIFAAAACm1pblRvU3Rha2UFAAAADWFtb3VudFRvU3Rha2UGCQAAZgAAAAIFAAAADWFtb3VudFRvU3Rha2UFAAAACm1heFRvU3Rha2UCAAAAHnN0YWtpbmcgYW1vdW50IGlzIG91dCBvZiByYW5nZQMJAAAAAAAAAgUAAAAGY2hlY2szBQAAAAZjaGVjazMEAAAADHVUb3RhbExvY2tlZAkAASwAAAACBQAAAAZ1c2VySWQFAAAAEXRvdGFsTG9ja2VkQU1vdW50BAAAAAl1U3VtVG90YWwDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAEZ2V0SQAAAAEFAAAADHVUb3RhbExvY2tlZAAAAAAAAAAAAAkAAGQAAAACBQAAAA1hbW91bnRUb1N0YWtlCQEAAAAFdmFsdWUAAAABCQEAAAAEZ2V0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ZWNrMQQAAAAMdVRvdGFsTG9ja2VkCQABLAAAAAIFAAAABnVzZXJJZAUAAAARdG90YWxMb2NrZWRBTW91bnQEAAAADHN1bVRvdGFsTGVmdAkAAGUAAAACCQEAAAAFZ2V0SVYAAAABBQAAAAx1VG90YWxMb2NrZWQFAAAADXVMb2NrZWRBbW91bnQEAAAAEXRyYW5zZmVyQVBZQW1vdW50CQAD/AAAAAQFAAAADnN0YWtpbmdSZXNlcnZlAgAAABB0cmFuc2ZlckludGVyZXN0CQAETAAAAAIFAAAABnVzZXJJZAkABEwAAAACBQAAAAlBUFlBTW91bnQJAARMAAAAAgkAAlkAAAABBQAAAAx1TG9ja2VkQXNzZXQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABF0cmFuc2ZlckFQWUFtb3VudAUAAAARdHJhbnNmZXJBUFlBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAGdXNlcklkBQAAAA11TG9ja2VkQW1vdW50CQACWQAAAAEFAAAADHVMb2NrZWRBc3NldAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAAAx1VG90YWxMb2NrZWQFAAAADHN1bVRvdGFsTGVmdAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAASdUFscmVhZHlDbGFpbWVkS2V5BgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAPCJOMg==", "height": 2240179, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CVbM4gt556PQmsQBJQheh55N5rfqJe7vYwj2RkQNt6vG Next: 3WFqjmC1p7r7gB5JPebca23QHmL3qGkvPDyHKgTfxqm4 Diff:
OldNewDifferences
4444 let sixtyDaysLockPeriod = 60
4545
4646 let ninetyDaysLockPeriod = 90
47+
48+let validityBlocks = 360
4749
4850 func getI (key) = getInteger(this, key)
4951
9597 then if ((days != sixtyDaysLockPeriod))
9698 then if ((days != ninetyDaysLockPeriod))
9799 then throw("invalid locking period")
98- else (((days + 2) * BlockPerDay) + height)
99- else (((days + 2) * BlockPerDay) + height)
100- else (((days + 2) * BlockPerDay) + height)
101- else (((days + 2) * BlockPerDay) + height)
102- else (((days + 2) * BlockPerDay) + height)
103- else (((days + 2) * BlockPerDay) + height)
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)
104106
105107
106108 func blocksToDays (blocksLeft) = if ((0 >= blocksLeft))
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 oneDayLockperiod = 1
3737
3838 let sevenDaysLockPeriod = 7
3939
4040 let fourteenDaysLockePeriod = 14
4141
4242 let thirtyDaysLockPeriod = 30
4343
4444 let sixtyDaysLockPeriod = 60
4545
4646 let ninetyDaysLockPeriod = 90
47+
48+let validityBlocks = 360
4749
4850 func getI (key) = getInteger(this, key)
4951
5052
5153 func getS (key) = getString(this, key)
5254
5355
5456 func getIV (key) = value(getInteger(this, key))
5557
5658
5759 func getSV (key) = value(getString(this, key))
5860
5961
6062 func throwIf (condition,error) = if (condition)
6163 then throw(error)
6264 else true
6365
6466
6567 func throwOrReturnI (val,error) = match val {
6668 case val: Int =>
6769 val
6870 case _ =>
6971 throw(error)
7072 }
7173
7274
7375 func throwOrReturnS (val,error) = match val {
7476 case val: String =>
7577 val
7678 case _ =>
7779 throw(error)
7880 }
7981
8082
8183 func writeInt (key,value) = if ((0 > value))
8284 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
8385 else IntegerEntry(key, value)
8486
8587
8688 func writeStr (key,value) = if ((" " == value))
8789 then throw(("writing an empty string " + value))
8890 else StringEntry(key, value)
8991
9092
9193 func daysToBlocks (days) = if ((days != oneDayLockperiod))
9294 then if ((days != sevenDaysLockPeriod))
9395 then if ((days != fourteenDaysLockePeriod))
9496 then if ((days != thirtyDaysLockPeriod))
9597 then if ((days != sixtyDaysLockPeriod))
9698 then if ((days != ninetyDaysLockPeriod))
9799 then throw("invalid locking period")
98- else (((days + 2) * BlockPerDay) + height)
99- else (((days + 2) * BlockPerDay) + height)
100- else (((days + 2) * BlockPerDay) + height)
101- else (((days + 2) * BlockPerDay) + height)
102- else (((days + 2) * BlockPerDay) + height)
103- else (((days + 2) * BlockPerDay) + height)
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)
104106
105107
106108 func blocksToDays (blocksLeft) = if ((0 >= blocksLeft))
107109 then 0
108110 else {
109111 let daysleft = fraction(blocksLeft, 1000, BlockPerDay, CEILING)
110112 daysleft
111113 }
112114
113115
114116 func writeConstString (key,value) = if (!(isDefined(getS(key))))
115117 then writeStr(key, value)
116118 else throw((" entry already initialized: " + key))
117119
118120
119121 func writeConstInteger (key,value) = if (!(isDefined(getS(key))))
120122 then writeInt(key, value)
121123 else throw((" entry already initialized: " + key))
122124
123125
124126 func adminOnly (i) = {
125127 let inputAddress = toBase58String(i.caller.bytes)
126128 let otherAdmin = (admin + inputAddress)
127129 match getS(admin) {
128130 case a: String =>
129131 if ((inputAddress != getS(admin)))
130132 then throw("unauthorized")
131133 else true
132134 case _ =>
133135 match getS(otherAdmin) {
134136 case b: String =>
135137 if ((inputAddress != getS(otherAdmin)))
136138 then throw("unauthorized")
137139 else true
138140 case _ =>
139141 throw("unauthorizd")
140142 }
141143 }
142144 }
143145
144146
145147 func writeConfigValue (key,data) = match data {
146148 case data: String =>
147149 writeConstString(key, data)
148150 case data: Int =>
149151 writeConstInteger(key, data)
150152 case _ =>
151153 throw("unsupported config type")
152154 }
153155
154156
155157 func incrementEntryIndex (key) = {
156158 let uIndex = getI(key)
157159 if (isDefined(uIndex))
158160 then (value(uIndex) + 1)
159161 else 0
160162 }
161163
162164
163165 @Callable(i)
164166 func addAsset (AssetTicker,AssetID,AssetReserve,AssetMinimumLockAmount,AssetMaximumLockAmount) = {
165167 let check = adminOnly(i)
166168 if ((check == check))
167169 then {
168170 let aStakingStore = (AssetTicker + stakingStore)
169171 let aMinimumLockAmount = (AssetTicker + minimumLockAmount)
170172 let aMaximumLockAmount = (AssetTicker + maximumLockAmount)
171173 let checkMinMax = if ((AssetMaximumLockAmount > AssetMinimumLockAmount))
172174 then [writeConstInteger(aMinimumLockAmount, AssetMinimumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMaximumLockAmount)]
173175 else [writeConstInteger(aMinimumLockAmount, AssetMaximumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMinimumLockAmount)]
174176 ([writeConstString(AssetTicker, AssetID), writeConstString(aStakingStore, AssetReserve)] ++ checkMinMax)
175177 }
176178 else throw("Strict value is not equal to itself.")
177179 }
178180
179181
180182
181183 @Callable(i)
182184 func deleteAsset (AssetTicker) = {
183185 let check = adminOnly(i)
184186 if ((check == check))
185187 then {
186188 let assetID = throwOrReturnS(getS(AssetTicker), (("asset with ticker " + AssetTicker) + " not found"))
187189 if ((assetID == assetID))
188190 then [DeleteEntry(AssetTicker), DeleteEntry((AssetTicker + minimumLockAmount)), DeleteEntry((AssetTicker + maximumLockAmount)), DeleteEntry((AssetTicker + stakingStore))]
189191 else throw("Strict value is not equal to itself.")
190192 }
191193 else throw("Strict value is not equal to itself.")
192194 }
193195
194196
195197
196198 @Callable(i)
197199 func _getAssetIdByTicker (AssetTicker) = {
198200 let check = adminOnly(i)
199201 if ((check == check))
200202 then {
201203 let a = throwOrReturnS(getS(AssetTicker), "asset not found")
202204 $Tuple2(nil, a)
203205 }
204206 else throw("Strict value is not equal to itself.")
205207 }
206208
207209
208210
209211 @Callable(i)
210212 func init (AdminAddress) = {
211213 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
212214 [writeConstString(admin, toString(adminAddr))]
213215 }
214216
215217
216218
217219 @Callable(i)
218220 func _deleteEntry (key) = {
219221 let check = adminOnly(i)
220222 if ((check == check))
221223 then [DeleteEntry(key)]
222224 else throw("Strict value is not equal to itself.")
223225 }
224226
225227
226228
227229 @Callable(i)
228230 func addAdmin (AdminAddress) = {
229231 let check = adminOnly(i)
230232 if ((check == check))
231233 then {
232234 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
233235 let newAdmin = (admin + toString(adminAddr))
234236 [writeConstString(newAdmin, AdminAddress)]
235237 }
236238 else throw("Strict value is not equal to itself.")
237239 }
238240
239241
240242
241243 @Callable(i)
242244 func changeMainAdmin (newAddress) = {
243245 let checks = adminOnly(i)
244246 if ((checks == checks))
245247 then {
246248 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
247249 let del = DeleteEntry(admin)
248250 if ((del == del))
249251 then [writeConstString(admin, toString(adminAddr))]
250252 else throw("Strict value is not equal to itself.")
251253 }
252254 else throw("Strict value is not equal to itself.")
253255 }
254256
255257
256258
257259 @Callable(i)
258260 func updateOtherAdminAddress (newAddress) = {
259261 let checks = adminOnly(i)
260262 if ((checks == checks))
261263 then {
262264 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
263265 let caller = toString(i.caller)
264266 let otherAdmin = (admin + caller)
265267 let checkOldAddress = throwOrReturnS(getS(otherAdmin), "no previous address found")
266268 if ((checkOldAddress == checkOldAddress))
267269 then {
268270 let delAddress = DeleteEntry(otherAdmin)
269271 if ((delAddress == delAddress))
270272 then [writeConstString(otherAdmin, toString(adminAddr))]
271273 else throw("Strict value is not equal to itself.")
272274 }
273275 else throw("Strict value is not equal to itself.")
274276 }
275277 else throw("Strict value is not equal to itself.")
276278 }
277279
278280
279281
280282 @Callable(i)
281283 func removeOtherAdmin (address) = {
282284 let checks = adminOnly(i)
283285 if ((checks == checks))
284286 then {
285287 let adminAddr = valueOrErrorMessage(addressFromString(address), "invalid address")
286288 let otherAddress = (admin + toString(adminAddr))
287289 let delAdmin = DeleteEntry(otherAddress)
288290 if ((delAdmin == delAdmin))
289291 then nil
290292 else throw("Strict value is not equal to itself.")
291293 }
292294 else throw("Strict value is not equal to itself.")
293295 }
294296
295297
296298
297299 @Callable(i)
298300 func updateConfigValue (key,data) = {
299301 let checks = adminOnly(i)
300302 if ((checks == checks))
301303 then {
302304 let del = DeleteEntry(key)
303305 if ((del == del))
304306 then [writeConfigValue(key, data)]
305307 else throw("Strict value is not equal to itself.")
306308 }
307309 else throw("Strict value is not equal to itself.")
308310 }
309311
310312
311313
312314 @Callable(i)
313315 func _getDaysLeftToClaim (userAddress,AssetTicker,EntryIndex) = {
314316 let check0 = adminOnly(i)
315317 if ((check0 == check0))
316318 then {
317319 let check1 = valueOrErrorMessage(addressFromString(userAddress), "invalid address")
318320 if ((check1 == check1))
319321 then {
320322 let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
321323 let uUnlockEligibility = ((userAddress + uEntryIndex) + unlockEligibility)
322324 let uBlocksLeft = valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress))
323325 let uBlocksToDays = blocksToDays((uBlocksLeft - height))
324326 $Tuple2(nil, uBlocksToDays)
325327 }
326328 else throw("Strict value is not equal to itself.")
327329 }
328330 else throw("Strict value is not equal to itself.")
329331 }
330332
331333
332334
333335 @Callable(i)
334336 func Lock (LockPeriod,AssetTicker,EntryIndex) = {
335337 let check1 = throwIf((1 != size(i.payments)), "attach amount you want to lock")
336338 if ((check1 == check1))
337339 then {
338340 let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
339341 let asset = toBase58String(assetValue)
340342 let check2 = throwIf((getS(AssetTicker) != asset), "asset not supported")
341343 if ((check2 == check2))
342344 then {
343345 let lockPeriod = LockPeriod
344346 let userId = toBase58String(i.caller.bytes)
345347 let amountToStake = i.payments[0].amount
346348 let minToStake = throwOrReturnI(getI((AssetTicker + minimumLockAmount)), "internal error: minimum stacking amount not specified")
347349 let maxToStake = throwOrReturnI(getI((AssetTicker + maximumLockAmount)), "internal error: maximum staking amount not specified")
348350 let check3 = throwIf(if ((minToStake > amountToStake))
349351 then true
350352 else (amountToStake > maxToStake), "staking amount is out of range")
351353 if ((check3 == check3))
352354 then {
353355 let uTotalLocked = (userId + totalLockedAMount)
354356 let uSumTotal = if (!(isDefined(getI(uTotalLocked))))
355357 then 0
356358 else (amountToStake + value(getI(uTotalLocked)))
357359 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
358360 if ((check4 == check4))
359361 then {
360362 let uEntryToString = toString(EntryIndex)
361363 let uEntry = ((("_" + AssetTicker) + "_") + uEntryToString)
362364 let uUserEntryKey = (userId + uEntry)
363365 let uUserId = ((userId + uEntry) + user)
364366 let uAsset = ((userId + uEntry) + lockedAsset)
365367 let uLockingPeriod = ((userId + uEntry) + lockingPeriod)
366368 let uLockedAmount = ((userId + uEntry) + lockedAmount)
367369 let uAPY = ((userId + uEntry) + APY_Amount)
368370 let uUnlockEligibility = ((userId + uEntry) + unlockEligibility)
369371 let uAlreadyClaimed = ((userId + uEntry) + alreadyClaimed)
370372 let StoredAPY = invoke(Address(fromBase58String(getSV(admin))), "getAPYAmount", [userId, AssetTicker, EntryIndex], nil)
371373 let APY = match StoredAPY {
372374 case c: Int =>
373375 c
374376 case _ =>
375377 throw(("could not get the APY amount for " + userId))
376378 }
377379 [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)]
378380 }
379381 else throw("Strict value is not equal to itself.")
380382 }
381383 else throw("Strict value is not equal to itself.")
382384 }
383385 else throw("Strict value is not equal to itself.")
384386 }
385387 else throw("Strict value is not equal to itself.")
386388 }
387389
388390
389391
390392 @Callable(i)
391393 func Claim (AssetTicker,EntryIndex) = {
392394 let userId = toString(i.caller)
393395 let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
394396 if ((asset == asset))
395397 then {
396398 let uEntry = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
397399 let uUserID = valueOrErrorMessage(getS(((userId + uEntry) + user)), ("no entry found for user " + userId))
398400 if ((uUserID == uUserID))
399401 then {
400402 let uLockedAsset = valueOrErrorMessage(getS(((userId + uEntry) + lockedAsset)), "asset not locked by user")
401403 let uAlreadyClaimedKey = ((userId + uEntry) + alreadyClaimed)
402404 let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
403405 if ((check0 == check0))
404406 then {
405407 let uLockedAmount = getIV(((userId + uEntry) + lockedAmount))
406408 let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
407409 let APYAMount = getIV(((userId + uEntry) + APY_Amount))
408410 let period = getIV(((userId + uEntry) + unlockEligibility))
409411 let blocksLeft = if ((0 >= (period - height)))
410412 then 0
411413 else (period - height)
412414 let daysLeft = blocksToDays(blocksLeft)
413415 let check1 = throwIf((period > height), (("(" + toString(daysLeft)) + "/1000) days left to claim"))
414416 if ((check1 == check1))
415417 then {
416418 let uTotalLocked = (userId + totalLockedAMount)
417419 let sumTotalLeft = (getIV(uTotalLocked) - uLockedAmount)
418420 let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, fromBase58String(uLockedAsset)], nil)
419421 if ((transferAPYAmount == transferAPYAmount))
420422 then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, fromBase58String(uLockedAsset)), writeConstInteger(uTotalLocked, sumTotalLeft), BooleanEntry(uAlreadyClaimedKey, true)]
421423 else throw("Strict value is not equal to itself.")
422424 }
423425 else throw("Strict value is not equal to itself.")
424426 }
425427 else throw("Strict value is not equal to itself.")
426428 }
427429 else throw("Strict value is not equal to itself.")
428430 }
429431 else throw("Strict value is not equal to itself.")
430432 }
431433
432434

github/deemru/w8io/873ac7e 
146.89 ms