tx · DsucG4TWZ7dYEc4iAS8cpBDgEVXpitxqqXkvi3dXgun8

3N88cyFPyd518AoTfbNvbPJTkEF12kGgGnX:  -0.01000000 Waves

2021.12.06 09:07 [1822021] smart account 3N88cyFPyd518AoTfbNvbPJTkEF12kGgGnX > SELF 0.00000000 Waves

{ "type": 13, "id": "DsucG4TWZ7dYEc4iAS8cpBDgEVXpitxqqXkvi3dXgun8", "fee": 1000000, "feeAssetId": null, "timestamp": 1638770853596, "version": 1, "sender": "3N88cyFPyd518AoTfbNvbPJTkEF12kGgGnX", "senderPublicKey": "F1iraHvLza5gYutq8W3z1BChdgxUEYajVABUbzM6Fy62", "proofs": [ "5HNZdiAvBjWSzvtCtFtTKNEYGCxh9hMvHifycM3rNn9nnerZtMBtvmivomeufbXgL4tFw3EoWKPRQxTLnyg5oDPC" ], "script": "base64:AAIFAAAAAAAADvkIAhIAEgASAwoBARIAEgASBgoEGBEBARIAEgAaEgoCYTESDGFkbWluUHViS2V5MRoSCgJhMhIMYWRtaW5QdWJLZXkyGhIKAmEzEgxhZG1pblB1YktleTMaGgoCYTQSFGFkbWluUHViS2V5U3RhcnRTdG9wGhcKAmE1EhFhZG1pblB1YktleVdhbGxldBoPCgJhNhIJa2V5QWN0aXZlGg4KAmE3EghrZXlDYXVzZRoVCgJhOBIPa2V5TGFzdEludGVyZXN0GhkKAmE5EhNrZXlVc2VyTGFzdEludGVyZXN0GhcKAmIxEhFrZXlVc2VyU1dPUExvY2tlZBoaCgJiMhIUa2V5VXNlckdldEJhY2tIZWlnaHQaGAoCYjMSEmtleVRvdGFsU1dPUExvY2tlZBoYCgJiNBISa1VzZXJUb3RhbFZvdGVTV09QGh0KAmI1EhdrZXlVc2VyVm90ZU9wdGlvbkFtb3VudBoeCgJiNhIYa2V5VG90YWxWb3RlT3B0aW9uQW1vdW50Gh4KAmI3EhhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQaIgoCYjgSHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQaEQoCYjkSC2tleVZvdGVOYW1lGhMKAmMxEg1rZXlPcHRpb25OYW1lGhoKAmMyEhRrZXlWb3RpbmdTdGFydEhlaWdodBoVCgJjMxIPa2V5Vm90ZUR1cmF0aW9uGiIKAmM0EhxrZXlSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50GiMKAmM1Eh1rZXlSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cxobCgJjNhIVa2V5SGVpZ2h0UG9vbEZyYWN0aW9uGiMKAmM3Eh1rZXlUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudBokCgJjOBIea2V5VG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzGhsKAmM5EhVrZXlSZXdhcmRVcGRhdGVIZWlnaHQaKgoCZDESJGtleVJld2FyZFVwZGF0ZUZpcnN0UGFnaW5hdGlvbkhlaWdodBobCgJkMhIVa2V5Tm9Wb3RpbmdGb3JOZXdQb29sGhwKAmQzEhZrZXlZZXNWb3RpbmdGb3JOZXdQb29sGiEKAmQ0EhtrZXlBbW91bnRPZlZvdGluZ0Zvck5ld1Bvb2waIQoCZDUSG2tleVN0YXR1c09mVm90aW5nRm9yTmV3UG9vbBolCgJkNhIfa2V5SGVpZ2h0T2ZQb29sVm90aW5nRm9yTmV3UG9vbBoVCgJkNxIPYWN0aXZlVm90ZUZpcnN0GhYKAmQ4EhBhY3RpdmVWb3RlU2Vjb25kGhUKAmQ5Eg9hY3RpdmVWb3RlVGhpcmQaEwoCZTESDWtleVRlbXBDdXJTdW0aDgoCZTISCGlzQWN0aXZlGhgKAmUzEhJmYXJtaW5nU1dPUEFkZHJlc3MaGAoCZTQSEnZvdGluZ0xpdGVDb250cmFjdBoWCgJlNRIQdm90aW5nRm9yTmV3UG9vbBoPCgJlNhIJa2V5U1dPUGlkGgoKAmU3EgRTV09QGhAKAmU4EgpzY2FsZVZhbHVlGhQKAmU5Eg50b3RhbFZvdGVTaGFyZRoSCgJmMRIMa1N0YXJ0SGVpZ2h0GhEKAmYyEgtrQmFzZVBlcmlvZBoTCgJmMxINa1BlcmlvZExlbmd0aBoVCgJmNBIPa1VzZXJUb3RhbFN0cnVjGhAKAmY1EgpiYXNlUGVyaW9kGhEKAmY2EgtzdGFydEhlaWdodBoSCgJmNxIMcGVyaW9kTGVuZ3RoGhUKAmY4Eg9maXJzdEFjdGl2ZVZvdGUaFgoCZjkSEHNlY29uZEFjdGl2ZVZvdGUaFQoCZzESD3RoaXJkQWN0aXZlVm90ZRoWCgJnMhIQY3VyclZvdGluZ1BlcmlvZBoNCgJnMxIHc3VzcGVuZBoLCgJnNBIFY2F1c2UaGAoCZzUSEnRocm93Tm90RW5vdWdoU1dPUBoZCgJnNhITZ2V0TGFzdEludGVyZXN0SW5mbxoSCgJnNxIMbGFzdEludGVyZXN0GhcKAmc4EhFnZXRVc2VyU1dPUExvY2tlZBoKCgJnORIEdXNlchoeCgJoMRIYZ2V0VXNlclNXT1BDbGFpbWVkQW1vdW50GhwKAmgyEhZnZXRVc2VyVG90YWxWb3RlQW1vdW50GhkKAmgzEhNnZXRVc2VySW50ZXJlc3RJbmZvGhQKAmg0Eg51c2VyU1dPUEFtb3VudBoWCgJoNRIQdXNlckxhc3RJbnRlcmVzdBobCgJoNhIVdXNlckxhc3RJbnRlcmVzdFZhbHVlGg0KAmg3EgckbWF0Y2gwGiYKAmg4EiBnZXRVc2VyVG90YWxWb3RlQW1vdW50Rm9yT25lUG9vbBoKCgJoORIEcG9vbBoMCgJpMRIGdm90aW5nGhQKAmkyEg5oZWlnaHRPZlZvdGluZxoUCgJpMxIOc3RhdHVzT2ZWb3RpbmcaEwoCaTQSDWN1cnJlbnRIZWlnaHQaJgoCaTUSIGdldFVzZXJUb3RhbFZvdGVGb3JOZXdQb29sQW1vdW50GhIKAmk2EgxsaXN0T2ZWb3RpbmcaGAoCaTcSEmdldFRvdGFsU1dPUExvY2tlZBoVCgJpOBIPZ2V0VXNlclZvdGVJbmZvGhEKAmk5EgskdDA1OTkzNjU0NBoKCgJqMRIEZGF0YRoUCgJqMhIOdVBvb2xUb3RhbFNXT1AaFwoCajMSEXVzZXJUb3RhbFZvdGVTV09QGhEKAmo0Egt1c2VyVW52b3RlZBoXCgJqNRIRdXNlclVudm90ZWRQZXJpb2QaFwoCajYSEXVzZXJVbnZvdGVkQWN0dWFsGh0KAmo3EhdnZXRVc2VyVm90ZU9wdGlvbkFtb3VudBoaCgJqOBIUZ2V0Vm90aW5nU3RhcnRIZWlnaHQaDgoCajkSCHZvdGVOYW1lGhkKAmsxEhNnZXRQb29sVXBkYXRlSGVpZ2h0Gh4KAmsyEhhpc0RlZmluZVBvb2xVcGRhdGVIZWlnaHQaFgoCazMSEGdldEN1clBvb2xXZWlnaHQaFwoCazQSEWdldFByZXZQb29sV2VpZ2h0GhkKAms1EhNnZXRWb3RlT3B0aW9uQW1vdW50GgwKAms2EgZvcHRpb24aGgoCazcSFHVzZXJWb3RlT3B0aW9uQW1vdW50GgoKAms4EgR1dm9hGhUKAms5Eg9nZXRWb3RlRHVyYXRpb24aHgoCbDESGGdldFRvdGFsVm90ZU9wdGlvbkFtb3VudBobCgJsMhIVdG90YWxWb3RlT3B0aW9uQW1vdW50GgoKAmwzEgR0dm9hGhoKAmw0EhRnZXRVc2VyR2V0QmFja0Ftb3VudBoXCgJsNRIRZ2V0QmFja1NXT1BIZWlnaHQaCQoCbDYSA2tleRoPCgJsNxIJY2xhaW1DYWxjGgwKAmw4EgZjYWxsZXIaEQoCbDkSCyR0MDg5NDg5MDI4GhQKAm0xEg51c2VyU1dPUExvY2tlZBoRCgJtMhILY2xhaW1BbW91bnQaFQoCbTMSD3VzZXJOZXdJbnRlcmVzdBoRCgJtNBILJHQwOTI5MzkzNjgaDwoCbTUSCXBtdEFtb3VudBoQCgJtNhIKcG10QXNzZXRJZBoVCgJtNxIPdG90YWxTV09QTG9ja2VkGhEKAm04EgtpbnRlcmVzdE5ldxoRCgJtORILJHQwOTgwNjk4ODEaEgoCbjESDCR0MDk5OTcxMDA3ORoXCgJuMhIRdXNlclNXT1BMb2NrZWROZXcaGAoCbjMSEnRvdGFsU1dPUExvY2tlZE5ldxoXCgJuNBIRdXNlckNsYWltZWRBbW91bnQaGgoCbjUSFHVzZXJDbGFpbWVkQW1vdW50TmV3GhQKAm42Eg53aXRoZHJhd0Ftb3VudBoTCgJuNxINJHQwMTEyMjkxMTI4NBoTCgJuOBINJHQwMTEyODkxMTM3OBoUCgJuORIOdXNlclZvdGVBbW91bnQaFgoCbzESEHVzZXJVbnZvdGVBbW91bnQaHgoCbzISGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbBoYCgJvMxISYXZhaWxhYmxlVG9VbnN0YWtlGhcKAm80EhF1c2VyU1dPUGFtb3VudE5ldxoTCgJvNRINJHQwMTI3NTgxMjgxMxoTCgJvNhINJHQwMTM1OTIxMzY0NxoSCgJvNxIMY3VycmVudFBvb2xzGhQKAm84Eg5jdXJyZW50UmV3YXJkcxoYCgJvORIScmV3YXJkVXBkYXRlSGVpZ2h0GhAKAnAxEgpwYWdpbmF0aW9uGhEKAnAyEgthbW91bnRQb29scxodCgJwMxIXdG90YWxSZXdhcmRVcGRhdGVIZWlnaHQaCQoCcDQSA3N1bRofCgJwNRIZY2hhbmdlUHJldmlvdXNSZXdhcmRFbnRyeRoRCgJwNhILYWNjdW11bGF0ZWQaHAoCcDcSFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQaEAoCcDgSCnBvb2xSZXdhcmQaHgoCcDkSGGNoYW5nZUN1cnJlbnRSZXdhcmRFbnRyeRoPCgJxMRIJcG9vbEluZGV4GhcKAnEyEhFjaGFuZ2VIZWlnaHRFbnRyeRoQCgJxMxIKcG9vbEhlaWdodBoSCgJxNBIMZ2V0U3VtUmV3YXJkGhAKAnE1EgpjdXJUZW1wU3VtGhcKAnE2EhFjdXJUZW1wU3VtRnJvbUtleRosCgJxNxImcmV3YXJkVXBk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", "chainId": 84, "height": 1822021, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
5+
6+let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
7+
8+let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
9+
10+let adminPubKeyStartStop = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
11+
12+let adminPubKeyWallet = base58'GTY8yEJ2S4heRompxyvbJoBN1Td5BM5Pp4JgVbj9tmCw'
13+
14+let keyActive = "active"
15+
16+let keyCause = "shutdown_cause"
17+
18+let keyLastInterest = "last_interest"
19+
20+let keyUserLastInterest = "_last_interest"
21+
22+let keyUserSWOPLocked = "_SWOP_amount"
23+
24+let keyUserGetBackHeight = "_getBackHeight"
25+
26+let keyTotalSWOPLocked = "total_SWOP_amount"
27+
28+let kUserTotalVoteSWOP = "_user_total_SWOP_vote"
29+
30+let keyUserVoteOptionAmount = "_SWOP_option_amount"
31+
32+let keyTotalVoteOptionAmount = "total_SWOP_option_amount"
33+
34+let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount"
35+
36+let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount"
37+
38+let keyVoteName = "vote_name"
39+
40+let keyOptionName = "_option_name"
41+
42+let keyVotingStartHeight = "_startHeight"
43+
44+let keyVoteDuration = "_vote_duration"
45+
46+let keyRewardPoolFractionCurrent = "_current_pool_fraction_reward"
47+
48+let keyRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
49+
50+let keyHeightPoolFraction = "_pool_reward_update_height"
51+
52+let keyTotalRewardPerBlockCurrent = "total_reward_per_block_current"
53+
54+let keyTotalRewardPerBlockPrevious = "total_reward_per_block_previous"
55+
56+let keyRewardUpdateHeight = "reward_update_height"
57+
58+let keyRewardUpdateFirstPaginationHeight = "reward_update_height_first_pagination"
59+
60+let keyNoVotingForNewPool = "_vote_no"
61+
62+let keyYesVotingForNewPool = "_vote_yes"
63+
64+let keyAmountOfVotingForNewPool = "max_amount_voting"
65+
66+let keyStatusOfVotingForNewPool = "_status"
67+
68+let keyHeightOfPoolVotingForNewPool = "_finish_height"
69+
70+let activeVoteFirst = "voting_active_cell_1"
71+
72+let activeVoteSecond = "voting_active_cell_2"
73+
74+let activeVoteThird = "voting_active_cell_3"
75+
76+let keyTempCurSum = "sum_reward_current"
77+
78+let isActive = valueOrElse(getBoolean(this, keyActive), true)
79+
80+let farmingSWOPAddress = Address(base58'3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw')
81+
82+let votingLiteContract = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
83+
84+let votingForNewPool = Address(base58'3PHgHf5C4WvHJucSHrjoVnMFsP1EhWffVLt')
85+
86+let keySWOPid = "SWOP_id"
87+
88+let SWOP = fromBase58String("Ccgesc9iWMSg1f8CqFP5nZwgF6xsGirReDhpvNp1JAWW")
89+
90+let scaleValue = 100000000
91+
92+let totalVoteShare = 10000000000
93+
94+let kStartHeight = "start_height"
95+
96+let kBasePeriod = "base_period"
97+
98+let kPeriodLength = "period_length"
99+
100+let kUserTotalStruc = "_user_total_struc"
101+
102+let basePeriod = valueOrErrorMessage(getInteger(votingLiteContract, kBasePeriod), "Empty kBasePeriod at voting contract")
103+
104+let startHeight = valueOrErrorMessage(getInteger(votingLiteContract, kStartHeight), "Empty kStartHeight at voting contract")
105+
106+let periodLength = valueOrErrorMessage(getInteger(votingLiteContract, kPeriodLength), "Empty kPeriodLength at voting contract")
107+
108+let firstActiveVote = valueOrElse(getString(votingForNewPool, activeVoteFirst), "")
109+
110+let secondActiveVote = valueOrElse(getString(votingForNewPool, activeVoteSecond), "")
111+
112+let thirdActiveVote = valueOrElse(getString(votingForNewPool, activeVoteThird), "")
113+
114+let currVotingPeriod = (basePeriod + ((height - startHeight) / periodLength))
115+
116+func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
117+
118+
119+func throwNotEnoughSWOP () = throw("Not enough SWOP: userSWOPLocked - userTotalVoteAmount < voteSWOPAmount")
120+
121+
122+func getLastInterestInfo () = {
123+ let lastInterest = valueOrElse(getInteger(this, keyLastInterest), 0)
124+ lastInterest
125+ }
126+
127+
128+func getUserSWOPLocked (user) = valueOrElse(getInteger(this, (toString(user) + keyUserSWOPLocked)), 0)
129+
130+
131+func getUserSWOPClaimedAmount (user) = valueOrElse(getInteger(this, (toString(user) + keyUserSWOPClaimedAmount)), 0)
132+
133+
134+func getUserTotalVoteAmount (user) = valueOrElse(getInteger(votingLiteContract, (toString(user) + kUserTotalVoteSWOP)), 0)
135+
136+
137+func getUserInterestInfo (user,lastInterest) = {
138+ let userSWOPAmount = getUserSWOPLocked(user)
139+ let userLastInterest = getInteger(this, (toString(user) + keyUserLastInterest))
140+ let userLastInterestValue = match userLastInterest {
141+ case userLastInterest: Int =>
142+ userLastInterest
143+ case _ =>
144+ lastInterest
145+ }
146+ $Tuple2(userLastInterestValue, userSWOPAmount)
147+ }
148+
149+
150+func getUserTotalVoteAmountForOnePool (pool,user) = {
151+ let voting = valueOrElse(getInteger(votingForNewPool, pool), -1)
152+ let heightOfVoting = valueOrElse(getInteger(votingForNewPool, (toString(voting) + keyHeightOfPoolVotingForNewPool)), 0)
153+ let statusOfVoting = valueOrElse(getBoolean(votingForNewPool, (toString(voting) + keyStatusOfVotingForNewPool)), true)
154+ let currentHeight = height
155+ if ((0 > voting))
156+ then 0
157+ else if (!(statusOfVoting))
158+ then 0
159+ else if ((heightOfVoting > currentHeight))
160+ then (valueOrElse(getInteger(votingForNewPool, (((toString(user) + "_") + toString(voting)) + keyYesVotingForNewPool)), 0) + valueOrElse(getInteger(votingForNewPool, (((toString(user) + "_") + toString(voting)) + keyNoVotingForNewPool)), 0))
161+ else 0
162+ }
163+
164+
165+func getUserTotalVoteForNewPoolAmount (user) = {
166+ let listOfVoting = [getUserTotalVoteAmountForOnePool(firstActiveVote, user), getUserTotalVoteAmountForOnePool(secondActiveVote, user), getUserTotalVoteAmountForOnePool(thirdActiveVote, user)]
167+ max(listOfVoting)
168+ }
169+
170+
171+func getTotalSWOPLocked () = valueOrElse(getInteger(this, keyTotalSWOPLocked), 0)
172+
173+
174+func getUserVoteInfo (user) = {
175+ let $t059936544 = if (isDefined(getString(votingLiteContract, (toString(user) + kUserTotalStruc))))
176+ then {
177+ let data = split(valueOrErrorMessage(getString(votingLiteContract, (toString(user) + kUserTotalStruc)), "Empty kUserTotalStruc"), "_")
178+ $Tuple3(parseIntValue(data[0]), parseIntValue(data[1]), parseIntValue(data[2]))
179+ }
180+ else {
181+ let uPoolTotalSWOP = valueOrElse(getInteger(votingLiteContract, (toString(user) + kUserTotalVoteSWOP)), 0)
182+ $Tuple3(uPoolTotalSWOP, 0, currVotingPeriod)
183+ }
184+ let userTotalVoteSWOP = $t059936544._1
185+ let userUnvoted = $t059936544._2
186+ let userUnvotedPeriod = $t059936544._3
187+ let userUnvotedActual = if ((userUnvotedPeriod == currVotingPeriod))
188+ then userUnvoted
189+ else 0
190+ $Tuple2(userTotalVoteSWOP, userUnvotedActual)
191+ }
192+
193+
194+func getUserVoteOptionAmount (user) = valueOrElse(getInteger(this, (toString(user) + keyUserVoteOptionAmount)), 0)
195+
196+
197+func getVotingStartHeight (voteName) = valueOrElse(getInteger(this, (voteName + keyVotingStartHeight)), 0)
198+
199+
200+func getPoolUpdateHeight (pool) = valueOrElse(getInteger(this, (pool + keyHeightPoolFraction)), 0)
201+
202+
203+func isDefinePoolUpdateHeight (pool) = isDefined(getInteger(this, (pool + keyHeightPoolFraction)))
204+
205+
206+func getCurPoolWeight (pool) = valueOrElse(getInteger(this, (pool + keyRewardPoolFractionCurrent)), 0)
207+
208+
209+func getPrevPoolWeight (pool) = valueOrElse(getInteger(this, (pool + keyRewardPoolFractionPrevious)), 0)
210+
211+
212+func getVoteOptionAmount (user,voteName,option) = {
213+ let userVoteOptionAmount = getInteger(this, (((voteName + option) + toString(user)) + keyUserVoteOptionAmount))
214+ let uvoa = match userVoteOptionAmount {
215+ case uvoa: Int =>
216+ uvoa
217+ case uvoa: Unit =>
218+ 0
219+ case _ =>
220+ throw("Match error")
221+ }
222+ valueOrErrorMessage(uvoa, (((("No data on the key: " + voteName) + option) + toString(user)) + keyUserVoteOptionAmount))
223+ }
224+
225+
226+func getVoteDuration (voteName) = valueOrErrorMessage(getInteger(this, (voteName + keyVoteDuration)), (("No data on the key: " + voteName) + keyVoteDuration))
227+
228+
229+func getTotalVoteOptionAmount (voteName,option) = {
230+ let totalVoteOptionAmount = getInteger(this, ((voteName + option) + keyTotalVoteOptionAmount))
231+ let tvoa = match totalVoteOptionAmount {
232+ case tvoa: Int =>
233+ tvoa
234+ case tvoa: Unit =>
235+ 0
236+ case _ =>
237+ throw("Match error")
238+ }
239+ tvoa
240+ }
241+
242+
243+func getUserGetBackAmount (voteName,option,user,getBackSWOPHeight) = {
244+ let key = ((((((voteName + "_") + option) + "_") + toString(user)) + "_") + toString(getBackSWOPHeight))
245+ valueOrErrorMessage(getInteger(this, key), ("No data on the key: " + key))
246+ }
247+
248+
249+func claimCalc (caller) = {
250+ let lastInterest = getLastInterestInfo()
251+ let $t089489028 = getUserInterestInfo(caller, lastInterest)
252+ let userLastInterest = $t089489028._1
253+ let userSWOPLocked = $t089489028._2
254+ let claimAmount = fraction(userSWOPLocked, (lastInterest - userLastInterest), scaleValue)
255+ let userNewInterest = lastInterest
256+ $Tuple2(userNewInterest, claimAmount)
257+ }
258+
259+
260+@Callable(i)
261+func airDrop () = if (!(isActive))
262+ then throw("DApp is inactive at this moment")
263+ else {
264+ let $t092939368 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
265+ let pmtAmount = $t092939368._1
266+ let pmtAssetId = $t092939368._2
267+ if ((pmtAssetId != SWOP))
268+ then throw("Incorrect pmtAssetId")
269+ else {
270+ let totalSWOPLocked = getTotalSWOPLocked()
271+ let lastInterest = getLastInterestInfo()
272+ let interestNew = (lastInterest + fraction(pmtAmount, scaleValue, totalSWOPLocked))
273+[IntegerEntry(keyLastInterest, interestNew)]
274+ }
275+ }
276+
277+
278+
279+@Callable(i)
280+func lockSWOP () = if (!(isActive))
281+ then throw("DApp is inactive at this moment")
282+ else {
283+ let $t098069881 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
284+ let pmtAmount = $t098069881._1
285+ let pmtAssetId = $t098069881._2
286+ if ((pmtAssetId != SWOP))
287+ then throw("Incorrect pmtAssetId")
288+ else {
289+ let lastInterest = getLastInterestInfo()
290+ let $t0999710079 = getUserInterestInfo(i.caller, lastInterest)
291+ let userLastInterest = $t0999710079._1
292+ let userSWOPLocked = $t0999710079._2
293+ let claimAmount = fraction(userSWOPLocked, (lastInterest - userLastInterest), scaleValue)
294+ let userSWOPLockedNew = ((userSWOPLocked + pmtAmount) + claimAmount)
295+ let userNewInterest = lastInterest
296+ let totalSWOPLocked = getTotalSWOPLocked()
297+ let totalSWOPLockedNew = ((totalSWOPLocked + pmtAmount) + claimAmount)
298+ let userClaimedAmount = getUserSWOPClaimedAmount(i.caller)
299+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
300+[IntegerEntry((toString(i.caller) + keyUserLastInterest), userNewInterest), IntegerEntry((toString(i.caller) + keyUserSWOPLocked), userSWOPLockedNew), IntegerEntry(keyTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry((toString(i.caller) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserSWOPLastClaimedAmount), claimAmount)]
301+ }
302+ }
303+
304+
305+
306+@Callable(i)
307+func withdrawSWOP (withdrawAmount) = if (!(isActive))
308+ then throw("DApp is inactive at this moment")
309+ else if ((0 >= withdrawAmount))
310+ then throw("withdrawAmount <= 0")
311+ else {
312+ let totalSWOPLocked = getTotalSWOPLocked()
313+ let userSWOPLocked = getUserSWOPLocked(i.caller)
314+ let $t01122911284 = claimCalc(i.caller)
315+ let userNewInterest = $t01122911284._1
316+ let claimAmount = $t01122911284._2
317+ let $t01128911378 = $Tuple2(0, 0)
318+ let userVoteAmount = $t01128911378._1
319+ let userUnvoteAmount = $t01128911378._2
320+ let userVoteAmountForNewPool = getUserTotalVoteForNewPoolAmount(i.caller)
321+ if (if (if ((0 > userUnvoteAmount))
322+ then true
323+ else (0 > userVoteAmount))
324+ then true
325+ else (0 > userVoteAmountForNewPool))
326+ then throw("userUnvoteAmount < 0 || userVoteAmount < 0 || userVoteAmountForNewPool < 0")
327+ else {
328+ let availableToUnstake = (userSWOPLocked - max([userVoteAmountForNewPool, (userVoteAmount + userUnvoteAmount)]))
329+ if ((withdrawAmount > availableToUnstake))
330+ then throw("withdrawAmount > availableToUnstake")
331+ else {
332+ let totalSWOPLockedNew = ((totalSWOPLocked + claimAmount) - withdrawAmount)
333+ let userSWOPamountNew = ((userSWOPLocked + claimAmount) - withdrawAmount)
334+ let userClaimedAmount = getUserSWOPClaimedAmount(i.caller)
335+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
336+[IntegerEntry((toString(i.caller) + keyUserLastInterest), userNewInterest), IntegerEntry((toString(i.caller) + keyUserSWOPLocked), userSWOPamountNew), IntegerEntry(keyTotalSWOPLocked, totalSWOPLockedNew), ScriptTransfer(i.caller, withdrawAmount, SWOP), IntegerEntry((toString(i.caller) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserSWOPLastClaimedAmount), claimAmount)]
337+ }
338+ }
339+ }
340+
341+
342+
343+@Callable(i)
344+func claimAndWithdrawSWOP () = if (!(isActive))
345+ then throw("DApp is inactive at this moment")
346+ else {
347+ let lastInterest = getLastInterestInfo()
348+ let $t01275812813 = claimCalc(i.caller)
349+ let userNewInterest = $t01275812813._1
350+ let claimAmount = $t01275812813._2
351+ let userClaimedAmount = getUserSWOPClaimedAmount(i.caller)
352+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
353+ if ((claimAmount == 0))
354+ then throw("You have 0 available SWOP")
355+ else [IntegerEntry((toString(i.caller) + keyUserLastInterest), userNewInterest), IntegerEntry((toString(i.caller) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, claimAmount, SWOP)]
356+ }
357+
358+
359+
360+@Callable(i)
361+func claimAndStakeSWOP () = if (!(isActive))
362+ then throw("DApp is inactive at this moment")
363+ else {
364+ let totalSWOPLocked = getTotalSWOPLocked()
365+ let userSWOPLocked = getUserSWOPLocked(i.caller)
366+ let lastInterest = getLastInterestInfo()
367+ let $t01359213647 = claimCalc(i.caller)
368+ let userNewInterest = $t01359213647._1
369+ let claimAmount = $t01359213647._2
370+ let userSWOPLockedNew = (userSWOPLocked + claimAmount)
371+ let totalSWOPLockedNew = (totalSWOPLocked + claimAmount)
372+ let userClaimedAmount = getUserSWOPClaimedAmount(i.caller)
373+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
374+ if ((claimAmount == 0))
375+ then throw("You have 0 available SWOP")
376+ else [IntegerEntry((toString(i.caller) + keyUserLastInterest), userNewInterest), IntegerEntry(keyTotalSWOPLocked, totalSWOPLockedNew), IntegerEntry((toString(i.caller) + keyUserSWOPLocked), userSWOPLockedNew), IntegerEntry((toString(i.caller) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserSWOPLastClaimedAmount), claimAmount)]
377+ }
378+
379+
380+
381+@Callable(i)
382+func updateWeights (currentPools,currentRewards,rewardUpdateHeight,pagination) = if (!(isActive))
383+ then throw("DApp is inactive at this moment")
384+ else {
385+ let amountPools = 10
386+ let totalRewardUpdateHeight = valueOrElse(getInteger(this, keyRewardUpdateHeight), 0)
387+ if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop, adminPubKeyWallet], i.callerPublicKey)))
388+ then throw("Only admin can call this function")
389+ else if ((size(currentPools) > amountPools))
390+ then throw(("Max amount of pool is " + toString(amountPools)))
391+ else if ((totalRewardUpdateHeight >= rewardUpdateHeight))
392+ then throw("rewardUpdateHeight <= totalRewardUpdateHeight")
393+ else if ((height >= rewardUpdateHeight))
394+ then throw("height >= rewardUpdateHeight")
395+ else if ((0 >= rewardUpdateHeight))
396+ then throw("0 >= rewardUpdateHeight ")
397+ else {
398+ func sum (a,b) = (a + b)
399+
400+ func changePreviousRewardEntry (accumulated,pool) = {
401+ let poolRewardUpdateHeight = getPoolUpdateHeight(pool)
402+ if (if (!(isDefinePoolUpdateHeight(pool)))
403+ then true
404+ else if ((rewardUpdateHeight != poolRewardUpdateHeight))
405+ then (poolRewardUpdateHeight == totalRewardUpdateHeight)
406+ else false)
407+ then {
408+ let poolReward = getCurPoolWeight(pool)
409+IntegerEntry((pool + keyRewardPoolFractionPrevious), poolReward) :: accumulated
410+ }
411+ else {
412+ let poolReward = getPrevPoolWeight(pool)
413+IntegerEntry((pool + keyRewardPoolFractionPrevious), poolReward) :: accumulated
414+ }
415+ }
416+
417+ func changeCurrentRewardEntry (accumulated,pool) = {
418+ let poolIndex = value(indexOf(currentPools, pool))
419+ let poolReward = currentRewards[poolIndex]
420+ if ((0 > poolReward))
421+ then throw("PoolReward < 0")
422+ else IntegerEntry((pool + keyRewardPoolFractionCurrent), poolReward) :: accumulated
423+ }
424+
425+ func changeHeightEntry (accumulated,pool) = {
426+ let poolHeight = rewardUpdateHeight
427+IntegerEntry((pool + keyHeightPoolFraction), poolHeight) :: accumulated
428+ }
429+
430+ func getSumReward (curTempSum,pagination) = if ((pagination == 0))
431+ then if ((curTempSum > totalVoteShare))
432+ then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(pagination)) + " ") + toString(curTempSum)))
433+ else $Tuple2([IntegerEntry(keyTempCurSum, curTempSum)], [IntegerEntry(keyRewardUpdateFirstPaginationHeight, rewardUpdateHeight)])
434+ else if ((pagination == 1))
435+ then {
436+ let curTempSumFromKey = valueOrElse(getInteger(this, keyTempCurSum), 0)
437+ let rewardUpdateHeightFirstPaginationEntry = valueOrElse(getInteger(this, keyRewardUpdateFirstPaginationHeight), 0)
438+ if (((curTempSum + curTempSumFromKey) > totalVoteShare))
439+ then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(pagination)) + " ") + toString((curTempSum + curTempSumFromKey))))
440+ else if ((rewardUpdateHeightFirstPaginationEntry != rewardUpdateHeight))
441+ then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
442+ else $Tuple2([IntegerEntry(keyTempCurSum, (curTempSum + curTempSumFromKey))], nil)
443+ }
444+ else if ((pagination == 2))
445+ then {
446+ let curSum = (valueOrElse(getInteger(this, keyTempCurSum), 0) + curTempSum)
447+ let rewardUpdateHeightFirstPaginationEntry = valueOrElse(getInteger(this, keyRewardUpdateFirstPaginationHeight), 0)
448+ if ((curSum != totalVoteShare))
449+ then throw("sumRewardPrevious != totalVoteShare or sumRewardCurrent != totalVoteShare")
450+ else if ((rewardUpdateHeightFirstPaginationEntry != rewardUpdateHeight))
451+ then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
452+ else $Tuple2([IntegerEntry(keyTempCurSum, curSum)], nil)
453+ }
454+ else throw("Incorrect pagination")
455+
456+ let previousRewardEntryNew = {
457+ let $l = currentPools
458+ let $s = size($l)
459+ let $acc0 = nil
460+ func 1 ($a,$i) = if (($i >= $s))
461+ then $a
462+ else changePreviousRewardEntry($a, $l[$i])
463+
464+ func 2 ($a,$i) = if (($i >= $s))
465+ then $a
466+ else throw("List size exceeds 10")
467+
468+ 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
469+ }
470+ let currentRewardEntryNew = {
471+ let $l = currentPools
472+ let $s = size($l)
473+ let $acc0 = nil
474+ func 1 ($a,$i) = if (($i >= $s))
475+ then $a
476+ else changeCurrentRewardEntry($a, $l[$i])
477+
478+ func 2 ($a,$i) = if (($i >= $s))
479+ then $a
480+ else throw("List size exceeds 10")
481+
482+ 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
483+ }
484+ let heightEntryNewCur = {
485+ let $l = currentPools
486+ let $s = size($l)
487+ let $acc0 = nil
488+ func 1 ($a,$i) = if (($i >= $s))
489+ then $a
490+ else changeHeightEntry($a, $l[$i])
491+
492+ func 2 ($a,$i) = if (($i >= $s))
493+ then $a
494+ else throw("List size exceeds 10")
495+
496+ 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
497+ }
498+ let sumRewardCurrentTemp = {
499+ let $l = currentRewards
500+ let $s = size($l)
501+ let $acc0 = 0
502+ func 1 ($a,$i) = if (($i >= $s))
503+ then $a
504+ else sum($a, $l[$i])
505+
506+ func 2 ($a,$i) = if (($i >= $s))
507+ then $a
508+ else throw("List size exceeds 10")
509+
510+ 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
511+ }
512+ let $t01879118902 = getSumReward(sumRewardCurrentTemp, pagination)
513+ let sumRewardCurrent = $t01879118902._1
514+ let rewardUpdateHeightFirstPaginationEntry = $t01879118902._2
515+ let rewardUpdateHeightEntry = if ((pagination == 2))
516+ then [IntegerEntry(keyRewardUpdateHeight, rewardUpdateHeight)]
517+ else nil
518+ if ((height > rewardUpdateHeight))
519+ then throw("rewardUpdateHeight < height")
520+ else (((((previousRewardEntryNew ++ currentRewardEntryNew) ++ heightEntryNewCur) ++ sumRewardCurrent) ++ rewardUpdateHeightEntry) ++ rewardUpdateHeightFirstPaginationEntry)
521+ }
522+ }
523+
524+
525+
526+@Callable(i)
527+func shutdown () = if (!(isActive))
528+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
529+ else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
530+ then throw("Only admin can call this function")
531+ else suspend("Paused by admin")
532+
533+
534+
535+@Callable(i)
536+func activate () = if (isActive)
537+ then throw("DApp is already active")
538+ else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
539+ then throw("Only admin can call this function")
540+ else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
541+
542+

github/deemru/w8io/026f985 
28.19 ms