tx · 7aifmoHGtzq2mrdxTqGSHdfNtYfKRijMyYVWznKEJtBj

3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA:  -0.01400000 Waves

2021.01.13 14:18 [2415361] smart account 3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA > SELF 0.00000000 Waves

{ "type": 13, "id": "7aifmoHGtzq2mrdxTqGSHdfNtYfKRijMyYVWznKEJtBj", "fee": 1400000, "feeAssetId": null, "timestamp": 1610536751662, "version": 1, "sender": "3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA", "senderPublicKey": "5gGSWjBNTQGAMZViHK3qbn35JUNmbzqboicpdMuweapK", "proofs": [ "5eUKtHjDkfLstRxtMicSsDwUCn4KYoP8kjn4QWr68QLVqgAaBWKcy8tmX51EkuUia8AMAZaqtrpqgKCJZbwqon4L" ], "script": "base64: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YXRjaGVyRmVlQXNzZXRJZAcJAAAAAAAAAggFAAAAAW8AAAAQbWF0Y2hlclB1YmxpY0tleQUAAAAOd2V4Y2hQdWJsaWNLZXkHAwMDCQAAAAAAAAIIBQAAAAFvAAAACW9yZGVyVHlwZQUAAAADQnV5CQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAlwb3J0Zm9saW8ICAUAAAABbwAAAAlhc3NldFBhaXIAAAAKcHJpY2VBc3NldAcGAwkAAAAAAAACCAUAAAABbwAAAAlvcmRlclR5cGUFAAAABFNlbGwJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcGAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAJcG9ydGZvbGlvCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcHCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAlvdXJBc3NldHMICAUAAAABbwAAAAlhc3NldFBhaXIAAAAKcHJpY2VBc3NldAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACW91ckFzc2V0cwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABdNYXNzVHJhbnNmZXJUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAMDAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAHYXNzZXRJZAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAKZmVlQXNzZXRJZAcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcHxtS3uQ==", "chainId": 87, "height": 2415361, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FkdPN7vVJkk3nGN8w429kzNjxbGm4rWXjMErM3MN2Qsp Next: 5WEB4RLpHtgnkJgzJA2LxGLYrkk9CnjwNMxaMao3KVrR Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let ScriptVersion = "2.0.11-beta_20210107"
4+let ScriptVersion = "2.1.0-beta_20210113"
55
66 let percent = 10000
77
1313
1414 let fhfsPrice = (100 * usdMult)
1515
16-let fmainPercent = ((30 * percent) / 100)
16+let salePercent = ((30 * percent) / 100)
1717
1818 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
1919
4141
4242 let ourAssets = [fhfsAsset, xfeeAsset, ratsAsset]
4343
44-let mainMult = 2
44+let majorSize = 1
4545
46-let altsMult = (mainMult * (size(portfolio) - 1))
46+let majorMult = 2
47+
48+let altMult = (majorMult * (size(portfolio) - majorSize))
4749
4850 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
4951
6365
6466 let usdxFunds = (assetBalance(frats, usdtAsset) + assetBalance(frats, usdcAsset))
6567
66-func fractionRound (val,num,den) = ((fraction((2 * val), num, den) + 1) / 2)
68+func round (xVal) = ((xVal + 1) / 2)
6769
6870
69-func valueOrMinimum (intValue,minValue) = if ((minValue > intValue))
70- then minValue
71- else intValue
71+func fractionRound (val,num,den) = round(fraction((2 * val), num, den))
72+
73+
74+func valueOrMinimum (val,minVal) = if ((minVal > val))
75+ then minVal
76+ else val
77+
78+
79+func adminTimestamp (publicKey) = if ((publicKey != adminPublicKey))
80+ then nil
81+ else [IntegerEntry("timestamp", lastBlock.timestamp)]
7282
7383
7484 func excessAmount (assetId) = {
7585 let fmainFunds = assetBalance(fmain, assetId)
7686 let totalFunds = (fmainFunds + assetBalance(fcold, assetId))
77- let fmainSupply = fraction(totalFunds, fmainPercent, percent)
78- valueOrMinimum((fmainSupply - fmainFunds), 0)
87+ valueOrMinimum((fraction(totalFunds, salePercent, percent) - fmainFunds), 0)
7988 }
8089
8190
8291 func airdropBalance (assetId) = if (containsElement((portfolio ++ ourAssets), assetId))
83- then throw(makeString(["Please delete the asset ID:", toBase58String(assetId)], " "))
92+ then throw(makeString(["AirdropWasher () =>", "Please remove the asset ID:", toBase58String(assetId)], " "))
8493 else if ((assetId == base58''))
8594 then 0
8695 else assetBalance(this, assetId)
87-
88-
89-func adminTimestamp (publicKey) = if ((publicKey != adminPublicKey))
90- then nil
91- else [IntegerEntry("timestamp", lastBlock.timestamp)]
9296
9397
9498 func toDateTimeString (timestamp) = {
111115 else (((yyyy + 1) % 400) == 0))
112116 then leap
113117 else norm
114- let mm = if ((months[0] > ytd))
115- then throw("toDateTimeString: Negative error in months!")
116- else if ((months[1] > ytd))
117- then 0
118- else if ((months[2] > ytd))
119- then 1
120- else if ((months[3] > ytd))
121- then 2
122- else if ((months[4] > ytd))
123- then 3
124- else if ((months[5] > ytd))
125- then 4
126- else if ((months[6] > ytd))
127- then 5
128- else if ((months[7] > ytd))
129- then 6
130- else if ((months[8] > ytd))
131- then 6
132- else if ((months[9] > ytd))
133- then 7
134- else if ((months[10] > ytd))
135- then 8
136- else if ((months[11] > ytd))
137- then 10
138- else if ((months[12] > ytd))
139- then 11
140- else throw("toDateTimeString: Overflow error in months!")
118+ let mm = if (if ((0 > ytd))
119+ then true
120+ else (ytd >= months[12]))
121+ then throw("Unexpected error: Value overflow for months!")
122+ else if ((ytd >= months[11]))
123+ then 11
124+ else if ((ytd >= months[10]))
125+ then 10
126+ else if ((ytd >= months[9]))
127+ then 9
128+ else if ((ytd >= months[8]))
129+ then 8
130+ else if ((ytd >= months[7]))
131+ then 7
132+ else if ((ytd >= months[6]))
133+ then 6
134+ else if ((ytd >= months[5]))
135+ then 5
136+ else if ((ytd >= months[4]))
137+ then 4
138+ else if ((ytd >= months[3]))
139+ then 3
140+ else if ((ytd >= months[2]))
141+ then 2
142+ else if ((ytd >= months[1]))
143+ then 1
144+ else 0
141145 let dd = (ytd - months[mm])
142146 ((((drop(toBytes(toString((yyyy + 1))), 0) + base58'n') + drop(toBytes(toString((mm + 101))), 1)) + base58'n') + drop(toBytes(toString((dd + 101))), 1))
143147 }
158162
159163 @Callable(i)
160164 func AutoFixProfit (newMult) = {
161- let spread = getIntegerValue(this, "halfSpread")
165+ let oldProfit = valueOrElse(getInteger(this, "fixedProfit"), 0)
166+ let riskPercent = valueOrElse(getInteger(this, "riskPercent"), (percent / 100))
162167 let usdtFunds = fraction(fhfsFunds, fhfsPrice, decMult)
163- let usdtOrder = fraction(usdtFunds, spread, (altsMult * percent))
164- let oldProfit = getIntegerValue(this, "fixedProfit")
165- let minMult = ((oldProfit / usdtOrder) + 1)
166- let newProfit = (newMult * usdtOrder)
168+ let riskAmount = fraction(usdtFunds, riskPercent, (altMult * percent))
169+ let minMult = ((oldProfit / riskAmount) + 1)
170+ let newProfit = (newMult * riskAmount)
167171 let usdtAmount = valueOrMinimum((newProfit - oldProfit), 0)
168172 let ratsAmount = fractionRound(usdtAmount, ratsFunds, usdxFunds)
169173 if ((minMult > newMult))
170- then throw(makeString(["Inavlid value! Min. multiplier:", toString(minMult)], " "))
174+ then throw(makeString([(("AutoFixProfit (" + toString(newMult)) + ") =>"), "Inavlid value! Min. multiplier:", toString(minMult)], " "))
171175 else if ((size(i.payments) > 0))
172- then throw("Don't attach payment when calling this function ...")
176+ then throw(makeString(["AutoFixProfit (...) =>", "Don't attach payment when calling this function ..."], " "))
173177 else if (if ((i.callerPublicKey != adminPublicKey))
174178 then (i.callerPublicKey != robotPublicKey)
175179 else false)
176- then throw("This action can only be performed by an administrator!")
180+ then throw(makeString(["AutoFixProfit (...) =>", "This action can only be performed by an administrator!"], " "))
177181 else ([IntegerEntry("fixedProfit", newProfit), ScriptTransfer(frats, usdtAmount, usdtAsset), ScriptTransfer(fmain, ratsAmount, ratsAsset)] ++ adminTimestamp(i.callerPublicKey))
178182 }
179183
181185
182186 @Callable(i)
183187 func AutoRebalance () = {
184- let fhfsExcessAmount = valueOrMinimum((getIntegerValue(fmain, "fhfsSupply") - assetBalance(fmain, fhfsAsset)), 0)
188+ let fhfsSupply = valueOrElse(getInteger(fmain, "fhfsSupply"), (100 * decMult))
189+ let fhfsExcessAmount = valueOrMinimum((fhfsSupply - assetBalance(fmain, fhfsAsset)), 0)
185190 if ((size(i.payments) > 0))
186- then throw("Don't attach payment when calling this function ...")
191+ then throw(makeString(["AutoRebalance () =>", "Don't attach payment when calling this function ..."], " "))
187192 else if (if ((i.callerPublicKey != adminPublicKey))
188193 then (i.callerPublicKey != robotPublicKey)
189194 else false)
190- then throw("This action can only be performed by an administrator!")
195+ then throw(makeString(["AutoRebalance () =>", "This action can only be performed by an administrator!"], " "))
191196 else ([ScriptTransfer(fmain, fhfsExcessAmount, fhfsAsset), ScriptTransfer(fmain, excessAmount(portfolio[0]), portfolio[0]), ScriptTransfer(fmain, excessAmount(portfolio[1]), portfolio[1]), ScriptTransfer(fmain, excessAmount(portfolio[2]), portfolio[2]), ScriptTransfer(fmain, excessAmount(portfolio[3]), portfolio[3]), ScriptTransfer(fmain, excessAmount(portfolio[4]), portfolio[4]), ScriptTransfer(fmain, excessAmount(portfolio[5]), portfolio[5]), ScriptTransfer(fmain, excessAmount(portfolio[6]), portfolio[6]), ScriptTransfer(fmain, excessAmount(portfolio[7]), portfolio[7])] ++ adminTimestamp(i.callerPublicKey))
192197 }
193198
195200
196201 @Callable(i)
197202 func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((size(i.payments) > 0))
198- then throw("Don't attach payment when calling this function ...")
203+ then throw(makeString(["AirdropWasher (...) =>", "Don't attach payment when calling this function ..."], " "))
199204 else if ((i.callerPublicKey != adminPublicKey))
200- then throw("This action can only be performed by an administrator!")
205+ then throw(makeString(["AirdropWasher (...) =>", "This action can only be performed by an administrator!"], " "))
201206 else ([ScriptTransfer(admin, airdropBalance(id0), id0), ScriptTransfer(admin, airdropBalance(id1), id1), ScriptTransfer(admin, airdropBalance(id2), id2), ScriptTransfer(admin, airdropBalance(id3), id3), ScriptTransfer(admin, airdropBalance(id4), id4), ScriptTransfer(admin, airdropBalance(id5), id5), ScriptTransfer(admin, airdropBalance(id6), id6), ScriptTransfer(admin, airdropBalance(id7), id7), ScriptTransfer(admin, airdropBalance(id8), id8), ScriptTransfer(admin, airdropBalance(id9), id9)] ++ adminTimestamp(i.callerPublicKey))
202207
203208
204209
205210 @Callable(i)
206211 func EmergencyExit () = {
207- let isAdmin = (i.callerPublicKey == adminPublicKey)
208212 let lastTimestamp = max([valueOrElse(getInteger(fmain, "timestamp"), 0), valueOrElse(getInteger(fcold, "timestamp"), 0), valueOrElse(getInteger(frats, "timestamp"), 0)])
209213 let minTimestamp = (lastTimestamp + oneWeek)
214+ let isAdmin = (i.callerPublicKey == adminPublicKey)
210215 if (if (!(isAdmin))
211216 then (minTimestamp > lastBlock.timestamp)
212217 else false)
213- then throw(makeString(["Will be unlocked after the date:", toDateTimeString(minTimestamp)], " "))
218+ then throw(makeString(["EmergencyExit () =>", "Will be unlocked after the date:", toDateTimeString(minTimestamp)], " "))
214219 else if ((size(i.payments) > 0))
215- then throw("Don't attach payment when calling this function ...")
220+ then throw(makeString(["EmergencyExit () =>", "Don't attach payment when calling this function ..."], " "))
216221 else if (if (!(isAdmin))
217222 then !(containsElement(guarantors, i.callerPublicKey))
218223 else false)
219- then throw("This action can only be performed by an administrator or guarantor!")
224+ then throw(makeString(["EmergencyExit () =>", "This action can only be performed by one of the guarantors!"], " "))
220225 else ([BooleanEntry("emergency", !(isAdmin)), ScriptTransfer(fmain, assetBalance(fcold, portfolio[0]), portfolio[0]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[1]), portfolio[1]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[2]), portfolio[2]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[3]), portfolio[3]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[4]), portfolio[4]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[5]), portfolio[5]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[6]), portfolio[6]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[7]), portfolio[7])] ++ adminTimestamp(i.callerPublicKey))
221226 }
222227
223228
224229 @Verifier(tx)
225230 func verify () = {
231+ let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
232+ let isValidAdmin = if (isValidOwner)
233+ then true
234+ else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
235+ let isValidRobot = if (isValidOwner)
236+ then true
237+ else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], robotPublicKey)
226238 let isValidGuarantors = ((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
227239 then 1
228240 else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
230242 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
231243 then 1
232244 else 0)) >= minSignatures)
233- let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
234- let isValidAdmin = if (isValidOwner)
235- then true
236- else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
237- let isValidRobot = if (isValidOwner)
238- then true
239- else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], robotPublicKey)
240245 match tx {
246+ case _: LeaseCancelTransaction|LeaseTransaction =>
247+ isValidOwner
241248 case b: BurnTransaction =>
242249 if (if (isValidOwner)
243250 then !(containsElement(portfolio, b.assetId))
244251 else false)
245252 then !(containsElement(ourAssets, b.assetId))
246253 else false
247- case l: LeaseCancelTransaction|LeaseTransaction =>
248- isValidOwner
249254 case o: Order =>
250255 if (if (if (if (if (isValidRobot)
251256 then !(isDefined(o.matcherFeeAssetId))
269274 then !(containsElement(ourAssets, o.assetPair.amountAsset))
270275 else false
271276 case t: MassTransferTransaction|TransferTransaction =>
272- if (if (isValidAdmin)
277+ if (if (if (isValidAdmin)
273278 then isValidGuarantors
274279 else false)
275280 then !(containsElement(portfolio, t.assetId))
281+ else false)
282+ then !(containsElement(portfolio, t.feeAssetId))
276283 else false
277284 case _: SetScriptTransaction|DataTransaction =>
278- isValidAdmin
285+ if (isValidAdmin)
286+ then isValidGuarantors
287+ else false
279288 case _ =>
280289 false
281290 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let ScriptVersion = "2.0.11-beta_20210107"
4+let ScriptVersion = "2.1.0-beta_20210113"
55
66 let percent = 10000
77
88 let usdMult = 1000000
99
1010 let decMult = 100000000
1111
1212 let oneWeek = (604800 * 1000)
1313
1414 let fhfsPrice = (100 * usdMult)
1515
16-let fmainPercent = ((30 * percent) / 100)
16+let salePercent = ((30 * percent) / 100)
1717
1818 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
1919
2020 let robotPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
2121
2222 let wexchPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5'
2323
2424 let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58'')] :+ base58'')
2525
2626 let actualSize = value(indexOf(guarantors, base58''))
2727
2828 let minSignatures = ((actualSize / 2) + (actualSize % 2))
2929
3030 let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
3131
3232 let usdcAsset = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
3333
3434 let fhfsAsset = base58'4wcCKU3Cu4ABpmfiwzufocvrQQuRX4QMHZ7TjpRwtAmn'
3535
3636 let ratsAsset = base58'Z7817F7hnbWYsVHykjPtn8sUjyuLLf8NPofdveb8CMD'
3737
3838 let xfeeAsset = base58'5EMfVQiB8NF4HuhaXrZzDM637whWuVBsduq59ZaCSNqk'
3939
4040 let portfolio = [base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ', base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS', base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu', base58'zMFqXuoyrn5w17PFurTqxB7GsS71fp9dfk6XFwxbPCy', base58'HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk', base58'B3uGHFRpSUuGEDWjqB9LWWxafQj8VTvpMucEyoxzws5H', base58'5WvPKSJXzVE2orvbkJ8wsQmmQKqTv9sGBPksV4adViw3', base58'BrjUWjndUanm5VsJkbUip8VRYy6LWJePtxya3FNv4TQa']
4141
4242 let ourAssets = [fhfsAsset, xfeeAsset, ratsAsset]
4343
44-let mainMult = 2
44+let majorSize = 1
4545
46-let altsMult = (mainMult * (size(portfolio) - 1))
46+let majorMult = 2
47+
48+let altMult = (majorMult * (size(portfolio) - majorSize))
4749
4850 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
4951
5052 let fmain = Address(base58'3PEPsNg7aSWSSgdC6XweyJkvDXmwVoWeNHL')
5153
5254 let fcold = Address(base58'3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA')
5355
5456 let frats = Address(base58'3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi')
5557
5658 let fhfsTotal = (assetBalance(fmain, fhfsAsset) + assetBalance(fcold, fhfsAsset))
5759
5860 let fhfsFunds = (value(assetInfo(fhfsAsset)).quantity - fhfsTotal)
5961
6062 let ratsTotal = (assetBalance(frats, ratsAsset) + assetBalance(fcold, ratsAsset))
6163
6264 let ratsFunds = (value(assetInfo(ratsAsset)).quantity - ratsTotal)
6365
6466 let usdxFunds = (assetBalance(frats, usdtAsset) + assetBalance(frats, usdcAsset))
6567
66-func fractionRound (val,num,den) = ((fraction((2 * val), num, den) + 1) / 2)
68+func round (xVal) = ((xVal + 1) / 2)
6769
6870
69-func valueOrMinimum (intValue,minValue) = if ((minValue > intValue))
70- then minValue
71- else intValue
71+func fractionRound (val,num,den) = round(fraction((2 * val), num, den))
72+
73+
74+func valueOrMinimum (val,minVal) = if ((minVal > val))
75+ then minVal
76+ else val
77+
78+
79+func adminTimestamp (publicKey) = if ((publicKey != adminPublicKey))
80+ then nil
81+ else [IntegerEntry("timestamp", lastBlock.timestamp)]
7282
7383
7484 func excessAmount (assetId) = {
7585 let fmainFunds = assetBalance(fmain, assetId)
7686 let totalFunds = (fmainFunds + assetBalance(fcold, assetId))
77- let fmainSupply = fraction(totalFunds, fmainPercent, percent)
78- valueOrMinimum((fmainSupply - fmainFunds), 0)
87+ valueOrMinimum((fraction(totalFunds, salePercent, percent) - fmainFunds), 0)
7988 }
8089
8190
8291 func airdropBalance (assetId) = if (containsElement((portfolio ++ ourAssets), assetId))
83- then throw(makeString(["Please delete the asset ID:", toBase58String(assetId)], " "))
92+ then throw(makeString(["AirdropWasher () =>", "Please remove the asset ID:", toBase58String(assetId)], " "))
8493 else if ((assetId == base58''))
8594 then 0
8695 else assetBalance(this, assetId)
87-
88-
89-func adminTimestamp (publicKey) = if ((publicKey != adminPublicKey))
90- then nil
91- else [IntegerEntry("timestamp", lastBlock.timestamp)]
9296
9397
9498 func toDateTimeString (timestamp) = {
9599 let sp = toBytes(" ")
96100 let zd = toBytes(" UTC")
97101 let norm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
98102 let leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
99103 let epoch = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366)
100104 let ce = (timestamp + ((epoch * 86400) * 1000))
101105 if (((-12212553600 * 1000) > timestamp))
102106 then throw("ISO 8601: Only years after 1583 inclusive are allowed!")
103107 else {
104108 let date = {
105109 let yyyy = ((ce / (31556952 * 1000)) - 1)
106110 let ytd = ((ce / (86400 * 1000)) - (((((yyyy * 365) + (yyyy / 4)) - (yyyy / 100)) + (yyyy / 400)) + 366))
107111 let months = if (if (if ((((yyyy + 1) % 4) == 0))
108112 then (((yyyy + 1) % 100) != 0)
109113 else false)
110114 then true
111115 else (((yyyy + 1) % 400) == 0))
112116 then leap
113117 else norm
114- let mm = if ((months[0] > ytd))
115- then throw("toDateTimeString: Negative error in months!")
116- else if ((months[1] > ytd))
117- then 0
118- else if ((months[2] > ytd))
119- then 1
120- else if ((months[3] > ytd))
121- then 2
122- else if ((months[4] > ytd))
123- then 3
124- else if ((months[5] > ytd))
125- then 4
126- else if ((months[6] > ytd))
127- then 5
128- else if ((months[7] > ytd))
129- then 6
130- else if ((months[8] > ytd))
131- then 6
132- else if ((months[9] > ytd))
133- then 7
134- else if ((months[10] > ytd))
135- then 8
136- else if ((months[11] > ytd))
137- then 10
138- else if ((months[12] > ytd))
139- then 11
140- else throw("toDateTimeString: Overflow error in months!")
118+ let mm = if (if ((0 > ytd))
119+ then true
120+ else (ytd >= months[12]))
121+ then throw("Unexpected error: Value overflow for months!")
122+ else if ((ytd >= months[11]))
123+ then 11
124+ else if ((ytd >= months[10]))
125+ then 10
126+ else if ((ytd >= months[9]))
127+ then 9
128+ else if ((ytd >= months[8]))
129+ then 8
130+ else if ((ytd >= months[7]))
131+ then 7
132+ else if ((ytd >= months[6]))
133+ then 6
134+ else if ((ytd >= months[5]))
135+ then 5
136+ else if ((ytd >= months[4]))
137+ then 4
138+ else if ((ytd >= months[3]))
139+ then 3
140+ else if ((ytd >= months[2]))
141+ then 2
142+ else if ((ytd >= months[1]))
143+ then 1
144+ else 0
141145 let dd = (ytd - months[mm])
142146 ((((drop(toBytes(toString((yyyy + 1))), 0) + base58'n') + drop(toBytes(toString((mm + 101))), 1)) + base58'n') + drop(toBytes(toString((dd + 101))), 1))
143147 }
144148 let time = {
145149 let rd = (ce % (86400 * 1000))
146150 let hh = (rd / (3600 * 1000))
147151 let rh = (rd % (3600 * 1000))
148152 let mm = (rh / (60 * 1000))
149153 let rm = (rh % (60 * 1000))
150154 let ss = (rm / 1000)
151155 let ms = (rm % 1000)
152156 ((((drop(toBytes(toString((hh + 100))), 1) + base58'21') + drop(toBytes(toString((mm + 100))), 1)) + base58'21') + drop(toBytes(toString((ss + 100))), 1))
153157 }
154158 toUtf8String((((date + sp) + time) + zd))
155159 }
156160 }
157161
158162
159163 @Callable(i)
160164 func AutoFixProfit (newMult) = {
161- let spread = getIntegerValue(this, "halfSpread")
165+ let oldProfit = valueOrElse(getInteger(this, "fixedProfit"), 0)
166+ let riskPercent = valueOrElse(getInteger(this, "riskPercent"), (percent / 100))
162167 let usdtFunds = fraction(fhfsFunds, fhfsPrice, decMult)
163- let usdtOrder = fraction(usdtFunds, spread, (altsMult * percent))
164- let oldProfit = getIntegerValue(this, "fixedProfit")
165- let minMult = ((oldProfit / usdtOrder) + 1)
166- let newProfit = (newMult * usdtOrder)
168+ let riskAmount = fraction(usdtFunds, riskPercent, (altMult * percent))
169+ let minMult = ((oldProfit / riskAmount) + 1)
170+ let newProfit = (newMult * riskAmount)
167171 let usdtAmount = valueOrMinimum((newProfit - oldProfit), 0)
168172 let ratsAmount = fractionRound(usdtAmount, ratsFunds, usdxFunds)
169173 if ((minMult > newMult))
170- then throw(makeString(["Inavlid value! Min. multiplier:", toString(minMult)], " "))
174+ then throw(makeString([(("AutoFixProfit (" + toString(newMult)) + ") =>"), "Inavlid value! Min. multiplier:", toString(minMult)], " "))
171175 else if ((size(i.payments) > 0))
172- then throw("Don't attach payment when calling this function ...")
176+ then throw(makeString(["AutoFixProfit (...) =>", "Don't attach payment when calling this function ..."], " "))
173177 else if (if ((i.callerPublicKey != adminPublicKey))
174178 then (i.callerPublicKey != robotPublicKey)
175179 else false)
176- then throw("This action can only be performed by an administrator!")
180+ then throw(makeString(["AutoFixProfit (...) =>", "This action can only be performed by an administrator!"], " "))
177181 else ([IntegerEntry("fixedProfit", newProfit), ScriptTransfer(frats, usdtAmount, usdtAsset), ScriptTransfer(fmain, ratsAmount, ratsAsset)] ++ adminTimestamp(i.callerPublicKey))
178182 }
179183
180184
181185
182186 @Callable(i)
183187 func AutoRebalance () = {
184- let fhfsExcessAmount = valueOrMinimum((getIntegerValue(fmain, "fhfsSupply") - assetBalance(fmain, fhfsAsset)), 0)
188+ let fhfsSupply = valueOrElse(getInteger(fmain, "fhfsSupply"), (100 * decMult))
189+ let fhfsExcessAmount = valueOrMinimum((fhfsSupply - assetBalance(fmain, fhfsAsset)), 0)
185190 if ((size(i.payments) > 0))
186- then throw("Don't attach payment when calling this function ...")
191+ then throw(makeString(["AutoRebalance () =>", "Don't attach payment when calling this function ..."], " "))
187192 else if (if ((i.callerPublicKey != adminPublicKey))
188193 then (i.callerPublicKey != robotPublicKey)
189194 else false)
190- then throw("This action can only be performed by an administrator!")
195+ then throw(makeString(["AutoRebalance () =>", "This action can only be performed by an administrator!"], " "))
191196 else ([ScriptTransfer(fmain, fhfsExcessAmount, fhfsAsset), ScriptTransfer(fmain, excessAmount(portfolio[0]), portfolio[0]), ScriptTransfer(fmain, excessAmount(portfolio[1]), portfolio[1]), ScriptTransfer(fmain, excessAmount(portfolio[2]), portfolio[2]), ScriptTransfer(fmain, excessAmount(portfolio[3]), portfolio[3]), ScriptTransfer(fmain, excessAmount(portfolio[4]), portfolio[4]), ScriptTransfer(fmain, excessAmount(portfolio[5]), portfolio[5]), ScriptTransfer(fmain, excessAmount(portfolio[6]), portfolio[6]), ScriptTransfer(fmain, excessAmount(portfolio[7]), portfolio[7])] ++ adminTimestamp(i.callerPublicKey))
192197 }
193198
194199
195200
196201 @Callable(i)
197202 func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((size(i.payments) > 0))
198- then throw("Don't attach payment when calling this function ...")
203+ then throw(makeString(["AirdropWasher (...) =>", "Don't attach payment when calling this function ..."], " "))
199204 else if ((i.callerPublicKey != adminPublicKey))
200- then throw("This action can only be performed by an administrator!")
205+ then throw(makeString(["AirdropWasher (...) =>", "This action can only be performed by an administrator!"], " "))
201206 else ([ScriptTransfer(admin, airdropBalance(id0), id0), ScriptTransfer(admin, airdropBalance(id1), id1), ScriptTransfer(admin, airdropBalance(id2), id2), ScriptTransfer(admin, airdropBalance(id3), id3), ScriptTransfer(admin, airdropBalance(id4), id4), ScriptTransfer(admin, airdropBalance(id5), id5), ScriptTransfer(admin, airdropBalance(id6), id6), ScriptTransfer(admin, airdropBalance(id7), id7), ScriptTransfer(admin, airdropBalance(id8), id8), ScriptTransfer(admin, airdropBalance(id9), id9)] ++ adminTimestamp(i.callerPublicKey))
202207
203208
204209
205210 @Callable(i)
206211 func EmergencyExit () = {
207- let isAdmin = (i.callerPublicKey == adminPublicKey)
208212 let lastTimestamp = max([valueOrElse(getInteger(fmain, "timestamp"), 0), valueOrElse(getInteger(fcold, "timestamp"), 0), valueOrElse(getInteger(frats, "timestamp"), 0)])
209213 let minTimestamp = (lastTimestamp + oneWeek)
214+ let isAdmin = (i.callerPublicKey == adminPublicKey)
210215 if (if (!(isAdmin))
211216 then (minTimestamp > lastBlock.timestamp)
212217 else false)
213- then throw(makeString(["Will be unlocked after the date:", toDateTimeString(minTimestamp)], " "))
218+ then throw(makeString(["EmergencyExit () =>", "Will be unlocked after the date:", toDateTimeString(minTimestamp)], " "))
214219 else if ((size(i.payments) > 0))
215- then throw("Don't attach payment when calling this function ...")
220+ then throw(makeString(["EmergencyExit () =>", "Don't attach payment when calling this function ..."], " "))
216221 else if (if (!(isAdmin))
217222 then !(containsElement(guarantors, i.callerPublicKey))
218223 else false)
219- then throw("This action can only be performed by an administrator or guarantor!")
224+ then throw(makeString(["EmergencyExit () =>", "This action can only be performed by one of the guarantors!"], " "))
220225 else ([BooleanEntry("emergency", !(isAdmin)), ScriptTransfer(fmain, assetBalance(fcold, portfolio[0]), portfolio[0]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[1]), portfolio[1]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[2]), portfolio[2]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[3]), portfolio[3]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[4]), portfolio[4]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[5]), portfolio[5]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[6]), portfolio[6]), ScriptTransfer(fmain, assetBalance(fcold, portfolio[7]), portfolio[7])] ++ adminTimestamp(i.callerPublicKey))
221226 }
222227
223228
224229 @Verifier(tx)
225230 func verify () = {
231+ let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
232+ let isValidAdmin = if (isValidOwner)
233+ then true
234+ else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
235+ let isValidRobot = if (isValidOwner)
236+ then true
237+ else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], robotPublicKey)
226238 let isValidGuarantors = ((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
227239 then 1
228240 else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
229241 then 1
230242 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
231243 then 1
232244 else 0)) >= minSignatures)
233- let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
234- let isValidAdmin = if (isValidOwner)
235- then true
236- else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
237- let isValidRobot = if (isValidOwner)
238- then true
239- else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], robotPublicKey)
240245 match tx {
246+ case _: LeaseCancelTransaction|LeaseTransaction =>
247+ isValidOwner
241248 case b: BurnTransaction =>
242249 if (if (isValidOwner)
243250 then !(containsElement(portfolio, b.assetId))
244251 else false)
245252 then !(containsElement(ourAssets, b.assetId))
246253 else false
247- case l: LeaseCancelTransaction|LeaseTransaction =>
248- isValidOwner
249254 case o: Order =>
250255 if (if (if (if (if (isValidRobot)
251256 then !(isDefined(o.matcherFeeAssetId))
252257 else false)
253258 then (o.matcherPublicKey == wexchPublicKey)
254259 else false)
255260 then if (if (if ((o.orderType == Buy))
256261 then !(containsElement(portfolio, o.assetPair.priceAsset))
257262 else false)
258263 then true
259264 else if ((o.orderType == Sell))
260265 then !(containsElement(portfolio, o.assetPair.amountAsset))
261266 else false)
262267 then true
263268 else if (!(containsElement(portfolio, o.assetPair.priceAsset)))
264269 then !(containsElement(portfolio, o.assetPair.amountAsset))
265270 else false
266271 else false)
267272 then !(containsElement(ourAssets, o.assetPair.priceAsset))
268273 else false)
269274 then !(containsElement(ourAssets, o.assetPair.amountAsset))
270275 else false
271276 case t: MassTransferTransaction|TransferTransaction =>
272- if (if (isValidAdmin)
277+ if (if (if (isValidAdmin)
273278 then isValidGuarantors
274279 else false)
275280 then !(containsElement(portfolio, t.assetId))
281+ else false)
282+ then !(containsElement(portfolio, t.feeAssetId))
276283 else false
277284 case _: SetScriptTransaction|DataTransaction =>
278- isValidAdmin
285+ if (isValidAdmin)
286+ then isValidGuarantors
287+ else false
279288 case _ =>
280289 false
281290 }
282291 }
283292

github/deemru/w8io/3ef1775 
99.18 ms