2021.07.01 16:45 [2659384] smart account 3P3b9ZcfQmAyE9MVoRKE5tfRJSHR4BDXMEo > SELF 0.00000000 Waves

{ "type": 13, "id": "Cy9Br4gLV2evuvAXzsAdyyXX79bGmJYwUFsKYWyCQ5L2", "fee": 1400000, "feeAssetId": null, "timestamp": 1625146342200, "version": 1, "sender": "3P3b9ZcfQmAyE9MVoRKE5tfRJSHR4BDXMEo", "senderPublicKey": "BvoMQVENxUeFiSzGs66VPKRbddcurTqSSuQhBEKHmXiv", "proofs": [ "3v9uk656daKtEHpEWqYoCFo1p4DhD4fL99Xa4EfgGXJT95pF9EGH3iHNaSGTbMNGH52tniwkYWnkvkUda5UeWmCa", "65K8GwSZEni7zSEwYaj7tKsSRHy1zjzKwcVS93yWiGgp6mQ7PvJeXNzbKG5iDxNRcDi2u15t1vLutp6PPS5RVetg" ], "script": "base64:AAIEAAAAAAAAACQIAhIDCgEEEgMKAQQSAwoBARIDCgEBEgQKAggBEgASABIAEgAAAABrAQAAAAJTRQAAAAIAAAABawAAAAF2CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAFrBQAAAAF2AQAAAAJJRQAAAAIAAAABawAAAAF2CQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAABawUAAAABdgEAAAACU1QAAAADAAAAAWEAAAADYW10AAAAAXQJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAAWEFAAAAA2FtdAUAAAABdAAAAAAEdGVuNgAAAAAAAA9CQAAAAAAEdGVuOAAAAAAABfXhAAAAAAADTUFYAH//////////AAAAABFjb25maWdQcm92aWRlcktleQIAAAAOY29uZmlnUHJvdmlkZXIAAAAADmNvbmZpZ1Byb3ZpZGVyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAEWNvbmZpZ1Byb3ZpZGVyS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAAXMFAAAABHRoaXMBAAAABmxvY2FsSQAAAAIAAAABawAAAAFlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAABawUAAAABZQEAAAAGbG9jYWxTAAAAAgAAAAFrAAAAAWUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAFrBQAAAAFlAQAAAAVjb25mSQAAAAIAAAABawAAAAFlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOY29uZmlnUHJvdmlkZXIFAAAAAWsFAAAAAWUBAAAABWNvbmZTAAAAAgAAAAFrAAAAAWUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA5jb25maWdQcm92aWRlcgUAAAABawUAAAABZQAAAAAFQlVMTEsCAAAABkJVTExJZAAAAAAFQkVBUksCAAAABkJFQVJJZAAAAAAFVVNETksCAAAAC21haW5Ub2tlbklkAAAAAAhCVUxMQ09MSwIAAAAOYnVsbENvbGxhdGVyYWwAAAAACEJFQVJDT0xLAgAAAA5iZWFyQ29sbGF0ZXJhbAAAAAAJQlVMTENJUkNLAgAAAA9idWxsQ2lyY3VsYXRpb24AAAAACUJFQVJDSVJDSwIAAAAPYmVhckNpcmN1bGF0aW9uAAAAAAhJU1NQRVJDSwIAAAAPaXNzdWVQZXJjZW50aWxlAAAAAAhSRURQRVJDSwIAAAAQcmVkZWVtUGVyY2VudGlsZQAAAAAHTUlOSVNTSwIAAAAIbWluSXNzdWUAAAAAB01JTlJFREsCAAAACW1pblJlZGVlbQAAAAAITUlOUE9PTEsCAAAAB21pblBvb2wAAAAAB0ZFRUFDQ0sCAAAAD2ZlZXNBY2N1bXVsYXRlZAAAAAAGV0xJU1RLAgAAAA5pc3N1ZVdoaXRlTGlzdAAAAAAIUkVCUEVSQ0sCAAAAE3JlYmFsYW5jZVBlcmNlbnRpbGUAAAAAB1JFQklEWEsCAAAAFWxhc3RTZXR0bGVtZW50UHJpY2VJZAAAAAAFSEVBREsCAAAAC2hlYWRQb2ludGVyAAAAAAVUQUlMSwIAAAALdGFpbFBvaW50ZXIAAAAABlFTSVpFSwIAAAAJcXVldWVTaXplAAAAAAlQT09MVVNETksCAAAAEnBvb2xNYWluVG9rZW5WYWx1ZQAAAAAHUE9PTFVQSwIAAAAGcG9vbFVwAAAAAAhQT09MRFdOSwIAAAAHcG9vbER3bgAAAAAJUE9PTENJUkNLAgAAABRwb29sVG9rZW5DaXJjdWxhdGlvbgAAAAAFUE9PTEsCAAAACXBvb2xUb2tlbgAAAAAIQVNTTkFNRUsCAAAADWRlZm9Bc3NldE5hbWUAAAAABExFVksCAAAACGxldmVyYWdlAAAAAAlXQVZFU0ZFRUsCAAAAEXdhdmVzUGFjZW1ha2VyRmVlAAAAAAhVU0RORkVFSwIAAAAQdXNkblBhY2VtYWtlckZlZQAAAAALb3JhY2xlUEtLZXkCAAAABm9yYWNsZQAAAAAMbWF4RGV2aWF0aW9uCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADmNvbmZpZ1Byb3ZpZGVyCQABLAAAAAIJAAQlAAAAAQUAAAAEdGhpcwIAAAAUX2RldmlhdGlvblBl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TENJUkNLAgAAAAVubyAxMwAAAAAQcG9vbEJ1bGxFeHBvc3VyZQkAAGsAAAADBQAAAAdidWxsQ29sBQAAAAZwb29sVXAFAAAACGJ1bGxDaXJjAAAAABBwb29sQmVhckV4cG9zdXJlCQAAawAAAAMFAAAAB2JlYXJDb2wFAAAAB3Bvb2xEd24FAAAACGJlYXJDaXJjAAAAAAlwb29sVmFsdWUJAABkAAAAAgkAAGQAAAACBQAAAAhwb29sTWFpbgUAAAAQcG9vbEJ1bGxFeHBvc3VyZQUAAAAQcG9vbEJlYXJFeHBvc3VyZQAAAAAGb3JhY2xlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAC29yYWNsZVBLS2V5AgAAAA5ubyBvcmFjbGVQS0tleQIAAAASYmFkIG9yYWNsZSBhZGRyZXNzAAAAAA1jbG9zZUludGVydmFsCQEAAAAFY29uZkkAAAACAgAAAA1jbG9zZUludGVydmFsAgAAAAVubyBDSQAAAAARc2V0dGxlZFByaWNlSW5kZXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAdSRUJJRFhLAgAAABdubyBsYXN0IHJlYmFsYW5jZSBwcmljZQAAAAAQb3JhY2xlUHJpY2VJbmRleAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABm9yYWNsZQkBAAAAEWxhc3RQcmljZUluZGV4S2V5AAAAAQUAAAAJYXNzZXROYW1lCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABNiYWQgb3JhY2xlIGRhdGEgYXQgCQAEJQAAAAEFAAAABm9yYWNsZQIAAAAQOiBubyBpbnRlZ2VyIGF0IAkBAAAAEWxhc3RQcmljZUluZGV4S2V5AAAAAQUAAAAJYXNzZXROYW1lAAAAAAhsZXZlcmFnZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAARMRVZLAAAAAAAAAAADAQAAAA1oZWlnaHRCeUluZGV4AAAAAQAAAApwcmljZUluZGV4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGb3JhY2xlCQABLAAAAAIJAQAAABBwcmljZUluZGV4UHJlZml4AAAAAQUAAAAJYXNzZXROYW1lCQABpAAAAAEFAAAACnByaWNlSW5kZXgJAAEsAAAAAgIAAAARbm8gZGF0YSBhdCBpbmRleCAJAAGkAAAAAQUAAAAKcHJpY2VJbmRleAEAAAANcHJpY2VCeUhlaWdodAAAAAEAAAALcHJpY2VIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZvcmFjbGUJAAEsAAAAAgkBAAAAEXByaWNlSGVpZ2h0UHJlZml4AAAAAQUAAAAJYXNzZXROYW1lCQABpAAAAAEFAAAAC3ByaWNlSGVpZ2h0CQABLAAAAAICAAAAE25vIGRhdGEgZm9yIGhlaWdodCAJAAGkAAAAAQUAAAALcHJpY2VIZWlnaHQBAAAADHByaWNlQnlJbmRleAAAAAEAAAAKcHJpY2VJbmRleAkBAAAADXByaWNlQnlIZWlnaHQAAAABCQEAAAANaGVpZ2h0QnlJbmRleAAAAAEFAAAACnByaWNlSW5kZXgAAAAACXF1ZXVlU2l6ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAZRU0laRUsAAAAAAAAAAAAAAAAAC2hlYWRQb2ludGVyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAABUhFQURLAgAAAAAAAAAAC3RhaWxQb2ludGVyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAABVRBSUxLAgAAAAAAAAAAD2ZlZXNBY2N1bXVsYXRlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAdGRUVBQ0NLAAAAAAAAAAAAAAAAAAVJU1NVRQIAAAAFSVNTVUUAAAAABlJFREVFTQIAAAAGUkVERUVNAAAAAARQT09MAgAAAARQT09MAAAAAAZVTlBPT0wCAAAABlVOUE9PTAAAAAAKZmVlQWRkcktleQIAAAAKZmVlQWRkcmVzcwAAAAAOc3Rha2luZ0FkZHJLZXkCAAAADnN0YWtpbmdBZGRyZXNzAAAAAA9kYWVtb25QdWJLZXlLZXkCAAAAD2RhZW1vblB1YmxpY0tleQAAAAAKZmVlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAAAVjb25mUwAAAAIFAAAACmZlZUFkZHJLZXkCAAAADW5vIGZlZUFkZHJlc3MCAAAADmJhZCBmZWVBZGRyZXNzAAAAAA5zdGFraW5nQWRkcmVzcwkBAAAABWNvbmZTAAAAAgUAAAAOc3Rha2luZ0FkZHJLZXkCAAAAEW5vIHN0YWtpbmdBZGRyZXNzAAAAAA9kYWVtb25QdWJsaWNLZXkJAAJZAAAAAQkBAAAABWNvbmZTAAAAAgUAAAAPZGFlbW9uUHViS2V5S2V5AgAAABJubyBkYWVtb25QdWJsaWNLZXkAAAAACnJwZEFkZHJlc3MJAAQmAAAAAQIAAAAjM1BOaWtNNnlwNE5xY1NVOGd1eFF0bVI1b25yMkQ0ZTh5VEoAAAAABmFkbWlucwkABEwAAAACAgAAACwySEhxVjhXOURKYXlWNVI2dEJEMlNiOHNycGhwb2JvRGk3cjF0MWFQaXVtQwkABEwAAAACAgAAACw1WlhlODJSUkFTVTdxc2hYTTJKOUpOWWhxSjlHV1lqalZxMmd3VVY1TmF6OQkABEwAAAACAgAAACw1V1JYRlNqd2NUYk5mS2NKczhacVhtU1NXWXNTVkpVdE12TXFaajVoSDROYwUAAAADbmlsAAAAAANvcG4JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAGb3JhY2xlCQABLAAAAAICAAAAFiVzJXNfX2lzTWFya2V0T3BlbmVkX18FAAAACWFzc2V0TmFtZQYBAAAADGJ1aWxkTmV3SXRlbQAAAAcAAAAGYWN0aW9uAAAAA2FtdAAAAAV0b2tlbgAAAApwcmljZUluZGV4AAAAB2ludm9rZXIAAAAJbWluUGF5b3V0AAAACW1heFBheW91dAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAB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bnNldHRsZWRQcmljZUluZGV4BAAAAAZtaW5Wb2wDCQAAZgAAAAIFAAAAB2JlYXJDb2wFAAAAB2J1bGxDb2wFAAAAB2J1bGxDb2wFAAAAB2JlYXJDb2wEAAAABnJlZGlzdAkBAAAAAkxWAAAABAUAAAAGbWluVm9sBQAAAAxzZXR0bGVkUHJpY2UFAAAACW5leHRQcmljZQUAAAAIbGV2ZXJhZ2UEAAAAE3ByaWNlVXBHb29kRm9yQnVsbHMJAAAAAAAAAgUAAAAJYXNzZXROYW1lAgAAAAAEAAAAC3ByaWNlR29lc1VwCQAAZgAAAAIFAAAACW5leHRQcmljZQUAAAAMc2V0dGxlZFByaWNlBAAAAAlidWxsc0Vhcm4JAAAAAAAAAgUAAAATcHJpY2VVcEdvb2RGb3JCdWxscwUAAAALcHJpY2VHb2VzVXAEAAAACm5ld0J1bGxDb2wDBQAAAAlidWxsc0Vhcm4JAABkAAAAAgUAAAAHYnVsbENvbAUAAAAGcmVkaXN0CQAAZQAAAAIFAAAAB2J1bGxDb2wFAAAABnJlZGlzdAQAAAAKbmV3QmVhckNvbAMFAAAACWJ1bGxzRWFybgkAAGUAAAACBQAAAAdiZWFyQ29sBQAAAAZyZWRpc3QJAABkAAAAAgUAAAAHYmVhckNvbAUAAAAGcmVkaXN0BAAAAA0kdDAxODUxNzE4NzE1CQEAAAALcG9vbFN1cHBvcnQAAAAIBQAAAApuZXdCdWxsQ29sBQAAAApuZXdCZWFyQ29sBQAAAAhidWxsQ2lyYwUAAAAIYmVhckNpcmMFAAAACHBvb2xNYWluBQAAAAZwb29sVXAFAAAAB3Bvb2xEd24FAAAABm9mZnNldAQAAAAKdXBkQnVsbENvbAgFAAAADSR0MDE4NTE3MTg3MTUAAAACXzEEAAAACnVwZEJlYXJDb2wIBQAAAA0kdDAxODUxNzE4NzE1AAAAAl8yBAAAAAt1cGRCdWxsQ2lyYwgFAAAADSR0MDE4NTE3MTg3MTUAAAACXzMEAAAAC3VwZEJlYXJDaXJjCAUAAAANJHQwMTg1MTcxODcxNQAAAAJfNAQAAAALdXBkUG9vbE1haW4IBQAAAA0kdDAxODUxNzE4NzE1AAAAAl81BAAAAAl1cGRQb29sVXAIBQAAAA0kdDAxODUxNzE4NzE1AAAAAl82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", "chainId": 87, "height": 2659384, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2GFfbsczUrJXYDEUmsTSAcDy4mEmHvDtFdatrwZ3C5Gm Next: 7EangAQpHEbthevwEs1tKLP2eRShBdkXG1pCSEEFcDQH Diff:
OldNewDifferences
9494 let USDNFEEK = "usdnPacemakerFee"
9595
9696 let oraclePKKey = "oracle"
97-
98-let running = valueOrElse(getBoolean(this, "run"), true)
9997
10098 let maxDeviation = valueOrElse(getInteger(configProvider, (toString(this) + "_deviationPercentile")), 0)
10199
266264 }
267265
268266
269-func enqueue (id,action,amt,token,priceIndex,invoker,minPayout,maxPayout) = if (!(running))
270- then throw("system paused")
267+func enqueue (id,action,amt,token,priceIndex,invoker,minPayout,maxPayout) = if (!(valueOrElse(getBoolean(this, "enableEnqueue"), true)))
268+ then throw("enqueue paused")
271269 else {
272270 let increaseQueueSize = IE(QSIZEK, (queueSize + 1))
273271 let itm = buildNewItem(action, amt, token, priceIndex, invoker, minPayout, maxPayout)
325323 $Tuple7((c1 + spentPoolValue), c2, (a0 + acquiredTokens), a1, (c0 - spentPoolValue), (pu + acquiredTokens), pd)
326324 }
327325
328- let $t0927910314 = if ((curBullCol0 > curBearCol0))
326+ let $t0926910304 = if ((curBullCol0 > curBearCol0))
329327 then {
330328 let afterCloseUp = closeUp(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, curPoolMain0, curPoolUp0, curPoolDwn0)
331- let $t095059642 = afterCloseUp
332- let a = $t095059642._1
333- let b = $t095059642._2
334- let c = $t095059642._3
335- let d = $t095059642._4
336- let e = $t095059642._5
337- let f = $t095059642._6
338- let g = $t095059642._7
329+ let $t094959632 = afterCloseUp
330+ let a = $t094959632._1
331+ let b = $t094959632._2
332+ let c = $t094959632._3
333+ let d = $t094959632._4
334+ let e = $t094959632._5
335+ let f = $t094959632._6
336+ let g = $t094959632._7
339337 if ((f > 0))
340338 then afterCloseUp
341339 else if ((f == 0))
344342 }
345343 else {
346344 let afterCloseDwn = closeDwn(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, curPoolMain0, curPoolUp0, curPoolDwn0)
347- let $t0999310133 = afterCloseDwn
348- let a = $t0999310133._1
349- let b = $t0999310133._2
350- let c = $t0999310133._3
351- let d = $t0999310133._4
352- let e = $t0999310133._5
353- let f = $t0999310133._6
354- let g = $t0999310133._7
345+ let $t0998310123 = afterCloseDwn
346+ let a = $t0998310123._1
347+ let b = $t0998310123._2
348+ let c = $t0998310123._3
349+ let d = $t0998310123._4
350+ let e = $t0998310123._5
351+ let f = $t0998310123._6
352+ let g = $t0998310123._7
355353 if ((g > 0))
356354 then afterCloseDwn
357355 else if ((g == 0))
358356 then openUp(a, b, c, d, e, f, g)
359357 else throw("poolDwn < 0")
360358 }
361- let c1 = $t0927910314._1
362- let c2 = $t0927910314._2
363- let a0 = $t0927910314._3
364- let a1 = $t0927910314._4
365- let c0 = $t0927910314._5
366- let pu = $t0927910314._6
367- let pd = $t0927910314._7
359+ let c1 = $t0926910304._1
360+ let c2 = $t0926910304._2
361+ let a0 = $t0926910304._3
362+ let a1 = $t0926910304._4
363+ let c0 = $t0926910304._5
364+ let pu = $t0926910304._6
365+ let pd = $t0926910304._7
368366 let charge = fraction(userDiffAbs(), (rebalancePercentile * steps), ((1440 * 100) * 100))
369367 let c1SplitP = if ((pd > 0))
370368 then charge
377375
378376
379377 func poolSup (curBullCol0,curBearCol0,curBullCirc0,curBearCirc0) = {
380- let $t01073910924 = poolSupport(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, poolMain, poolUp, poolDwn, 0)
381- let bullCol1 = $t01073910924._1
382- let bearCol1 = $t01073910924._2
383- let bullCic1 = $t01073910924._3
384- let bearCirc1 = $t01073910924._4
385- let poolMain1 = $t01073910924._5
386- let poolUp1 = $t01073910924._6
387- let poolDwn1 = $t01073910924._7
378+ let $t01072910914 = poolSupport(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, poolMain, poolUp, poolDwn, 0)
379+ let bullCol1 = $t01072910914._1
380+ let bearCol1 = $t01072910914._2
381+ let bullCic1 = $t01072910914._3
382+ let bearCirc1 = $t01072910914._4
383+ let poolMain1 = $t01072910914._5
384+ let poolUp1 = $t01072910914._6
385+ let poolDwn1 = $t01072910914._7
388386 [IE(BULLCOLK, bullCol1), IE(BULLCIRCK, bullCic1), IE(BEARCOLK, bearCol1), IE(BEARCIRCK, bearCirc1), IE(POOLUSDNK, poolMain1), IE(POOLUPK, poolUp1), IE(POOLDWNK, poolDwn1)]
389387 }
390388
429427 else if ((token == BEAR))
430428 then fraction(bearCirc, addedCollateral, bearCol)
431429 else throw("bad token id")
432- let $t01293613009 = sp(defaultAddedTokens, maxPayout)
433- let addedToCirculation = $t01293613009._1
434- let extraTokens = $t01293613009._2
435- let $t01302613197 = if ((token == BULL))
430+ let $t01292612999 = sp(defaultAddedTokens, maxPayout)
431+ let addedToCirculation = $t01292612999._1
432+ let extraTokens = $t01292612999._2
433+ let $t01301613187 = if ((token == BULL))
436434 then $Tuple4(defaultAddedTokens, addedCollateral, 0, 0)
437435 else $Tuple4(0, 0, defaultAddedTokens, addedCollateral)
438- let plusBulls = $t01302613197._1
439- let plusBullCol = $t01302613197._2
440- let plusBears = $t01302613197._3
441- let plusBearCol = $t01302613197._4
436+ let plusBulls = $t01301613187._1
437+ let plusBullCol = $t01301613187._2
438+ let plusBears = $t01301613187._3
439+ let plusBearCol = $t01301613187._4
442440 if ((minPayout > addedToCirculation))
443441 then payback(mainToken)
444442 else (poolSup((bullCol + plusBullCol), (bearCol + plusBearCol), (bullCirc + plusBulls), (bearCirc + plusBears)) ++ [SE(HEADK, next), collectFee(feeSize), decreaseQueueSize, ST(invoker, addedToCirculation, fromBase58String(token)), ST(feeAddress, extraTokens, fromBase58String(token))])
453451 else throw("bad token id")
454452 let feeSize = fraction(estimatedPayout, redeemPercentile, 10000)
455453 let defaultPayout = (estimatedPayout - feeSize)
456- let $t01426414318 = sp(defaultPayout, maxPayout)
457- let userPayout = $t01426414318._1
458- let extra = $t01426414318._2
459- let $t01433514500 = if ((token == BULL))
454+ let $t01425414308 = sp(defaultPayout, maxPayout)
455+ let userPayout = $t01425414308._1
456+ let extra = $t01425414308._2
457+ let $t01432514490 = if ((token == BULL))
460458 then $Tuple4(removedTokens, estimatedPayout, 0, 0)
461459 else $Tuple4(0, 0, removedTokens, estimatedPayout)
462- let minusBulls = $t01433514500._1
463- let minusBullCol = $t01433514500._2
464- let minusBears = $t01433514500._3
465- let minusBearCol = $t01433514500._4
460+ let minusBulls = $t01432514490._1
461+ let minusBullCol = $t01432514490._2
462+ let minusBears = $t01432514490._3
463+ let minusBearCol = $t01432514490._4
466464 if ((minPayout > userPayout))
467465 then payback(token)
468466 else (poolSup((bullCol - minusBullCol), (bearCol - minusBearCol), (bullCirc - minusBulls), (bearCirc - minusBears)) ++ [SE(HEADK, next), collectFee(feeSize), decreaseQueueSize, ST(invoker, userPayout, fromBase58String(mainToken)), ST(feeAddress, extra, fromBase58String(mainToken))])
496494 }
497495
498496
499-func rebalance (offset) = if (!(running))
500- then throw("system paused")
497+func rebalance (offset) = if (!(valueOrElse(getBoolean(this, "enableRebalance"), true)))
498+ then throw("rebalance paused")
501499 else if ((offset == 0))
502500 then throw("[OK] offset=0")
503501 else {
543541 let newBearCol = if (bullsEarn)
544542 then (bearCol - redist)
545543 else (bearCol + redist)
546- let $t01847918677 = poolSupport(newBullCol, newBearCol, bullCirc, bearCirc, poolMain, poolUp, poolDwn, offset)
547- let updBullCol = $t01847918677._1
548- let updBearCol = $t01847918677._2
549- let updBullCirc = $t01847918677._3
550- let updBearCirc = $t01847918677._4
551- let updPoolMain = $t01847918677._5
552- let updPoolUp = $t01847918677._6
553- let updPoolDwn = $t01847918677._7
544+ let $t01851718715 = poolSupport(newBullCol, newBearCol, bullCirc, bearCirc, poolMain, poolUp, poolDwn, offset)
545+ let updBullCol = $t01851718715._1
546+ let updBearCol = $t01851718715._2
547+ let updBullCirc = $t01851718715._3
548+ let updBearCirc = $t01851718715._4
549+ let updPoolMain = $t01851718715._5
550+ let updPoolUp = $t01851718715._6
551+ let updPoolDwn = $t01851718715._7
554552 [IE(BULLCOLK, updBullCol), IE(BEARCOLK, updBearCol), IE(BULLCIRCK, updBullCirc), IE(BEARCIRCK, updBearCirc), IE(POOLUSDNK, updPoolMain), IE(POOLUPK, updPoolUp), IE(POOLDWNK, updPoolDwn), IE(REBIDXK, unsettledPriceIndex)]
555553 }
556554 }
562560
563561
564562 @Callable(i)
565-func run (arg) = if ((i.caller != feeAddress))
563+func enableEnqueue (arg) = if ((i.caller != feeAddress))
566564 then throw("only admin can")
567- else [BooleanEntry("run", arg)]
565+ else [BooleanEntry("enableEnqueue", arg)]
566+
567+
568+
569+@Callable(i)
570+func enableRebalance (arg) = if ((i.caller != feeAddress))
571+ then throw("only admin can")
572+ else [BooleanEntry("enableRebalance", arg)]
568573
569574
570575
585590 else false)
586591 then throw("bad token req")
587592 else {
588- let $t01996120100 = if ((tokenId == BULL))
593+ let $t02278722926 = if ((tokenId == BULL))
589594 then $Tuple2(bullCol, bullCirc)
590595 else if ((tokenId == BEAR))
591596 then $Tuple2(bearCol, bearCirc)
592597 else throw("bad token req")
593- let col = $t01996120100._1
594- let circ = $t01996120100._2
598+ let col = $t02278722926._1
599+ let circ = $t02278722926._2
595600 let est = fraction(amt, col, circ)
596- let $t02014820242 = if ((minPayout == 0))
601+ let $t02297423068 = if ((minPayout == 0))
597602 then $Tuple2(0, MAX)
598603 else $Tuple2(minPayout, calcMax(minPayout, est))
599- let minP = $t02014820242._1
600- let maxP = $t02014820242._2
604+ let minP = $t02297423068._1
605+ let maxP = $t02297423068._2
601606 if ((inv.caller == this))
602607 then throw("can't do")
603608 else {
626631 then throw("bad token att")
627632 else {
628633 let amt = inv.payments[0].amount
629- let $t02121121392 = if ((tokenId == BULL))
634+ let $t02403724218 = if ((tokenId == BULL))
630635 then $Tuple2(bullCol, bullCirc)
631636 else if ((tokenId == BEAR))
632637 then $Tuple2(bearCol, bearCirc)
633638 else throw("bad token req")
634- let col = $t02121121392._1
635- let circ = $t02121121392._2
639+ let col = $t02403724218._1
640+ let circ = $t02403724218._2
636641 let est = fraction(amt, circ, col)
637- let $t02143421528 = if ((minPayout == 0))
642+ let $t02426024354 = if ((minPayout == 0))
638643 then $Tuple2(0, MAX)
639644 else $Tuple2(minPayout, calcMax(minPayout, est))
640- let minP = $t02143421528._1
641- let maxP = $t02143421528._2
645+ let minP = $t02426024354._1
646+ let maxP = $t02426024354._2
642647 if ((minIssue > amt))
643648 then throw((("Attached payment too small. Min required: " + toString((minIssue / 1000000))) + " USDN"))
644649 else {
733738 then true
734739 else hasDeviation((settledPriceIndex + shift)))
735740
736- let $t02492525024 = {
737- let $list2496925024 = [1, 2, 3, 4, 5, 6, 7]
738- let $size2496925024 = size($list2496925024)
739- let $acc02496925024 = $Tuple2(settledPriceIndex, false)
740- if (($size2496925024 == 0))
741- then $acc02496925024
741+ let $t02775127850 = {
742+ let $list2779527850 = [1, 2, 3, 4, 5, 6, 7]
743+ let $size2779527850 = size($list2779527850)
744+ let $acc02779527850 = $Tuple2(settledPriceIndex, false)
745+ if (($size2779527850 == 0))
746+ then $acc02779527850
742747 else {
743- let $acc12496925024 = f($acc02496925024, $list2496925024[0])
744- if (($size2496925024 == 1))
745- then $acc12496925024
748+ let $acc12779527850 = f($acc02779527850, $list2779527850[0])
749+ if (($size2779527850 == 1))
750+ then $acc12779527850
746751 else {
747- let $acc22496925024 = f($acc12496925024, $list2496925024[1])
748- if (($size2496925024 == 2))
749- then $acc22496925024
752+ let $acc22779527850 = f($acc12779527850, $list2779527850[1])
753+ if (($size2779527850 == 2))
754+ then $acc22779527850
750755 else {
751- let $acc32496925024 = f($acc22496925024, $list2496925024[2])
752- if (($size2496925024 == 3))
753- then $acc32496925024
756+ let $acc32779527850 = f($acc22779527850, $list2779527850[2])
757+ if (($size2779527850 == 3))
758+ then $acc32779527850
754759 else {
755- let $acc42496925024 = f($acc32496925024, $list2496925024[3])
756- if (($size2496925024 == 4))
757- then $acc42496925024
760+ let $acc42779527850 = f($acc32779527850, $list2779527850[3])
761+ if (($size2779527850 == 4))
762+ then $acc42779527850
758763 else {
759- let $acc52496925024 = f($acc42496925024, $list2496925024[4])
760- if (($size2496925024 == 5))
761- then $acc52496925024
764+ let $acc52779527850 = f($acc42779527850, $list2779527850[4])
765+ if (($size2779527850 == 5))
766+ then $acc52779527850
762767 else {
763- let $acc62496925024 = f($acc52496925024, $list2496925024[5])
764- if (($size2496925024 == 6))
765- then $acc62496925024
768+ let $acc62779527850 = f($acc52779527850, $list2779527850[5])
769+ if (($size2779527850 == 6))
770+ then $acc62779527850
766771 else {
767- let $acc72496925024 = f($acc62496925024, $list2496925024[6])
768- if (($size2496925024 == 7))
769- then $acc72496925024
772+ let $acc72779527850 = f($acc62779527850, $list2779527850[6])
773+ if (($size2779527850 == 7))
774+ then $acc72779527850
770775 else {
771- let $acc82496925024 = f($acc72496925024, $list2496925024[7])
776+ let $acc82779527850 = f($acc72779527850, $list2779527850[7])
772777 throw("List size exceed 7")
773778 }
774779 }
779784 }
780785 }
781786 }
782- let okShift = $t02492525024._1
783- let forcedByDeviationOrTimeout = $t02492525024._2
787+ let okShift = $t02775127850._1
788+ let forcedByDeviationOrTimeout = $t02775127850._2
784789 let queueWaits = (oraclePriceIndex >= queuePriceIndex)
785790 if ((settledPriceIndex > queuePriceIndex))
786791 then throw("settle2: future price already settled/rebalanced")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func SE (k,v) = StringEntry(k, v)
55
66
77 func IE (k,v) = IntegerEntry(k, v)
88
99
1010 func ST (a,amt,t) = ScriptTransfer(a, amt, t)
1111
1212
1313 let ten6 = 1000000
1414
1515 let ten8 = 100000000
1616
1717 let MAX = 9223372036854775807
1818
1919 let configProviderKey = "configProvider"
2020
2121 let configProvider = match getString(this, configProviderKey) {
2222 case s: String =>
2323 addressFromStringValue(s)
2424 case _ =>
2525 this
2626 }
2727
2828 func localI (k,e) = valueOrErrorMessage(getInteger(this, k), e)
2929
3030
3131 func localS (k,e) = valueOrErrorMessage(getString(this, k), e)
3232
3333
3434 func confI (k,e) = valueOrErrorMessage(getInteger(configProvider, k), e)
3535
3636
3737 func confS (k,e) = valueOrErrorMessage(getString(configProvider, k), e)
3838
3939
4040 let BULLK = "BULLId"
4141
4242 let BEARK = "BEARId"
4343
4444 let USDNK = "mainTokenId"
4545
4646 let BULLCOLK = "bullCollateral"
4747
4848 let BEARCOLK = "bearCollateral"
4949
5050 let BULLCIRCK = "bullCirculation"
5151
5252 let BEARCIRCK = "bearCirculation"
5353
5454 let ISSPERCK = "issuePercentile"
5555
5656 let REDPERCK = "redeemPercentile"
5757
5858 let MINISSK = "minIssue"
5959
6060 let MINREDK = "minRedeem"
6161
6262 let MINPOOLK = "minPool"
6363
6464 let FEEACCK = "feesAccumulated"
6565
6666 let WLISTK = "issueWhiteList"
6767
6868 let REBPERCK = "rebalancePercentile"
6969
7070 let REBIDXK = "lastSettlementPriceId"
7171
7272 let HEADK = "headPointer"
7373
7474 let TAILK = "tailPointer"
7575
7676 let QSIZEK = "queueSize"
7777
7878 let POOLUSDNK = "poolMainTokenValue"
7979
8080 let POOLUPK = "poolUp"
8181
8282 let POOLDWNK = "poolDwn"
8383
8484 let POOLCIRCK = "poolTokenCirculation"
8585
8686 let POOLK = "poolToken"
8787
8888 let ASSNAMEK = "defoAssetName"
8989
9090 let LEVK = "leverage"
9191
9292 let WAVESFEEK = "wavesPacemakerFee"
9393
9494 let USDNFEEK = "usdnPacemakerFee"
9595
9696 let oraclePKKey = "oracle"
97-
98-let running = valueOrElse(getBoolean(this, "run"), true)
9997
10098 let maxDeviation = valueOrElse(getInteger(configProvider, (toString(this) + "_deviationPercentile")), 0)
10199
102100 func lastPriceIndexKey (assetId) = if ((assetId == ""))
103101 then "price_index"
104102 else ("%s%s__idxCurrent__" + assetId)
105103
106104
107105 func priceIndexPrefix (assetId) = if ((assetId == ""))
108106 then "price_index_"
109107 else (("%s%s%d__idx2Height__" + assetId) + "__")
110108
111109
112110 func priceHeightPrefix (assetId) = if ((assetId == ""))
113111 then "price_"
114112 else (("%s%s%d__priceByHeight__" + assetId) + "__")
115113
116114
117115 let minUsdnFee = valueOrElse(getInteger(configProvider, USDNFEEK), 0)
118116
119117 let minWavesFee = valueOrElse(getInteger(configProvider, WAVESFEEK), 0)
120118
121119 let assetName = valueOrElse(getString(this, ASSNAMEK), "")
122120
123121 let bullCol = localI(BULLCOLK, "no 0")
124122
125123 let bearCol = localI(BEARCOLK, "no 1")
126124
127125 let bullCirc = localI(BULLCIRCK, "no 2")
128126
129127 let bearCirc = localI(BEARCIRCK, "no 3")
130128
131129 let BULL = localS(BULLK, "no 14")
132130
133131 let BEAR = localS(BEARK, "no 15")
134132
135133 let mainToken = localS(USDNK, "no 16")
136134
137135 let issuePercentile = confI(ISSPERCK, "no 4")
138136
139137 let redeemPercentile = confI(REDPERCK, "no 5")
140138
141139 let minIssue = confI(MINISSK, "no 6")
142140
143141 let minRedeem = confI(MINREDK, "no 7")
144142
145143 let minPool = confI(MINPOOLK, "no 8")
146144
147145 let rebalancePercentile = valueOrElse(getInteger(configProvider, ((toString(this) + "_") + REBPERCK)), 0)
148146
149147 let whitelist = confS(WLISTK, "no 9")
150148
151149 func allowed (a) = if ((whitelist == ""))
152150 then true
153151 else isDefined(indexOf(whitelist, toString(a)))
154152
155153
156154 let poolMain = localI(POOLUSDNK, "no")
157155
158156 let poolUp = localI(POOLUPK, "no 10")
159157
160158 let poolDwn = localI(POOLDWNK, "no 11")
161159
162160 let poolToken = localS(POOLK, "no 12")
163161
164162 let poolTokenCirculation = localI(POOLCIRCK, "no 13")
165163
166164 let poolBullExposure = fraction(bullCol, poolUp, bullCirc)
167165
168166 let poolBearExposure = fraction(bearCol, poolDwn, bearCirc)
169167
170168 let poolValue = ((poolMain + poolBullExposure) + poolBearExposure)
171169
172170 let oracle = valueOrErrorMessage(addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, oraclePKKey), "no oraclePKKey"))), "bad oracle address")
173171
174172 let closeInterval = confI("closeInterval", "no CI")
175173
176174 let settledPriceIndex = valueOrErrorMessage(getInteger(this, REBIDXK), "no last rebalance price")
177175
178176 let oraclePriceIndex = valueOrErrorMessage(getInteger(oracle, lastPriceIndexKey(assetName)), ((("bad oracle data at " + toString(oracle)) + ": no integer at ") + lastPriceIndexKey(assetName)))
179177
180178 let leverage = valueOrElse(getInteger(this, LEVK), 3)
181179
182180 func heightByIndex (priceIndex) = valueOrErrorMessage(getInteger(oracle, (priceIndexPrefix(assetName) + toString(priceIndex))), ("no data at index " + toString(priceIndex)))
183181
184182
185183 func priceByHeight (priceHeight) = valueOrErrorMessage(getInteger(oracle, (priceHeightPrefix(assetName) + toString(priceHeight))), ("no data for height " + toString(priceHeight)))
186184
187185
188186 func priceByIndex (priceIndex) = priceByHeight(heightByIndex(priceIndex))
189187
190188
191189 let queueSize = valueOrElse(getInteger(this, QSIZEK), 0)
192190
193191 let headPointer = valueOrElse(getString(this, HEADK), "")
194192
195193 let tailPointer = valueOrElse(getString(this, TAILK), "")
196194
197195 let feesAccumulated = valueOrElse(getInteger(this, FEEACCK), 0)
198196
199197 let ISSUE = "ISSUE"
200198
201199 let REDEEM = "REDEEM"
202200
203201 let POOL = "POOL"
204202
205203 let UNPOOL = "UNPOOL"
206204
207205 let feeAddrKey = "feeAddress"
208206
209207 let stakingAddrKey = "stakingAddress"
210208
211209 let daemonPubKeyKey = "daemonPublicKey"
212210
213211 let feeAddress = valueOrErrorMessage(addressFromString(confS(feeAddrKey, "no feeAddress")), "bad feeAddress")
214212
215213 let stakingAddress = confS(stakingAddrKey, "no stakingAddress")
216214
217215 let daemonPublicKey = fromBase58String(confS(daemonPubKeyKey, "no daemonPublicKey"))
218216
219217 let rpdAddress = addressFromString("3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ")
220218
221219 let admins = ["2HHqV8W9DJayV5R6tBD2Sb8srphpoboDi7r1t1aPiumC", "5ZXe82RRASU7qshXM2J9JNYhqJ9GWYjjVq2gwUV5Naz9", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
222220
223221 let opn = valueOrElse(getBoolean(oracle, ("%s%s__isMarketOpened__" + assetName)), true)
224222
225223 func buildNewItem (action,amt,token,priceIndex,invoker,minPayout,maxPayout) = (((((((((((((action + "|") + toString(amt)) + "|") + token) + "|") + toString(priceIndex)) + "|") + invoker) + "|") + toString(minPayout)) + "|") + toString(maxPayout)) + "|")
226224
227225
228226 func diffAbs (a1,a2) = {
229227 let diff = (a1 - a2)
230228 if ((diff > 0))
231229 then diff
232230 else (0 - diff)
233231 }
234232
235233
236234 func userDiffAbs () = diffAbs((bullCol - poolBullExposure), (bearCol - poolBearExposure))
237235
238236
239237 func maxIssue (tokenId) = {
240238 let poolInvestment = if ((poolUp > 0))
241239 then BULL
242240 else BEAR
243241 if ((tokenId != poolInvestment))
244242 then poolMain
245243 else (userDiffAbs() + poolValue)
246244 }
247245
248246
249247 func validatePMFee (i,minPayout) = if ((0 > minPayout))
250248 then throw("negative min payout")
251249 else {
252250 let p = i.payments[1]
253251 let ok = match p.assetId {
254252 case bv: ByteVector =>
255253 if ((toBase58String(bv) == mainToken))
256254 then (p.amount >= minUsdnFee)
257255 else false
258256 case waves: Unit =>
259257 (p.amount >= minWavesFee)
260258 case _ =>
261259 throw("Match error")
262260 }
263261 if (!(ok))
264262 then throw("incorrect pacemaker fee")
265263 else true
266264 }
267265
268266
269-func enqueue (id,action,amt,token,priceIndex,invoker,minPayout,maxPayout) = if (!(running))
270- then throw("system paused")
267+func enqueue (id,action,amt,token,priceIndex,invoker,minPayout,maxPayout) = if (!(valueOrElse(getBoolean(this, "enableEnqueue"), true)))
268+ then throw("enqueue paused")
271269 else {
272270 let increaseQueueSize = IE(QSIZEK, (queueSize + 1))
273271 let itm = buildNewItem(action, amt, token, priceIndex, invoker, minPayout, maxPayout)
274272 if ((queueSize == 0))
275273 then [SE(HEADK, id), SE(TAILK, id), SE(id, itm), increaseQueueSize]
276274 else {
277275 let prevId = localS(TAILK, "can't get tail pointer")
278276 let prevItm = localS(prevId, "can't resolve pointer")
279277 let updatedPrevItm = (prevItm + id)
280278 [SE(prevId, updatedPrevItm), SE(id, itm), SE(TAILK, id), increaseQueueSize]
281279 }
282280 }
283281
284282
285283 func poolSupport (curBullCol0,curBearCol0,curBullCirc0,curBearCirc0,curPoolMain0,curPoolUp0,curPoolDwn0,steps) = {
286284 func closeUp (c1,c2,a0,a1,c0,pu,pd) = {
287285 let diff = (c1 - c2)
288286 let exp = fraction(c1, pu, a0)
289287 let liquidatedTokens = if ((diff > exp))
290288 then pu
291289 else fraction(diff, a0, c1)
292290 let liquidatedValue = if ((diff > exp))
293291 then exp
294292 else fraction(liquidatedTokens, c1, a0)
295293 $Tuple7((c1 - liquidatedValue), c2, (a0 - liquidatedTokens), a1, (c0 + liquidatedValue), (pu - liquidatedTokens), pd)
296294 }
297295
298296 func closeDwn (c1,c2,a0,a1,c0,pu,pd) = {
299297 let diff = (c2 - c1)
300298 let exp = fraction(c2, pd, a1)
301299 let liquidatedTokens = if ((diff > exp))
302300 then pd
303301 else fraction(diff, a1, c2)
304302 let liquidatedValue = if ((diff > exp))
305303 then exp
306304 else fraction(liquidatedTokens, c2, a1)
307305 $Tuple7(c1, (c2 - liquidatedValue), a0, (a1 - liquidatedTokens), (c0 + liquidatedValue), pu, (pd - liquidatedTokens))
308306 }
309307
310308 func openDwn (c1,c2,a0,a1,c0,pu,pd) = {
311309 let diff = (c1 - c2)
312310 let spentPoolValue = if ((c0 > diff))
313311 then diff
314312 else c0
315313 let acquiredTokens = fraction(spentPoolValue, a1, c2)
316314 $Tuple7(c1, (c2 + spentPoolValue), a0, (a1 + acquiredTokens), (c0 - spentPoolValue), pu, (pd + acquiredTokens))
317315 }
318316
319317 func openUp (c1,c2,a0,a1,c0,pu,pd) = {
320318 let diff = (c2 - c1)
321319 let spentPoolValue = if ((c0 > diff))
322320 then diff
323321 else c0
324322 let acquiredTokens = fraction(spentPoolValue, a0, c1)
325323 $Tuple7((c1 + spentPoolValue), c2, (a0 + acquiredTokens), a1, (c0 - spentPoolValue), (pu + acquiredTokens), pd)
326324 }
327325
328- let $t0927910314 = if ((curBullCol0 > curBearCol0))
326+ let $t0926910304 = if ((curBullCol0 > curBearCol0))
329327 then {
330328 let afterCloseUp = closeUp(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, curPoolMain0, curPoolUp0, curPoolDwn0)
331- let $t095059642 = afterCloseUp
332- let a = $t095059642._1
333- let b = $t095059642._2
334- let c = $t095059642._3
335- let d = $t095059642._4
336- let e = $t095059642._5
337- let f = $t095059642._6
338- let g = $t095059642._7
329+ let $t094959632 = afterCloseUp
330+ let a = $t094959632._1
331+ let b = $t094959632._2
332+ let c = $t094959632._3
333+ let d = $t094959632._4
334+ let e = $t094959632._5
335+ let f = $t094959632._6
336+ let g = $t094959632._7
339337 if ((f > 0))
340338 then afterCloseUp
341339 else if ((f == 0))
342340 then openDwn(a, b, c, d, e, f, g)
343341 else throw("poolUp < 0")
344342 }
345343 else {
346344 let afterCloseDwn = closeDwn(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, curPoolMain0, curPoolUp0, curPoolDwn0)
347- let $t0999310133 = afterCloseDwn
348- let a = $t0999310133._1
349- let b = $t0999310133._2
350- let c = $t0999310133._3
351- let d = $t0999310133._4
352- let e = $t0999310133._5
353- let f = $t0999310133._6
354- let g = $t0999310133._7
345+ let $t0998310123 = afterCloseDwn
346+ let a = $t0998310123._1
347+ let b = $t0998310123._2
348+ let c = $t0998310123._3
349+ let d = $t0998310123._4
350+ let e = $t0998310123._5
351+ let f = $t0998310123._6
352+ let g = $t0998310123._7
355353 if ((g > 0))
356354 then afterCloseDwn
357355 else if ((g == 0))
358356 then openUp(a, b, c, d, e, f, g)
359357 else throw("poolDwn < 0")
360358 }
361- let c1 = $t0927910314._1
362- let c2 = $t0927910314._2
363- let a0 = $t0927910314._3
364- let a1 = $t0927910314._4
365- let c0 = $t0927910314._5
366- let pu = $t0927910314._6
367- let pd = $t0927910314._7
359+ let c1 = $t0926910304._1
360+ let c2 = $t0926910304._2
361+ let a0 = $t0926910304._3
362+ let a1 = $t0926910304._4
363+ let c0 = $t0926910304._5
364+ let pu = $t0926910304._6
365+ let pd = $t0926910304._7
368366 let charge = fraction(userDiffAbs(), (rebalancePercentile * steps), ((1440 * 100) * 100))
369367 let c1SplitP = if ((pd > 0))
370368 then charge
371369 else 0
372370 let c2SplitP = if ((pu > 0))
373371 then charge
374372 else 0
375373 $Tuple7((c1 - c1SplitP), (c2 - c2SplitP), a0, a1, ((c0 + c1SplitP) + c2SplitP), pu, pd)
376374 }
377375
378376
379377 func poolSup (curBullCol0,curBearCol0,curBullCirc0,curBearCirc0) = {
380- let $t01073910924 = poolSupport(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, poolMain, poolUp, poolDwn, 0)
381- let bullCol1 = $t01073910924._1
382- let bearCol1 = $t01073910924._2
383- let bullCic1 = $t01073910924._3
384- let bearCirc1 = $t01073910924._4
385- let poolMain1 = $t01073910924._5
386- let poolUp1 = $t01073910924._6
387- let poolDwn1 = $t01073910924._7
378+ let $t01072910914 = poolSupport(curBullCol0, curBearCol0, curBullCirc0, curBearCirc0, poolMain, poolUp, poolDwn, 0)
379+ let bullCol1 = $t01072910914._1
380+ let bearCol1 = $t01072910914._2
381+ let bullCic1 = $t01072910914._3
382+ let bearCirc1 = $t01072910914._4
383+ let poolMain1 = $t01072910914._5
384+ let poolUp1 = $t01072910914._6
385+ let poolDwn1 = $t01072910914._7
388386 [IE(BULLCOLK, bullCol1), IE(BULLCIRCK, bullCic1), IE(BEARCOLK, bearCol1), IE(BEARCIRCK, bearCirc1), IE(POOLUSDNK, poolMain1), IE(POOLUPK, poolUp1), IE(POOLDWNK, poolDwn1)]
389387 }
390388
391389
392390 func dequeue () = {
393391 func sp (a,mx) = if ((mx >= a))
394392 then $Tuple2(a, 0)
395393 else $Tuple2(mx, (a - mx))
396394
397395 if ((queueSize == 0))
398396 then throw("nothing to settle")
399397 else {
400398 func collectFee (fees) = IE(FEEACCK, (feesAccumulated + fees))
401399
402400 let decreaseQueueSize = IE(QSIZEK, (queueSize - 1))
403401 let isLastElement = (headPointer == tailPointer)
404402 let overwriteTail = SE(TAILK, "")
405403 let dataStr = localS(headPointer, "bad head pointer(dequeue)")
406404 let data = split(dataStr, "|")
407405 let action = data[0]
408406 let amt = parseIntValue(data[1])
409407 let token = data[2]
410408 let priceIndex = parseIntValue(data[3])
411409 let invoker = addressFromStringValue(data[4])
412410 let minPayout = if ((8 > size(data)))
413411 then 0
414412 else parseIntValue(data[5])
415413 let maxPayout = if ((8 > size(data)))
416414 then MAX
417415 else parseIntValue(data[6])
418416 let next = data[(size(data) - 1)]
419417 func payback (tkn) = [SE(HEADK, next), decreaseQueueSize, ST(invoker, amt, fromBase58String(tkn))]
420418
421419 let items = if ((settledPriceIndex != priceIndex))
422420 then throw(((("corrupt state, settledPriceIndex=" + toString(settledPriceIndex)) + ", request price id=") + toString(priceIndex)))
423421 else if ((action == ISSUE))
424422 then {
425423 let feeSize = fraction(amt, issuePercentile, 10000)
426424 let addedCollateral = (amt - feeSize)
427425 let defaultAddedTokens = if ((token == BULL))
428426 then fraction(bullCirc, addedCollateral, bullCol)
429427 else if ((token == BEAR))
430428 then fraction(bearCirc, addedCollateral, bearCol)
431429 else throw("bad token id")
432- let $t01293613009 = sp(defaultAddedTokens, maxPayout)
433- let addedToCirculation = $t01293613009._1
434- let extraTokens = $t01293613009._2
435- let $t01302613197 = if ((token == BULL))
430+ let $t01292612999 = sp(defaultAddedTokens, maxPayout)
431+ let addedToCirculation = $t01292612999._1
432+ let extraTokens = $t01292612999._2
433+ let $t01301613187 = if ((token == BULL))
436434 then $Tuple4(defaultAddedTokens, addedCollateral, 0, 0)
437435 else $Tuple4(0, 0, defaultAddedTokens, addedCollateral)
438- let plusBulls = $t01302613197._1
439- let plusBullCol = $t01302613197._2
440- let plusBears = $t01302613197._3
441- let plusBearCol = $t01302613197._4
436+ let plusBulls = $t01301613187._1
437+ let plusBullCol = $t01301613187._2
438+ let plusBears = $t01301613187._3
439+ let plusBearCol = $t01301613187._4
442440 if ((minPayout > addedToCirculation))
443441 then payback(mainToken)
444442 else (poolSup((bullCol + plusBullCol), (bearCol + plusBearCol), (bullCirc + plusBulls), (bearCirc + plusBears)) ++ [SE(HEADK, next), collectFee(feeSize), decreaseQueueSize, ST(invoker, addedToCirculation, fromBase58String(token)), ST(feeAddress, extraTokens, fromBase58String(token))])
445443 }
446444 else if ((action == REDEEM))
447445 then {
448446 let removedTokens = amt
449447 let estimatedPayout = if ((token == BULL))
450448 then fraction(bullCol, removedTokens, bullCirc)
451449 else if ((token == BEAR))
452450 then fraction(bearCol, removedTokens, bearCirc)
453451 else throw("bad token id")
454452 let feeSize = fraction(estimatedPayout, redeemPercentile, 10000)
455453 let defaultPayout = (estimatedPayout - feeSize)
456- let $t01426414318 = sp(defaultPayout, maxPayout)
457- let userPayout = $t01426414318._1
458- let extra = $t01426414318._2
459- let $t01433514500 = if ((token == BULL))
454+ let $t01425414308 = sp(defaultPayout, maxPayout)
455+ let userPayout = $t01425414308._1
456+ let extra = $t01425414308._2
457+ let $t01432514490 = if ((token == BULL))
460458 then $Tuple4(removedTokens, estimatedPayout, 0, 0)
461459 else $Tuple4(0, 0, removedTokens, estimatedPayout)
462- let minusBulls = $t01433514500._1
463- let minusBullCol = $t01433514500._2
464- let minusBears = $t01433514500._3
465- let minusBearCol = $t01433514500._4
460+ let minusBulls = $t01432514490._1
461+ let minusBullCol = $t01432514490._2
462+ let minusBears = $t01432514490._3
463+ let minusBearCol = $t01432514490._4
466464 if ((minPayout > userPayout))
467465 then payback(token)
468466 else (poolSup((bullCol - minusBullCol), (bearCol - minusBearCol), (bullCirc - minusBulls), (bearCirc - minusBears)) ++ [SE(HEADK, next), collectFee(feeSize), decreaseQueueSize, ST(invoker, userPayout, fromBase58String(mainToken)), ST(feeAddress, extra, fromBase58String(mainToken))])
469467 }
470468 else if ((action == POOL))
471469 then {
472470 let issueTokens = fraction(poolTokenCirculation, amt, poolValue)
473471 if ((minPayout > issueTokens))
474472 then payback(mainToken)
475473 else [IE(POOLUSDNK, (poolMain + amt)), IE(POOLCIRCK, (poolTokenCirculation + issueTokens)), SE(HEADK, next), decreaseQueueSize, ST(invoker, issueTokens, fromBase58String(poolToken))]
476474 }
477475 else if ((action == UNPOOL))
478476 then {
479477 func share (a) = fraction(a, amt, poolTokenCirculation)
480478
481479 let unpooledMain = share(poolMain)
482480 let unpooledUp = share(poolUp)
483481 let unpooledDwn = share(poolDwn)
484482 let unpooledUpValue = fraction(unpooledUp, bullCol, bullCirc)
485483 let unpooledDwnValue = fraction(unpooledDwn, bearCol, bearCirc)
486484 let totalUnpooledValue = ((unpooledMain + unpooledUpValue) + unpooledDwnValue)
487485 if ((minPayout > totalUnpooledValue))
488486 then payback(poolToken)
489487 else [IE(POOLUSDNK, (poolMain - unpooledMain)), IE(POOLCIRCK, (poolTokenCirculation - amt)), IE(POOLUPK, (poolUp - unpooledUp)), IE(POOLDWNK, (poolDwn - unpooledDwn)), IE(BULLCIRCK, (bullCirc - unpooledUp)), IE(BEARCIRCK, (bearCirc - unpooledDwn)), IE(BULLCOLK, (bullCol - unpooledUpValue)), IE(BEARCOLK, (bearCol - unpooledDwnValue)), SE(HEADK, next), decreaseQueueSize, ST(invoker, totalUnpooledValue, fromBase58String(mainToken))]
490488 }
491489 else throw(("bad action: " + action))
492490 if (isLastElement)
493491 then overwriteTail :: items
494492 else items
495493 }
496494 }
497495
498496
499-func rebalance (offset) = if (!(running))
500- then throw("system paused")
497+func rebalance (offset) = if (!(valueOrElse(getBoolean(this, "enableRebalance"), true)))
498+ then throw("rebalance paused")
501499 else if ((offset == 0))
502500 then throw("[OK] offset=0")
503501 else {
504502 func LV (v,p0,p1,m) = {
505503 let denom = {
506504 let md = (((2 * (if ((p1 > p0))
507505 then p1
508506 else p0)) * m) / 3037000499)
509507 if ((10 > md))
510508 then 10
511509 else if ((100 > md))
512510 then 100
513511 else 1000
514512 }
515513 let pmax = ((if ((p1 > p0))
516514 then p1
517515 else p0) / denom)
518516 let pmin = ((if ((p0 > p1))
519517 then p1
520518 else p0) / denom)
521519 let a = (pmin * pmin)
522520 let b = ((((m * m) * pmax) * pmax) - (((((2 * m) * m) - m) * pmax) * pmin))
523521 let ma = ((m * m) - m)
524522 fraction(v, ((ma * a) + b), (((ma + 1) * a) + b))
525523 }
526524
527525 let unsettledPriceIndex = (settledPriceIndex + offset)
528526 if (!(opn))
529527 then [IE(REBIDXK, unsettledPriceIndex)]
530528 else {
531529 let settledPrice = priceByIndex(settledPriceIndex)
532530 let nextPrice = priceByIndex(unsettledPriceIndex)
533531 let minVol = if ((bearCol > bullCol))
534532 then bullCol
535533 else bearCol
536534 let redist = LV(minVol, settledPrice, nextPrice, leverage)
537535 let priceUpGoodForBulls = (assetName == "")
538536 let priceGoesUp = (nextPrice > settledPrice)
539537 let bullsEarn = (priceUpGoodForBulls == priceGoesUp)
540538 let newBullCol = if (bullsEarn)
541539 then (bullCol + redist)
542540 else (bullCol - redist)
543541 let newBearCol = if (bullsEarn)
544542 then (bearCol - redist)
545543 else (bearCol + redist)
546- let $t01847918677 = poolSupport(newBullCol, newBearCol, bullCirc, bearCirc, poolMain, poolUp, poolDwn, offset)
547- let updBullCol = $t01847918677._1
548- let updBearCol = $t01847918677._2
549- let updBullCirc = $t01847918677._3
550- let updBearCirc = $t01847918677._4
551- let updPoolMain = $t01847918677._5
552- let updPoolUp = $t01847918677._6
553- let updPoolDwn = $t01847918677._7
544+ let $t01851718715 = poolSupport(newBullCol, newBearCol, bullCirc, bearCirc, poolMain, poolUp, poolDwn, offset)
545+ let updBullCol = $t01851718715._1
546+ let updBearCol = $t01851718715._2
547+ let updBullCirc = $t01851718715._3
548+ let updBearCirc = $t01851718715._4
549+ let updPoolMain = $t01851718715._5
550+ let updPoolUp = $t01851718715._6
551+ let updPoolDwn = $t01851718715._7
554552 [IE(BULLCOLK, updBullCol), IE(BEARCOLK, updBearCol), IE(BULLCIRCK, updBullCirc), IE(BEARCIRCK, updBearCirc), IE(POOLUSDNK, updPoolMain), IE(POOLUPK, updPoolUp), IE(POOLDWNK, updPoolDwn), IE(REBIDXK, unsettledPriceIndex)]
555553 }
556554 }
557555
558556
559557 func calcMax (min,avg) = if ((min > avg))
560558 then throw(((("price too old: minPayout " + toString(min)) + " > avg = ") + toString(avg)))
561559 else ((avg + avg) - min)
562560
563561
564562 @Callable(i)
565-func run (arg) = if ((i.caller != feeAddress))
563+func enableEnqueue (arg) = if ((i.caller != feeAddress))
566564 then throw("only admin can")
567- else [BooleanEntry("run", arg)]
565+ else [BooleanEntry("enableEnqueue", arg)]
566+
567+
568+
569+@Callable(i)
570+func enableRebalance (arg) = if ((i.caller != feeAddress))
571+ then throw("only admin can")
572+ else [BooleanEntry("enableRebalance", arg)]
568573
569574
570575
571576 @Callable(i)
572577 func withdrawFee (amount) = if ((amount > feesAccumulated))
573578 then throw(("too much. available: " + toString(feesAccumulated)))
574579 else [IE(FEEACCK, (feesAccumulated - amount)), ST(feeAddress, amount, fromBase58String(mainToken))]
575580
576581
577582
578583 @Callable(inv)
579584 func requestRedeemSl (minPayout) = if (validatePMFee(inv, minPayout))
580585 then {
581586 let amt = inv.payments[0].amount
582587 let tokenId = toBase58String(valueOrErrorMessage(inv.payments[0].assetId, "bad token att"))
583588 if (if ((tokenId != BULL))
584589 then (tokenId != BEAR)
585590 else false)
586591 then throw("bad token req")
587592 else {
588- let $t01996120100 = if ((tokenId == BULL))
593+ let $t02278722926 = if ((tokenId == BULL))
589594 then $Tuple2(bullCol, bullCirc)
590595 else if ((tokenId == BEAR))
591596 then $Tuple2(bearCol, bearCirc)
592597 else throw("bad token req")
593- let col = $t01996120100._1
594- let circ = $t01996120100._2
598+ let col = $t02278722926._1
599+ let circ = $t02278722926._2
595600 let est = fraction(amt, col, circ)
596- let $t02014820242 = if ((minPayout == 0))
601+ let $t02297423068 = if ((minPayout == 0))
597602 then $Tuple2(0, MAX)
598603 else $Tuple2(minPayout, calcMax(minPayout, est))
599- let minP = $t02014820242._1
600- let maxP = $t02014820242._2
604+ let minP = $t02297423068._1
605+ let maxP = $t02297423068._2
601606 if ((inv.caller == this))
602607 then throw("can't do")
603608 else {
604609 let estimated = fraction(col, amt, circ)
605610 if ((minRedeem > estimated))
606611 then throw((("Attached payment too small. Min redeem amount is " + toString((minRedeem / 1000000))) + " USDN"))
607612 else enqueue(toBase58String(inv.transactionId), REDEEM, amt, tokenId, (oraclePriceIndex + 1), toString(inv.caller), minP, maxP)
608613 }
609614 }
610615 }
611616 else throw()
612617
613618
614619
615620 @Callable(inv)
616621 func requestIssueSl (tokenId,minPayout) = if (validatePMFee(inv, minPayout))
617622 then if (!(opn))
618623 then throw("markets closed")
619624 else if (if ((tokenId != BULL))
620625 then (tokenId != BEAR)
621626 else false)
622627 then throw("bad token req")
623628 else if (!(allowed(inv.caller)))
624629 then throw("only whitelisted can do")
625630 else if ((inv.payments[0].assetId != fromBase58String(mainToken)))
626631 then throw("bad token att")
627632 else {
628633 let amt = inv.payments[0].amount
629- let $t02121121392 = if ((tokenId == BULL))
634+ let $t02403724218 = if ((tokenId == BULL))
630635 then $Tuple2(bullCol, bullCirc)
631636 else if ((tokenId == BEAR))
632637 then $Tuple2(bearCol, bearCirc)
633638 else throw("bad token req")
634- let col = $t02121121392._1
635- let circ = $t02121121392._2
639+ let col = $t02403724218._1
640+ let circ = $t02403724218._2
636641 let est = fraction(amt, circ, col)
637- let $t02143421528 = if ((minPayout == 0))
642+ let $t02426024354 = if ((minPayout == 0))
638643 then $Tuple2(0, MAX)
639644 else $Tuple2(minPayout, calcMax(minPayout, est))
640- let minP = $t02143421528._1
641- let maxP = $t02143421528._2
645+ let minP = $t02426024354._1
646+ let maxP = $t02426024354._2
642647 if ((minIssue > amt))
643648 then throw((("Attached payment too small. Min required: " + toString((minIssue / 1000000))) + " USDN"))
644649 else {
645650 let maxAllowed = maxIssue(tokenId)
646651 if (if ((whitelist == ""))
647652 then (inv.payments[0].amount > maxAllowed)
648653 else false)
649654 then throw((("trying to issue more than pool can handle. Max attachment allowed = " + toString((maxAllowed / 1000000))) + " USDN"))
650655 else enqueue(toBase58String(inv.transactionId), ISSUE, amt, tokenId, (oraclePriceIndex + 1), toString(inv.caller), minP, maxP)
651656 }
652657 }
653658 else throw()
654659
655660
656661
657662 @Callable(inv)
658663 func requestPool () = if (!(allowed(inv.caller)))
659664 then throw("only whitelisted can do")
660665 else {
661666 let pmt = inv.payments[0]
662667 if ((pmt.assetId != fromBase58String(mainToken)))
663668 then throw("USDN required")
664669 else if ((minPool > pmt.amount))
665670 then throw(("pool min: " + toString(minPool)))
666671 else {
667672 let estimate = fraction(poolTokenCirculation, pmt.amount, poolValue)
668673 enqueue(toBase58String(inv.transactionId), POOL, inv.payments[0].amount, "", (oraclePriceIndex + 1), toString(inv.caller), 0, MAX)
669674 }
670675 }
671676
672677
673678
674679 @Callable(inv)
675680 func requestUnpool () = {
676681 let pmt = inv.payments[0]
677682 if ((pmt.assetId != fromBase58String(poolToken)))
678683 then throw("bad token att")
679684 else {
680685 let estimate = fraction(poolValue, pmt.amount, poolTokenCirculation)
681686 if ((minPool > estimate))
682687 then throw(((("unpool at least for" + toString(minPool)) + " ") + mainToken))
683688 else enqueue(toBase58String(inv.transactionId), UNPOOL, inv.payments[0].amount, "", (oraclePriceIndex + 1), toString(inv.caller), 0, MAX)
684689 }
685690 }
686691
687692
688693
689694 @Callable(inv)
690695 func settle () = {
691696 let queueEmpty = (headPointer == "")
692697 let canRebalance = (oraclePriceIndex > settledPriceIndex)
693698 if (queueEmpty)
694699 then if (canRebalance)
695700 then rebalance(1)
696701 else throw("[OK] all done, carry on")
697702 else {
698703 let data = split(valueOrErrorMessage(getString(this, headPointer), ("bad head pointer(settle): " + headPointer)), "|")
699704 let queuePriceIndex = parseIntValue(data[3])
700705 if ((queuePriceIndex > settledPriceIndex))
701706 then if (canRebalance)
702707 then rebalance(1)
703708 else throw("[OK] need to wait")
704709 else if ((queuePriceIndex == settledPriceIndex))
705710 then dequeue()
706711 else throw("future price already rebalanced")
707712 }
708713 }
709714
710715
711716
712717 @Callable(inv)
713718 func settle2 () = {
714719 let queueEmpty = (headPointer == "")
715720 let queuePriceIndex = if (queueEmpty)
716721 then MAX
717722 else {
718723 let data = split(localS(headPointer, "settle2: bad head pointer"), "|")
719724 parseIntValue(data[3])
720725 }
721726 let settledPrice = priceByIndex(settledPriceIndex)
722727 func hasDeviation (priceIndex) = {
723728 let p = priceByIndex(priceIndex)
724729 (fraction(diffAbs(settledPrice, p), 1000000, settledPrice) >= maxDeviation)
725730 }
726731
727732 let maxPossibleShift = (min([queuePriceIndex, oraclePriceIndex]) - settledPriceIndex)
728733 func f (acc,shift) = if (if (acc._2)
729734 then true
730735 else (shift > maxPossibleShift))
731736 then acc
732737 else $Tuple2(shift, if ((shift == 7))
733738 then true
734739 else hasDeviation((settledPriceIndex + shift)))
735740
736- let $t02492525024 = {
737- let $list2496925024 = [1, 2, 3, 4, 5, 6, 7]
738- let $size2496925024 = size($list2496925024)
739- let $acc02496925024 = $Tuple2(settledPriceIndex, false)
740- if (($size2496925024 == 0))
741- then $acc02496925024
741+ let $t02775127850 = {
742+ let $list2779527850 = [1, 2, 3, 4, 5, 6, 7]
743+ let $size2779527850 = size($list2779527850)
744+ let $acc02779527850 = $Tuple2(settledPriceIndex, false)
745+ if (($size2779527850 == 0))
746+ then $acc02779527850
742747 else {
743- let $acc12496925024 = f($acc02496925024, $list2496925024[0])
744- if (($size2496925024 == 1))
745- then $acc12496925024
748+ let $acc12779527850 = f($acc02779527850, $list2779527850[0])
749+ if (($size2779527850 == 1))
750+ then $acc12779527850
746751 else {
747- let $acc22496925024 = f($acc12496925024, $list2496925024[1])
748- if (($size2496925024 == 2))
749- then $acc22496925024
752+ let $acc22779527850 = f($acc12779527850, $list2779527850[1])
753+ if (($size2779527850 == 2))
754+ then $acc22779527850
750755 else {
751- let $acc32496925024 = f($acc22496925024, $list2496925024[2])
752- if (($size2496925024 == 3))
753- then $acc32496925024
756+ let $acc32779527850 = f($acc22779527850, $list2779527850[2])
757+ if (($size2779527850 == 3))
758+ then $acc32779527850
754759 else {
755- let $acc42496925024 = f($acc32496925024, $list2496925024[3])
756- if (($size2496925024 == 4))
757- then $acc42496925024
760+ let $acc42779527850 = f($acc32779527850, $list2779527850[3])
761+ if (($size2779527850 == 4))
762+ then $acc42779527850
758763 else {
759- let $acc52496925024 = f($acc42496925024, $list2496925024[4])
760- if (($size2496925024 == 5))
761- then $acc52496925024
764+ let $acc52779527850 = f($acc42779527850, $list2779527850[4])
765+ if (($size2779527850 == 5))
766+ then $acc52779527850
762767 else {
763- let $acc62496925024 = f($acc52496925024, $list2496925024[5])
764- if (($size2496925024 == 6))
765- then $acc62496925024
768+ let $acc62779527850 = f($acc52779527850, $list2779527850[5])
769+ if (($size2779527850 == 6))
770+ then $acc62779527850
766771 else {
767- let $acc72496925024 = f($acc62496925024, $list2496925024[6])
768- if (($size2496925024 == 7))
769- then $acc72496925024
772+ let $acc72779527850 = f($acc62779527850, $list2779527850[6])
773+ if (($size2779527850 == 7))
774+ then $acc72779527850
770775 else {
771- let $acc82496925024 = f($acc72496925024, $list2496925024[7])
776+ let $acc82779527850 = f($acc72779527850, $list2779527850[7])
772777 throw("List size exceed 7")
773778 }
774779 }
775780 }
776781 }
777782 }
778783 }
779784 }
780785 }
781786 }
782- let okShift = $t02492525024._1
783- let forcedByDeviationOrTimeout = $t02492525024._2
787+ let okShift = $t02775127850._1
788+ let forcedByDeviationOrTimeout = $t02775127850._2
784789 let queueWaits = (oraclePriceIndex >= queuePriceIndex)
785790 if ((settledPriceIndex > queuePriceIndex))
786791 then throw("settle2: future price already settled/rebalanced")
787792 else if ((settledPriceIndex == queuePriceIndex))
788793 then dequeue()
789794 else if (if ((okShift > 0))
790795 then if (forcedByDeviationOrTimeout)
791796 then true
792797 else queueWaits
793798 else false)
794799 then rebalance(okShift)
795800 else throw(("settle2: [OK] all done, carry on. available shift: " + toString(okShift)))
796801 }
797802
798803
799804 @Verifier(tx)
800805 func verify () = {
801806 let adminAction = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(admins[0])))
802807 then 1
803808 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(admins[1])))
804809 then 1
805810 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(admins[2])))
806811 then 1
807812 else 0)) > 1)
808813 let stakingAction = match tx {
809814 case tx: InvokeScriptTransaction =>
810815 let signedCorrectly = sigVerify(tx.bodyBytes, tx.proofs[0], daemonPublicKey)
811816 let feesCorrect = if ((tx.feeAssetId == unit))
812817 then ((1000 * 1000) >= tx.fee)
813818 else false
814819 let dappCorrect = (tx.dApp == rpdAddress)
815820 let unlock = (tx.function == "unlockNeutrino")
816821 let lock = if (if ((tx.function == "lockNeutrinoSP"))
817822 then (tx.args[0] == stakingAddress)
818823 else false)
819824 then (wavesBalance(this).available >= ten8)
820825 else false
821826 let funcCorrect = if (lock)
822827 then true
823828 else unlock
824829 if (if (if (signedCorrectly)
825830 then feesCorrect
826831 else false)
827832 then dappCorrect
828833 else false)
829834 then funcCorrect
830835 else false
831836 case _ =>
832837 false
833838 }
834839 if (adminAction)
835840 then true
836841 else stakingAction
837842 }
838843

github/deemru/w8io/786bc32 
137.42 ms