tx · D9T5bzoNoAg6zHGT1cwFwxYtxZVHxrz9axw7Kiv4U88u

3Mzgi6deFV8CyF2nqbWSBkqba5JaD42EXyb:  -0.01400000 Waves

2021.09.16 14:58 [1705573] smart account 3Mzgi6deFV8CyF2nqbWSBkqba5JaD42EXyb > SELF 0.00000000 Waves

{ "type": 13, "id": "D9T5bzoNoAg6zHGT1cwFwxYtxZVHxrz9axw7Kiv4U88u", "fee": 1400000, "feeAssetId": null, "timestamp": 1631793495722, "version": 2, "chainId": 84, "sender": "3Mzgi6deFV8CyF2nqbWSBkqba5JaD42EXyb", "senderPublicKey": "61fhePmC5L8iWserAMXoPAZbv24cAo6eyvnyYpoLpZJy", "proofs": [ "5tnQvwt75MjLfyzmfVJBz2kNA3RMdJKVYgje83ToBREYYeFe7GbASy2fXTTTfseR82zELZgDuUL1qQzGAj7CoReg", "3TYJNTZT62Qbouv3cyXv5BMZZ9RYvrgsk5RbKLmWA8LjUg1uemgvdCiLkcNtaVDnLi8uuLASgYvJ6uETyincVNhG" ], "script": "base64:AAIEAAAAAAAACTsIAhIAEgMKAQgSBQoDAQQBEgQKAgEIEgASABoNCgJhMRIHdmVyc2lvbhoQCgJhMhIKa2V5VmVyc2lvbhoPCgJhMxIJa2V5QWN0aXZlGhcKAmE0EhFrZXlOdW1iZXJPZlZvdGluZxoVCgJhNRIPa2V5SGVpZ2h0T2ZQb29sGgsKAmE2EgVrZXlObxoMCgJhNxIGa2V5WWVzGg8KAmE4EglrZXlOb1VzZXIaEAoCYTkSCmtleVllc1VzZXIaFwoCYjESEWtleVN0YXR1c09mVm90aW5nGhcKAmIyEhFrZXlBbW91bnRPZlZvdGluZxoaCgJiMxIUa2V5TWF4QW1vdW50T2ZWb3RpbmcaFwoCYjQSEWtleU1heERheU9mVm90aW5nGhMKAmI1Eg1rZXlDb21taXNzaW9uGiEKAmI2EhtrZXlDb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIaDgoCYjcSCGtleUNhdXNlGhQKAmI4Eg5rZXlDYW5jZWxDYXVzZRoUCgJiORIOa1VzZXJUb3RhbFNXT1AaCwoCYzESBWtOYW1lGg4KAmMyEgh2b3RpbmdJZBoUCgJjMxIOcGVyaW9kT2ZWb3RpbmcaFQoCYzQSD2FjdGl2ZVZvdGVGaXJzdBoWCgJjNRIQYWN0aXZlVm90ZVNlY29uZBoVCgJjNhIPYWN0aXZlVm90ZVRoaXJkGg0KAmM3EgdrZXlQYWlyGhgKAmM4EhJrZXlPcmFjbGVQb29sSW5kZXgaFgoCYzkSEGtleVBvb2xJbkZhcm1pbmcaFQoCZDESD2tleUFkbWluUHViS2V5MRoVCgJkMhIPa2V5QWRtaW5QdWJLZXkyGhUKAmQzEg9rZXlBZG1pblB1YktleTMaDAoCZDQSBm9yYWNsZRoRCgJkNRILZ2V0QWRtaW5QdWIaEQoCZDYSC2tleUFkbWluUHViGg0KAmQ3EgckbWF0Y2gwGgwKAmQ4EgZzdHJpbmcaDQoCZDkSB25vdGhpbmcaEgoCZTESDGFkbWluUHViS2V5MRoSCgJlMhIMYWRtaW5QdWJLZXkyGhIKAmUzEgxhZG1pblB1YktleTMaGgoCZTQSFGFkbWluUHViS2V5U3RhcnRTdG9wGhMKAmU1Eg13YWxsZXRBZGRyZXNzGg0KAmU2Egdnb3ZBZGRyGhQKAmU3Eg5mYXJtaW5nQWRkcmVzcxoKCgJlOBIEVVNEThoKCgJlORIEU1dPUBoOCgJmMRIIaXNBY3RpdmUaFAoCZjISDm51bWJlck9mVm90aW5nGhQKAmYzEg5hbW91bnRPZlZvdGluZxoVCgJmNBIPZmlyc3RBY3RpdmVWb3RlGhYKAmY1EhBzZWNvbmRBY3RpdmVWb3RlGhUKAmY2Eg90aGlyZEFjdGl2ZVZvdGUaJwoCZjcSIWNvbWlzc2lvbkZvckluaXRhbGl6YXRpb25PZlZvdGluZxoRCgJmOBILc2NhbGVWYWx1ZTMaEQoCZjkSC3NjYWxlVmFsdWU4GiAKAmcxEhpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlchoXCgJnMhIRc2NhbGVWYWx1ZThEaWdpdHMaFwoCZzMSEW1heEFtb3VudE9mVm90aW5nGhQKAmc0Eg5tYXhEYXlPZlZvdGluZxoYCgJnNRISdm90aW5nUGVyaW9kTGVuZ3RoGhIKAmc2EgxnZXRBc3NldEluZm8aDQoCZzcSB2Fzc2V0SWQaCAoCZzgSAmlkGg4KAmc5EghzdHJpbmdJZBoKCgJoMRIEaW5mbxoLCgJoMhIFd2F2ZXMaGAoCaDMSEmlzQWN0aXZlUG9vbEV4aXN0cxoLCgJoNBIFcG9vbHMaDQoCaDUSB2FkZHJlc3MaDwoCaDYSCXBvb2xzRGF0YRoSCgJoNxIMaXNQb29sRGVmaW5lGgwKAmg4EgZ2b3RpbmcaDgoCaDkSCG5ld1Bvb2xzGhUKAmkxEg9pc05ld1Bvb2xEZWZpbmUaFAoCaTISDmhlaWdodE9mVm90aW5nGhQKAmkzEg5zdGF0dXNPZlZvdGluZxoaCgJpNBIUaXNVbmFjdGl2ZVBvb2xFeGlzdHMaEAoCaTUSCnBvb2xzU3RhdGUaHAoCaTYSFmlzTGFzdEFjdGl2ZVBvb2xFeGlzdHMaEwoCaTcSDWdldEFjdGl2ZVBvb2waEwoCaTgSDWN1cnJlbnRIZWlnaHQaHwoCaTkSGWdldEFjdGl2ZVZvdGluZ1Bvb2xBbW91bnQaGwoCajESFWdldFVuYWN0aXZlVm90aW5nUG9vbBocCgJqMhIWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZxoOCgJqMxIIYXNzZXRTdHIaGgoCajQSFGlzQ2FsbGVySW5Hb3Zlcm5hbmNlGgoKAmo1EgR1c2VyGg0KAmo2EgdzdXNwZW5kGgsKAmo3EgVjYXVzZRonCgJqOBIhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlGgwKAmo5EgZhbW91bnQaDwoCazESCWFzc2V0TmFtZRoHCgJrMhIBaRoYCgJrMxISaW5pdE51bWJlck9mVm90aW5nGhgKAms0EhJpbml0QW1vdW50T2ZWb3RpbmcaEwoCazUSDWluaXRLZXlBY3RpdmUaEAoCazYSCmFjdGl2ZUluaXQaEQoCazcSCyR0MDcyMjk3MzA0Gg8KAms4EglwbXRBbW91bnQaEAoCazkSCnBtdEFzc2V0SWQaEgoCbDESDHVuYWN0aXZlVm90ZRoXCgJsMhIRbmV3TnVtYmVyT2ZWb3RpbmcaEgoCbDMSDGlzUG9vbEV4aXN0cxoNCgJsNBIHeWVzT3JObxoNCgJsNRIHdm90ZUFtdBoUCgJsNhIOcG9vbEluaXRIZWlnaHQaGgoCbDcSFHVzZXJTV09QaW5Hb3Zlcm5hbmNlGhMKAmw4Eg10b3RhbFZvdGVVc2VyGhEKAmw5EgtvbGRWb3RlVXNlchoNCgJtMRIHbmV3Vm90ZRoICgJtMhICdHgaDAoCbTMSBnZlcmlmeRoYCgJtNBISYWRtaW5QdWJLZXkxU2lnbmVkGhgKAm01EhJhZG1pblB1YktleTJTaWduZWQaGAoCbTYSEmFkbWluUHViS2V5M1NpZ25lZAAAAEIAAAAAAmExAgAAAAUxLjAuMAAAAAACYTICAAAAB3ZlcnNpb24AAAAAAmEzAgAAAAZhY3RpdmUAAAAAAmE0AgAAABR2b3RpbmdfYWN0aXZlX251bWJlcgAAAAACYTUCAAAADl9maW5pc2hfaGVpZ2h0AAAAAAJhNgIAAAAPX3RvdGFsX3ZvdGVzX25vAAAAAAJhNwIAAAAQX3RvdGFsX3ZvdGVzX3llcwAAAAACYTgCAAAACF92b3RlX25vAAAAAAJhOQIAAAAJX3ZvdGVfeWVzAAAAAAJiMQIAAAAHX3N0YXR1cwAAAAACYjICAAAADnZvdGluZ19pZF9sYXN0AAAAAAJiMwIAAAARbWF4X2Ftb3VudF92b3RpbmcAAAAAAmI0AgAAAA5tYXhfZGF5X3ZvdGluZwAAAAACYjUCAAAACmNv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", "height": 1705573, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FfpjzCxJ8FVt3hhk7QgHrPDb74mDc56kNr4FnF5qcGpQ Next: 33uXFZ8zGM7rCtMiwjUDvFfCmEQNcRmXi6aLrRCwcZ2v Diff:
OldNewDifferences
5151
5252 let keyPair = "pair_"
5353
54+let keyOraclePoolIndex = "index_"
55+
56+let keyPoolInFarming = "_current_reward"
57+
5458 let keyAdminPubKey1 = "admin_pub_1"
5559
5660 let keyAdminPubKey2 = "admin_pub_2"
7882 let walletAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7983
8084 let govAddr = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
85+
86+let farmingAddress = Address(base58'3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT')
8187
8288 let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8389
127133 }
128134
129135
130-func isActivePoolExists (pools,assetA,assetB) = {
136+func isActivePoolExists (pools,address) = {
131137 let poolsData = split(pools, "_")
132138 let isPoolDefine = isDefined(getInteger(this, pools))
133139 if (if (isPoolDefine)
134140 then (pools != "")
135141 else false)
136142 then {
137- let voting = poolsData[2]
138- let newPools = (((((assetA + "_") + assetB) + "_") + voting) + votingId)
143+ let voting = poolsData[1]
144+ let newPools = (((address + "_") + voting) + votingId)
139145 let isNewPoolDefine = isDefined(getInteger(this, newPools))
140146 let heightOfVoting = valueOrElse(getInteger(this, (voting + keyHeightOfPool)), 0)
141147 let statusOfVoting = valueOrElse(getBoolean(this, (voting + keyStatusOfVoting)), true)
172178 }
173179
174180
175-func isLastActivePoolExists (assetA,assetB) = if (if (isActivePoolExists(firstActiveVote, assetA, assetB))
181+func isLastActivePoolExists (address) = if (if (isActivePoolExists(firstActiveVote, address))
176182 then true
177- else isActivePoolExists(secondActiveVote, assetA, assetB))
183+ else isActivePoolExists(secondActiveVote, address))
178184 then true
179- else isActivePoolExists(thirdActiveVote, assetA, assetB)
185+ else isActivePoolExists(thirdActiveVote, address)
180186
181187
182188 func getActivePool (voting) = {
237243
238244
239245 @Callable(i)
240-func initVotingForNewPool (assetA,assetB) = {
241- let $t071817256 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
242- let pmtAmount = $t071817256._1
243- let pmtAssetId = $t071817256._2
244- let $t072617360 = $Tuple2(getAssetInfoFromString(assetA), getAssetInfoFromString(assetB))
245- let poolAssetIdA = $t072617360._1
246- let poolAssetIdB = $t072617360._2
246+func initVotingForNewPool (address) = {
247+ let $t072297304 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
248+ let pmtAmount = $t072297304._1
249+ let pmtAssetId = $t072297304._2
247250 let unactiveVote = getUnactiveVotingPool()
248251 let newNumberOfVoting = getActiveVotingPoolAmount()
249- let isPoolExists = isLastActivePoolExists(assetA, assetB)
250- let $t075307608 = getAssetInfo(poolAssetIdA)
251- let pmtStrAssetIdA = $t075307608._1
252- let pmtAssetNameA = $t075307608._2
253- let pmtDecimalsA = $t075307608._3
254- let $t076137691 = getAssetInfo(poolAssetIdB)
255- let pmtStrAssetIdB = $t076137691._1
256- let pmtAssetNameB = $t076137691._2
257- let pmtDecimalsB = $t076137691._3
252+ let isPoolExists = isLastActivePoolExists(address)
258253 if (!(isActive))
259254 then throw("DApp is inactive at this moment")
260- else if (isDefined(getString(oracle, (((keyPair + assetA) + "_") + assetB))))
261- then throw("Assets must be from oracle")
262- else if ((poolAssetIdA == poolAssetIdB))
263- then throw("Assets must be different")
255+ else if (!(isDefined(getInteger(oracle, (keyOraclePoolIndex + address)))))
256+ then throw("Pool must be in oracle")
257+ else if (isDefined(getString(farmingAddress, (address + keyPoolInFarming))))
258+ then throw("Pool already in farming")
264259 else if (isPoolExists)
265260 then throw("This pool already exists")
266261 else if (if (((newNumberOfVoting + 1) > maxAmountOfVoting))
271266 then throw("One attached asset expected")
272267 else if ((pmtAssetId != SWOP))
273268 then throw("You must use a SWOP token")
274- else if (if ((assetA == ""))
275- then true
276- else (assetB == ""))
277- then throw("Assets can't be empty")
278- else if ((pmtAmount != comissionForInitalizationOfVoting))
279- then throw("You need to attach 10 SWOP tokens")
280- else if (!(if (if ((poolAssetIdB == USDN))
281- then true
282- else (poolAssetIdB == unit))
283- then true
284- else (poolAssetIdB == SWOP)))
285- then throw("assetB must be USDN, WAVES or SWOP")
286- else [IntegerEntry((((((assetA + "_") + assetB) + "_") + toString(amountOfVoting)) + votingId), amountOfVoting), IntegerEntry((toString(amountOfVoting) + keyHeightOfPool), (height + votingPeriodLength)), BooleanEntry((toString(amountOfVoting) + keyStatusOfVoting), true), IntegerEntry(keyAmountOfVoting, (amountOfVoting + 1)), IntegerEntry(keyNumberOfVoting, (newNumberOfVoting + 1)), StringEntry((assetA + kName), pmtAssetNameA), StringEntry((assetB + kName), pmtAssetNameB), StringEntry(unactiveVote, (((((assetA + "_") + assetB) + "_") + toString(amountOfVoting)) + votingId)), ScriptTransfer(walletAddress, pmtAmount, pmtAssetId)]
269+ else if ((pmtAmount != comissionForInitalizationOfVoting))
270+ then throw("You need to attach 10 SWOP tokens")
271+ else [IntegerEntry(((address + toString(amountOfVoting)) + votingId), amountOfVoting), IntegerEntry((toString(amountOfVoting) + keyHeightOfPool), (height + votingPeriodLength)), BooleanEntry((toString(amountOfVoting) + keyStatusOfVoting), true), IntegerEntry(keyAmountOfVoting, (amountOfVoting + 1)), IntegerEntry(keyNumberOfVoting, (newNumberOfVoting + 1)), StringEntry(unactiveVote, ((address + toString(amountOfVoting)) + votingId)), ScriptTransfer(walletAddress, pmtAmount, pmtAssetId)]
287272 }
288273
289274
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = "1.0.0"
55
66 let keyVersion = "version"
77
88 let keyActive = "active"
99
1010 let keyNumberOfVoting = "voting_active_number"
1111
1212 let keyHeightOfPool = "_finish_height"
1313
1414 let keyNo = "_total_votes_no"
1515
1616 let keyYes = "_total_votes_yes"
1717
1818 let keyNoUser = "_vote_no"
1919
2020 let keyYesUser = "_vote_yes"
2121
2222 let keyStatusOfVoting = "_status"
2323
2424 let keyAmountOfVoting = "voting_id_last"
2525
2626 let keyMaxAmountOfVoting = "max_amount_voting"
2727
2828 let keyMaxDayOfVoting = "max_day_voting"
2929
3030 let keyCommission = "commission"
3131
3232 let keyCommissionScaleDelimiter = "commission_scale_delimiter"
3333
3434 let keyCause = "shutdown_cause"
3535
3636 let keyCancelCause = "_cancel_cause"
3737
3838 let kUserTotalSWOP = "_SWOP_amount"
3939
4040 let kName = "_asset_name"
4141
4242 let votingId = "_voting"
4343
4444 let periodOfVoting = "period_voting"
4545
4646 let activeVoteFirst = "voting_active_cell_1"
4747
4848 let activeVoteSecond = "voting_active_cell_2"
4949
5050 let activeVoteThird = "voting_active_cell_3"
5151
5252 let keyPair = "pair_"
5353
54+let keyOraclePoolIndex = "index_"
55+
56+let keyPoolInFarming = "_current_reward"
57+
5458 let keyAdminPubKey1 = "admin_pub_1"
5559
5660 let keyAdminPubKey2 = "admin_pub_2"
5761
5862 let keyAdminPubKey3 = "admin_pub_3"
5963
6064 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
6165
6266 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
6367 case string: String =>
6468 fromBase58String(string)
6569 case nothing =>
6670 throw("Admin public key is empty")
6771 }
6872
6973
7074 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
7175
7276 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
7377
7478 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
7579
7680 let adminPubKeyStartStop = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7781
7882 let walletAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7983
8084 let govAddr = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
85+
86+let farmingAddress = Address(base58'3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT')
8187
8288 let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8389
8490 let SWOP = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
8591
8692 let isActive = getBooleanValue(this, keyActive)
8793
8894 let numberOfVoting = getIntegerValue(this, keyNumberOfVoting)
8995
9096 let amountOfVoting = getIntegerValue(this, keyAmountOfVoting)
9197
9298 let firstActiveVote = valueOrElse(getString(this, activeVoteFirst), "")
9399
94100 let secondActiveVote = valueOrElse(getString(this, activeVoteSecond), "")
95101
96102 let thirdActiveVote = valueOrElse(getString(this, activeVoteThird), "")
97103
98104 let comissionForInitalizationOfVoting = 1000000000
99105
100106 let scaleValue3 = 1000
101107
102108 let scaleValue8 = 100000000
103109
104110 let slippageToleranceDelimiter = 1000
105111
106112 let scaleValue8Digits = 8
107113
108114 let maxAmountOfVoting = 3
109115
110116 let maxDayOfVoting = 7
111117
112118 let votingPeriodLength = (1443 * maxDayOfVoting)
113119
114120 func getAssetInfo (assetId) = match assetId {
115121 case id: ByteVector =>
116122 if (isDefined(assetInfo(id)))
117123 then {
118124 let stringId = toBase58String(id)
119125 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
120126 $Tuple3(stringId, info.name, info.decimals)
121127 }
122128 else throw("Asset is not defined")
123129 case waves: Unit =>
124130 $Tuple3("WAVES", "WAVES", 8)
125131 case _ =>
126132 throw("Match error")
127133 }
128134
129135
130-func isActivePoolExists (pools,assetA,assetB) = {
136+func isActivePoolExists (pools,address) = {
131137 let poolsData = split(pools, "_")
132138 let isPoolDefine = isDefined(getInteger(this, pools))
133139 if (if (isPoolDefine)
134140 then (pools != "")
135141 else false)
136142 then {
137- let voting = poolsData[2]
138- let newPools = (((((assetA + "_") + assetB) + "_") + voting) + votingId)
143+ let voting = poolsData[1]
144+ let newPools = (((address + "_") + voting) + votingId)
139145 let isNewPoolDefine = isDefined(getInteger(this, newPools))
140146 let heightOfVoting = valueOrElse(getInteger(this, (voting + keyHeightOfPool)), 0)
141147 let statusOfVoting = valueOrElse(getBoolean(this, (voting + keyStatusOfVoting)), true)
142148 if (isNewPoolDefine)
143149 then if ((heightOfVoting > height))
144150 then if (statusOfVoting)
145151 then true
146152 else false
147153 else false
148154 else false
149155 }
150156 else false
151157 }
152158
153159
154160 func isUnactivePoolExists (poolsState) = {
155161 let pools = valueOrElse(getString(this, poolsState), "")
156162 let poolsData = split(pools, "_")
157163 let isPoolDefine = isDefined(getInteger(this, pools))
158164 if (if (isPoolDefine)
159165 then (pools != "")
160166 else false)
161167 then {
162168 let voting = poolsData[2]
163169 let heightOfVoting = valueOrElse(getInteger(this, (voting + keyHeightOfPool)), 0)
164170 let statusOfVoting = valueOrElse(getBoolean(this, (voting + keyStatusOfVoting)), true)
165171 if ((heightOfVoting > height))
166172 then if (statusOfVoting)
167173 then ""
168174 else poolsState
169175 else poolsState
170176 }
171177 else poolsState
172178 }
173179
174180
175-func isLastActivePoolExists (assetA,assetB) = if (if (isActivePoolExists(firstActiveVote, assetA, assetB))
181+func isLastActivePoolExists (address) = if (if (isActivePoolExists(firstActiveVote, address))
176182 then true
177- else isActivePoolExists(secondActiveVote, assetA, assetB))
183+ else isActivePoolExists(secondActiveVote, address))
178184 then true
179- else isActivePoolExists(thirdActiveVote, assetA, assetB)
185+ else isActivePoolExists(thirdActiveVote, address)
180186
181187
182188 func getActivePool (voting) = {
183189 let heightOfVoting = valueOrElse(getInteger(this, (toString(voting) + keyHeightOfPool)), 0)
184190 let statusOfVoting = valueOrElse(getBoolean(this, (toString(voting) + keyStatusOfVoting)), true)
185191 let currentHeight = height
186192 if ((0 > voting))
187193 then 0
188194 else if (!(statusOfVoting))
189195 then 0
190196 else if ((heightOfVoting > currentHeight))
191197 then 1
192198 else 0
193199 }
194200
195201
196202 func getActiveVotingPoolAmount () = ((getActivePool(valueOrElse(getInteger(this, firstActiveVote), -1)) + getActivePool(valueOrElse(getInteger(this, secondActiveVote), -1))) + getActivePool(valueOrElse(getInteger(this, thirdActiveVote), -1)))
197203
198204
199205 func getUnactiveVotingPool () = if ((isUnactivePoolExists(activeVoteFirst) != ""))
200206 then activeVoteFirst
201207 else if ((isUnactivePoolExists(activeVoteSecond) != ""))
202208 then activeVoteSecond
203209 else if ((isUnactivePoolExists(activeVoteThird) != ""))
204210 then activeVoteThird
205211 else ""
206212
207213
208214 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
209215 then unit
210216 else fromBase58String(assetStr)
211217
212218
213219 func isCallerInGovernance (user) = if ((valueOrElse(getInteger(govAddr, (toString(user) + kUserTotalSWOP)), 0) > 0))
214220 then true
215221 else false
216222
217223
218224 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
219225
220226
221227 func throwInsufficientAvailableBalance (amount,assetName) = throw(((((("Insufficient DApp balance to pay " + toString(amount)) + " ") + assetName) + " due to staking.") + ". Please contact support in Telegram: https://t.me/swopfisupport"))
222228
223229
224230 @Callable(i)
225231 func init () = if ((i.caller != this))
226232 then throw("Only the DApp itself can call this function")
227233 else if (isDefined(getBoolean(this, keyActive)))
228234 then throw("DApp is already active")
229235 else {
230236 let initNumberOfVoting = 0
231237 let initAmountOfVoting = 0
232238 let initKeyActive = true
233239 let activeInit = ""
234240 [StringEntry(keyVersion, version), BooleanEntry(keyActive, initKeyActive), IntegerEntry(keyNumberOfVoting, initNumberOfVoting), IntegerEntry(keyAmountOfVoting, initAmountOfVoting), IntegerEntry(keyMaxAmountOfVoting, maxAmountOfVoting), IntegerEntry(keyMaxDayOfVoting, maxDayOfVoting), StringEntry(activeVoteFirst, activeInit), StringEntry(activeVoteSecond, activeInit), StringEntry(activeVoteThird, activeInit)]
235241 }
236242
237243
238244
239245 @Callable(i)
240-func initVotingForNewPool (assetA,assetB) = {
241- let $t071817256 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
242- let pmtAmount = $t071817256._1
243- let pmtAssetId = $t071817256._2
244- let $t072617360 = $Tuple2(getAssetInfoFromString(assetA), getAssetInfoFromString(assetB))
245- let poolAssetIdA = $t072617360._1
246- let poolAssetIdB = $t072617360._2
246+func initVotingForNewPool (address) = {
247+ let $t072297304 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
248+ let pmtAmount = $t072297304._1
249+ let pmtAssetId = $t072297304._2
247250 let unactiveVote = getUnactiveVotingPool()
248251 let newNumberOfVoting = getActiveVotingPoolAmount()
249- let isPoolExists = isLastActivePoolExists(assetA, assetB)
250- let $t075307608 = getAssetInfo(poolAssetIdA)
251- let pmtStrAssetIdA = $t075307608._1
252- let pmtAssetNameA = $t075307608._2
253- let pmtDecimalsA = $t075307608._3
254- let $t076137691 = getAssetInfo(poolAssetIdB)
255- let pmtStrAssetIdB = $t076137691._1
256- let pmtAssetNameB = $t076137691._2
257- let pmtDecimalsB = $t076137691._3
252+ let isPoolExists = isLastActivePoolExists(address)
258253 if (!(isActive))
259254 then throw("DApp is inactive at this moment")
260- else if (isDefined(getString(oracle, (((keyPair + assetA) + "_") + assetB))))
261- then throw("Assets must be from oracle")
262- else if ((poolAssetIdA == poolAssetIdB))
263- then throw("Assets must be different")
255+ else if (!(isDefined(getInteger(oracle, (keyOraclePoolIndex + address)))))
256+ then throw("Pool must be in oracle")
257+ else if (isDefined(getString(farmingAddress, (address + keyPoolInFarming))))
258+ then throw("Pool already in farming")
264259 else if (isPoolExists)
265260 then throw("This pool already exists")
266261 else if (if (((newNumberOfVoting + 1) > maxAmountOfVoting))
267262 then true
268263 else (unactiveVote == ""))
269264 then throw(("Too many votings. Maximum quantity: " + toString(maxAmountOfVoting)))
270265 else if ((size(i.payments) != 1))
271266 then throw("One attached asset expected")
272267 else if ((pmtAssetId != SWOP))
273268 then throw("You must use a SWOP token")
274- else if (if ((assetA == ""))
275- then true
276- else (assetB == ""))
277- then throw("Assets can't be empty")
278- else if ((pmtAmount != comissionForInitalizationOfVoting))
279- then throw("You need to attach 10 SWOP tokens")
280- else if (!(if (if ((poolAssetIdB == USDN))
281- then true
282- else (poolAssetIdB == unit))
283- then true
284- else (poolAssetIdB == SWOP)))
285- then throw("assetB must be USDN, WAVES or SWOP")
286- else [IntegerEntry((((((assetA + "_") + assetB) + "_") + toString(amountOfVoting)) + votingId), amountOfVoting), IntegerEntry((toString(amountOfVoting) + keyHeightOfPool), (height + votingPeriodLength)), BooleanEntry((toString(amountOfVoting) + keyStatusOfVoting), true), IntegerEntry(keyAmountOfVoting, (amountOfVoting + 1)), IntegerEntry(keyNumberOfVoting, (newNumberOfVoting + 1)), StringEntry((assetA + kName), pmtAssetNameA), StringEntry((assetB + kName), pmtAssetNameB), StringEntry(unactiveVote, (((((assetA + "_") + assetB) + "_") + toString(amountOfVoting)) + votingId)), ScriptTransfer(walletAddress, pmtAmount, pmtAssetId)]
269+ else if ((pmtAmount != comissionForInitalizationOfVoting))
270+ then throw("You need to attach 10 SWOP tokens")
271+ else [IntegerEntry(((address + toString(amountOfVoting)) + votingId), amountOfVoting), IntegerEntry((toString(amountOfVoting) + keyHeightOfPool), (height + votingPeriodLength)), BooleanEntry((toString(amountOfVoting) + keyStatusOfVoting), true), IntegerEntry(keyAmountOfVoting, (amountOfVoting + 1)), IntegerEntry(keyNumberOfVoting, (newNumberOfVoting + 1)), StringEntry(unactiveVote, ((address + toString(amountOfVoting)) + votingId)), ScriptTransfer(walletAddress, pmtAmount, pmtAssetId)]
287272 }
288273
289274
290275
291276 @Callable(i)
292277 func voteForPool (voting,yesOrNo,voteAmt) = {
293278 let currentHeight = height
294279 let poolInitHeight = valueOrErrorMessage(getIntegerValue(this, (toString(voting) + keyHeightOfPool)), "Empty pool height")
295280 let statusOfVoting = valueOrElse(getBoolean(this, (toString(voting) + keyStatusOfVoting)), true)
296281 let userSWOPinGovernance = valueOrElse(getInteger(govAddr, (toString(i.caller) + kUserTotalSWOP)), 0)
297282 let totalVoteUser = if (yesOrNo)
298283 then (valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(voting)) + keyNoUser)), 0) + voteAmt)
299284 else (valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(voting)) + keyYesUser)), 0) + voteAmt)
300285 if (!(isCallerInGovernance(i.caller)))
301286 then throw("This address has 0 SWOP in Governance dApp")
302287 else if (!(isActive))
303288 then throw("DApp is inactive at this moment")
304289 else if (!(statusOfVoting))
305290 then throw("This voting was canceled")
306291 else if ((currentHeight > poolInitHeight))
307292 then throw("This voting was expired")
308293 else if ((0 > voteAmt))
309294 then throw("The number of votes must be positive")
310295 else if ((totalVoteUser > userSWOPinGovernance))
311296 then throw((((toString(this) + " has ") + toString(userSWOPinGovernance)) + " SWOP in governance."))
312297 else if (yesOrNo)
313298 then {
314299 let oldVoteUser = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(voting)) + keyYesUser)), 0)
315300 let newVote = ((valueOrElse(getInteger(this, (toString(voting) + keyYes)), 0) - oldVoteUser) + voteAmt)
316301 [IntegerEntry((toString(voting) + keyYes), newVote), IntegerEntry((((toString(i.caller) + "_") + toString(voting)) + keyYesUser), voteAmt)]
317302 }
318303 else {
319304 let oldVoteUser = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(voting)) + keyNoUser)), 0)
320305 let newVote = ((valueOrElse(getInteger(this, (toString(voting) + keyNo)), 0) - oldVoteUser) + voteAmt)
321306 [IntegerEntry((toString(voting) + keyNo), newVote), IntegerEntry((((toString(i.caller) + "_") + toString(voting)) + keyNoUser), voteAmt)]
322307 }
323308 }
324309
325310
326311
327312 @Callable(i)
328313 func cancelVoting (voting,cause) = {
329314 let statusOfVoting = valueOrElse(getBoolean(this, (toString(voting) + keyStatusOfVoting)), true)
330315 if (!(isActive))
331316 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
332317 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
333318 then throw("Only admin can call this function")
334319 else if (!(statusOfVoting))
335320 then throw((("Voting " + toString(voting)) + " has already been stopped"))
336321 else [IntegerEntry(keyNumberOfVoting, (numberOfVoting - 1)), BooleanEntry((toString(voting) + keyStatusOfVoting), false), StringEntry((toString(voting) + keyCancelCause), cause)]
337322 }
338323
339324
340325
341326 @Callable(i)
342327 func shutdown () = if (!(isActive))
343328 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
344329 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
345330 then throw("Only admin can call this function")
346331 else suspend("Paused by admin")
347332
348333
349334
350335 @Callable(i)
351336 func activate () = if (isActive)
352337 then throw("DApp is already active")
353338 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
354339 then throw("Only admin can call this function")
355340 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
356341
357342
358343 @Verifier(tx)
359344 func verify () = {
360345 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
361346 then 1
362347 else 0
363348 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
364349 then 1
365350 else 0
366351 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
367352 then 1
368353 else 0
369354 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
370355 }
371356

github/deemru/w8io/3ef1775 
74.88 ms