tx · 9heaPi1NThZTuxzCg1yfszA6b4YefV7GErYeH45e7MmE

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.01400000 Waves

2022.03.17 13:27 [1967815] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "9heaPi1NThZTuxzCg1yfszA6b4YefV7GErYeH45e7MmE", "fee": 1400000, "feeAssetId": null, "timestamp": 1647512843669, "version": 1, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "qfFFqpmyECtSfJQa28NYsgrTS8xjRmj2SU2QuYf2rti78v3pYxyT3UihmSxmo9eDDR6Z1jqTvFodY4xWPpd1Z9K" ], "script": "base64:AAIFAAAAAAAAFtsIAhIICgYICAEBAQgSAwoBARIDCgEBEgQKAggIEgQKAggIEgMKAQgSAwoBCBIECgIIARIDCgEIEgAaGQoBQRIUSWR4RmFjdG9yeUNmZ0Rhb0RhcHAaHwoBQhIaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAaHwoBQxIaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAaGwoBRBIWSWR4RmFjdG9yeUNmZ0JpcmRzRGFwcBoSCgFFEg1rZXlGYWN0b3J5Q2ZnGh8KAUYSGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nGg8KAUcSCmxwQXNzZXRTdHIaFQoBSBIQa2V5RmFjdG9yeUxwTGlzdBorCgFJEiZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcxoZCgFKEhRrZXlGYWN0b3J5UG9vbFdlaWdodBoUCgFLEg9jb250cmFjdEFkZHJlc3MaIAoBTBIba2V5RmFjdG9yeVBvb2xXZWlnaHRIaXN0b3J5GhAKAU0SC3Bvb2xBZGRyZXNzGggKAU4SA251bRodCgFPEhhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwaDwoBUBIKcmVhZExwTGlzdBoZCgFREhRyZWFkRmFjdG9yeUNmZ09yRmFpbBoMCgFSEgdmYWN0b3J5Gh0KAVMSGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbBoPCgFUEgpmYWN0b3J5Q2ZnGh0KAVUSGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbBocCgFWEhdnZXRTdGFraW5nQWRkcmVzc09yRmFpbBoeCgFXEhlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsGhgKAVgSE2tleU1hbmFnZXJQdWJsaWNLZXkaHwoBWRIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkaIwoBWhIea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50GggKAWESA1NFUBoICgJhQRICcGsaFAoCYUISDklkeExvY2tVc2VyTnVtGhMKAmFDEg1JZHhMb2NrQW1vdW50GhIKAmFEEgxJZHhMb2NrU3RhcnQaFQoCYUUSD0lkeExvY2tEdXJhdGlvbhoTCgJhRhINSWR4TG9ja1BhcmFtSxoTCgJhRxINSWR4TG9ja1BhcmFtQhoZCgJhSBITa2V5TG9ja1BhcmFtc1JlY29yZBoRCgJhSRILdXNlckFkZHJlc3MaIAoCYUoSGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsGh0KAmFLEhdmb3JtYXRMb2NrUGFyYW1zUmVjb3JkUxoNCgJhTBIHdXNlck51bRoMCgJhTRIGYW1vdW50GgsKAmFOEgVzdGFydBoOCgJhTxIIZHVyYXRpb24aDAoCYVASBnBhcmFtSxoMCgJhURIGcGFyYW1CGhYKAmFSEhBsYXN0VXBkVGltZXN0YW1wGg8KAmFTEglnd3hBbW91bnQaHAoCYVQSFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQaFAoCYVUSDmtleU5leHRVc2VyTnVtGhgKAmFWEhJrZXlVc2VyMk51bU1hcHBpbmcaGAoCYVcSEmtleU51bTJVc2VyTWFwcGluZxocCgJhWBIWa2V5TG9ja1BhcmFtVXNlckFtb3VudBocCgJhWRIWa2V5TG9ja1BhcmFtU3RhcnRCbG9jaxoaCgJhWhIUa2V5TG9ja1BhcmFtRHVyYXRpb24aJwoCYWESIWtleUVtaXNzaW9uUmF0ZVBlckJsb2NrTWF4Q3VycmVudBobCgJhYhIVa2V5RW1pc3Npb25TdGFydEJsb2NrGiEKAmFjEhtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MaGQoCYWQSE2tleUVtaXNzaW9uRW5kQmxvY2saEwoCYWUSDWtleU5leHRQZXJpb2QaJQoCYWYSH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQaEwoCYWcSDUlkeENmZ0Fzc2V0SWQaGQoCYWgSE0lkeENmZ01pbkxvY2tBbW91bnQaGwoCYWkSFUlkeENmZ01pbkxvY2tEdXJhdGlvbhobCgJhahIVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uGhgKAmFrEhJJZHhDZmdNYXRoQ29udHJhY3QaDwoCYWwSCWtleUNvbmZpZxobCgJhbRIVcmVhZENvbmZpZ0FycmF5T3JGYWlsGhMKAmFuEg1mb3JtYXRDb25maWdTGg0KAmFvEgdhc3NldElkGhMKAmFwEg1taW5Mb2NrQW1vdW50GhUKAmFxEg9taW5Mb2NrRHVyYXRpb24aFQoCYXISD21heExvY2tEdXJhdGlvbhoSCgJhcxIMbWF0aENvbnRyYWN0GhIKAmF0Egxmb3JtYXRDb25maWcaHAoCYXUSFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQaBwoCYXYSAXMaIwoCYXcSHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0GhEKAmF4EgttdXN0TWFuYWdlchoHCgJheRIBaRoICgJhehICcGQaCwoBYhIGU0NBTEU4GgcKAmJBEgFiGhAKAmJCEgpoaXN0b3J5S0VZGhEKAmJDEgtoaXN0b3J5REFUQRoQCgJiRBIKU3RhdHNFbnRyeRoUCgJiRRIOdG90YWxMb2NrZWRJbmMaEQoCYkYSC2R1cmF0aW9uSW5jGhIKAmJHEgxsb2NrQ291bnRJbmMaEwoCYkgSDXVzZXJzQ291bnRJbmMaIQoCYkkSG2xvY2tzRHVyYXRpb25TdW1JbkJsb2Nrc0tFWRoTCgJiShINbG9ja3NDb3VudEtFWRoTCgJiSxINdXNlcnNDb3VudEtFWRoUCgJiTBIOdG90YWxBbW91bnRLRVkaHgoCYk0SGGxvY2tzRHVyYXRpb25TdW1JbkJsb2NrcxoQCgJiThIKbG9ja3NDb3VudBoQCgJiTxIKdXNlcnNDb3VudBoRCgJiUBILdG90YWxBbW91bnQaEwoCYlESDWNhbGNHd3hBbW91bnQaCgoCYlISBGtSYXcaCgoCYlMSBGJSYXcaBwoCYlQSAWgaCwoCYlUSBVNDQUxFGhUKAmJWEg9Mb2NrUGFyYW1zRW50cnkaEwoCYlcSDXVzZXJBbW91bnRLRVkaEwoCYlgSDXN0YXJ0QmxvY2tLRVkaEQoCYlkSC2R1cmF0aW9uS0VZGgoKAmJaEgRrS0VZGhMKAmJhEg1rZXlMb2NrUGFyYW1LGhMKAmJiEg1rZXlMb2NrUGFyYW1CGhsKAmJjEhVrZXlMb2NrUGFyYW1CeVBlcmlvZEsaDAoCYmQSBnBlcmlvZBobCgJiZRIVa2V5TG9ja1BhcmFtQnlQZXJpb2RCGh0KAmJmEhdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudBomCgJiZxIga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MaGAoCYmgSEmtleVN0YXRzTG9ja3NDb3VudBoYCgJiaRISa2V5U3RhdHNVc2Vyc0NvdW50GiYKAmJqEiBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTBooCgJiaxIia2V5VXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTBoPCgJibBIJbHBBc3NldElkGh0KAmJtEhdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTBoeCgJibhIYa2V5VG90YWxNYXhCb29zdElOVEVHUkFMGicKAmJvEiFrZXlVc2VyQm9vc3RBdmFsYWlibGVUb0NsYWltVG90YWwaGQoCYnASE2tleVVzZXJCb29zdENsYWltZWQaFwoCYnESEWtleVRvdGFsQ2FjaGVkR3d4GhUKAmJyEg9mYWN0b3J5Q29udHJhY3QaFgoCYnMSEGVtaXNzaW9uQ29udHJhY3QaFQoCYnQSD3N0YWtpbmdDb250cmFjdBoXCgJidRIRZ3d4UmV3YXJkQ29udHJhY3QaEgoCYnYSDEhpc3RvcnlFbnRyeRoKCgJidxIEdHlwZRoKCgJieBIEdXNlchoPCgJieRIJbG9ja1N0YXJ0GgcKAmJ6EgFrGgoKAWMSBU1VTFQ4GhEKAmNBEgtwb29sV2VpZ2h0MRoYCgJjQhISd3hFbWlzc2lvblBlckJsb2NrGhMKAmNDEg1lbWlzc2lvblN0YXJ0GhEKAmNEEgtlbWlzc2lvbkVuZBoICgJjRRICZGgaKAoCY0YSInVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkaJgoCY0cSIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZGiMKAmNIEh11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbBobCgJjSRIVYm9vc3RFbWlzc2lvbkludGVncmFsGh8KAmNKEhl1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsGgkKAmNLEgN1ZGgaDAoCY0wSBnVMYXN0SBoKCgJjTRIEdWRoMBoKCgJjThIEdWRoMRodCgJjTxIXdXNlck1heEJvb3N0SW50ZWdyYWxLRVkaHgoCY1ASGHRvdGFsTWF4Qm9vc3RJbnRlZ3JhbEtFWRoVCgJjURIPdXNlck1heEJvb3N0SW50GhYKAmNSEhB0b3RhbE1heEJvb3N0SW50GhcKAmNTEhF0b3RhbENhY2hlZEd3eEtFWRoUCgJjVBIOdG90YWxDYWNoZWRHd3gaEQoCY1USC3VzZXJDdXJyR3d4GicKAmNWEiF1c2VyQm9vc3RBdmFsYWlibGVUb0NsYWltVG90YWxLRVkaJAoCY1cSHnVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbBogCgJjWBIadXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDAaIAoCY1kSGnVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwxGiQKAmNaEh5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDAaCgoCY2ESBGJLRVkaEgoCY2ISDGtCeVBlcmlvZEtFWRoSCgJjYxIMYkJ5UGVyaW9kS0VZGigKAmNkEiJleHRyYWN0T3B0aW9uYWxQYXltZW50QW1vdW50T3JGYWlsGhUKAmNlEg9leHBlY3RlZEFzc2V0SWQaCQoCY2YSA3BtdBofCgJjZxIZY2FsY1VzZXJHd3hBbW91bnRBdEhlaWdodBoSCgJjaBIMdGFyZ2V0SGVpZ2h0GgsKAmNpEgVFTVBUWRoYCgJjahISdXNlcjJOdW1NYXBwaW5nS0VZGhMKAmNrEg1nd3hBbW91bnRDYWxjGhoKAmNsEhRjYWxjQ3VycmVudEd3eEFtb3VudBoaCgJjbRIUaW50ZXJuYWxDbGFpbVd4Qm9vc3QaEgoCY24SDGxwQXNzZXRJZFN0choUCgJjbxIOdXNlckFkZHJlc3NTdHIaDgoCY3ASCHJlYWRPbmx5GhcKAmNxEhF1c2VyUmVjb3JkT3JFbXB0eRoVCgJjchIPdXNlclJlY29yZEFycmF5GhAKAmNzEgp1c2VyTnVtU3RyGiIKAmN0Ehxnd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0Gg4KAmN1EghFTVBUWVNUUhoTCgJjdhINJHQwMTMxNzQxMzc0MhoUCgJjdxIOcG9vbEFkZHJlc3NTdHIaCQoCY3gSA3B3MRoJCgJjeRIDcHcwGhEKAmN6Egtwb29sV2VpZ2h0MBoTCgFkEg5QT09MV0VJR0hUTVVMVBoNCgJkQRIHbG9ja0VuZBoXCgJkQhIRcmVtYWluaW5nRHVyYXRpb24aEwoCZEMSDXVzZXJBbW91bnROZXcaFQoCZEQSD2xvY2tEdXJhdGlvbk5ldxoSCgJkRRIMbG9ja1N0YXJ0TmV3GhEKAmRGEgtjdXJyVXNlckd3eBoNCgJkRxIHZ3d4RGlmZhoYCgJkSBISdXNlck1heEJvb3N0SW50TmV3Gh4KAmRJEhhyZW1haW5pbmdVc2VyTWF4Qm9vc3RJbnQaGQoCZEoSE3VzZXJNYXhCb29zdEludERpZmYaEwoCZEsSDSR0MDI3OTQyMjgwNDQaEwoCZEwSDSR0MDI4MTc2MjgyNzcaHQoCZE0SF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5GhsKAmROEhVjaGVja01hbmFnZXJQdWJsaWNLZXkaCAoCZE8SAnBtGgsKAmRQEgVoYXNQTRoNCgJkURIHY2hlY2tQTRoICgJkUhICdHgaDAoCZFMSBnZlcmlmeRoVCgJkVBIPdGFyZ2V0UHVibGljS2V5GiQKAmRhEh5wb29sVXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbDEaKAoCZGISInVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldzAaKAoCZGMSInVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldzEaJwoCZGQSIXVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldxoZCgJkZRITdXNlckJvb3N0Q2xhaW1lZEtFWRoWCgJkZhIQdXNlckJvb3N0Q2xhaW1lZBoYCgJkZxISdXNlckJvb3N0QXZhaWxhYmxlGg8KAmRoEglkYXRhU3RhdGUaCwoCZGkSBWRlYnVnGhcKAmRqEhFmYWN0b3J5QWRkcmVzc1N0choUCgJkaxIObG9ja0Fzc2V0SWRTdHIaEQoCZGwSC21pbkR1cmF0aW9uGhEKAmRtEgttYXhEdXJhdGlvbhoRCgJkbhILY2hlY2tDYWxsZXIaDgoCZG8SCGNmZ0FycmF5GhAKAmRwEgphc3NldElkU3RyGg8KAmRxEglwbXRBbW91bnQaFAoCZHISDm5leHRVc2VyTnVtS0VZGhQKAmRzEg51c2VySXNFeGlzdGluZxoNCgJkdBIHY29lZmZYOBoUCgJkdRIOZ1d4QW1vdW50U3RhcnQaGQoCZHYSE2dXeFBhcmFtc1Jlc3VsdExpc3QaCQoCZHcSA2FychoTCgJkeBINZGVsdGFEdXJhdGlvbhoQCgJkeRIKdXNlckFt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", "chainId": 84, "height": 1967815, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HnAN5fcy312uGAVtMs9ZCcoBEU51nyRf3PyNe4DH7mw1 Next: 4vPaHqZC5m7isPt1EnhiRwn2YVmPVRaf91eGUNUipm14 Diff:
OldNewDifferences
353353 }
354354
355355
356-func cg (aI) = {
357- let ch = "empty"
358- let ci = aV(aI)
359- let aL = valueOrElse(getString(ci), ch)
356+func cg (aI,ch) = {
357+ let ci = "empty"
358+ let cj = aV(aI)
359+ let aL = valueOrElse(getString(cj), ci)
360360 let bz = valueOrElse(getInteger(ba(aL)), 0)
361361 let bA = valueOrElse(getInteger(bb(aL)), 0)
362- let cj = bQ(bz, bA, height)
363- let aS = if ((0 > cj))
362+ let ck = bQ(bz, bA, ch)
363+ let aS = if ((0 > ck))
364364 then 0
365- else cj
365+ else ck
366366 aS
367367 }
368368
369369
370-func ck (cl,cm,cn) = {
371- let ch = "EMPTY"
372- let co = valueOrElse(getString(this, aH(cm)), ch)
373- if ((co == ch))
370+func cl (aI) = cg(aI, height)
371+
372+
373+func cm (cn,co,cp) = {
374+ let ci = "EMPTY"
375+ let cq = valueOrElse(getString(this, aH(co)), ci)
376+ if ((cq == ci))
374377 then $Tuple3(0, nil, "userRecord::is::empty")
375378 else {
376- let cp = split(co, a)
377- let cq = cp[aB]
378- let cr = valueOrElse(getInteger(bu, af()), 0)
379- let cs = "empty"
380- let ct = if ((cl != cs))
379+ let cr = split(cq, a)
380+ let cs = cr[aB]
381+ let ct = valueOrElse(getInteger(bu, af()), 0)
382+ let cu = "empty"
383+ let cv = if ((cn != cu))
381384 then {
382- let cu = valueOrErrorMessage(getString(br, F(cl)), ("unsupported lp asset " + cl))
383- let cv = getIntegerValue(br, J(cu))
384- let cw = valueOrElse(getInteger(br, L(cu, 0)), cv)
385- $Tuple2(cw, cv)
385+ let cw = valueOrErrorMessage(getString(br, F(cn)), ("unsupported lp asset " + cn))
386+ let cx = getIntegerValue(br, J(cw))
387+ let cy = valueOrElse(getInteger(br, L(cw, 0)), cx)
388+ $Tuple2(cy, cx)
386389 }
387- else if (cn)
390+ else if (cp)
388391 then $Tuple2(0, 0)
389- else throw(("not readonly mode: unsupported lp asset " + cl))
390- let cx = ct._1
391- let cy = ct._2
392- let cz = k(bs, Z())
393- let cA = k(bs, ab())
394- let cB = k(bs, ad())
395- let bT = if ((height > cB))
396- then cB
392+ else throw(("not readonly mode: unsupported lp asset " + cn))
393+ let cz = cv._1
394+ let cA = cv._2
395+ let cB = k(bs, Z())
396+ let cC = k(bs, ab())
397+ let cD = k(bs, ad())
398+ let bT = if ((height > cD))
399+ then cD
397400 else height
398- let cC = max([(bT - cA), 0])
399- let cD = bk(cq, cl)
400- let cE = bj(cq)
401- let cF = valueOrElse(getInteger(this, cD), h(this, cE))
402- let cG = (((cz * cC) * 2) / 3)
403- let cH = (cG - cF)
404- let cI = fraction(cH, 3, (2 * cz))
405- let cJ = (bT - cI)
406- let cK = max([(cr - cJ), 0])
407- let cL = ((bT - cJ) - cK)
408- if (if (if ((0 > cJ))
401+ let cE = max([(bT - cC), 0])
402+ let cF = bk(cs, cn)
403+ let cG = bj(cs)
404+ let cH = valueOrElse(getInteger(this, cF), h(this, cG))
405+ let cI = (((cB * cE) * 2) / 3)
406+ let cJ = (cI - cH)
407+ let cK = fraction(cJ, 3, (2 * cB))
408+ let cL = (bT - cK)
409+ let cM = max([(ct - cL), 0])
410+ let cN = ((bT - cL) - cM)
411+ if (if (if ((0 > cL))
409412 then true
410- else (0 > cL))
413+ else (0 > cN))
411414 then true
412- else (l(((cK + cL) - cI)) >= 1))
413- then throw(((((((("invalid udh calc: udh=" + toString(cI)) + " uLastH=") + toString(cJ)) + " udh0=") + toString(cK)) + " udh1=") + toString(cL)))
414- else if ((0 > cH))
415+ else (l(((cM + cN) - cK)) >= 1))
416+ then throw(((((((("invalid udh calc: udh=" + toString(cK)) + " uLastH=") + toString(cL)) + " udh0=") + toString(cM)) + " udh1=") + toString(cN)))
417+ else if ((0 > cJ))
415418 then throw("wrong calculations")
416419 else {
417- let cM = bm(cq)
418- let cN = bn()
419- let cO = h(this, cM)
420- let cP = h(this, cN)
421- let cQ = bq()
422- let cR = valueOrElse(getInteger(this, cQ), 0)
423- let cS = cg(cm)
424- let cT = bo(cq)
425- let cU = h(this, cT)
426- let cV = fraction(cH, cK, cI)
427- let cW = fraction(cH, cL, cI)
428- let cX = fraction(cV, cx, d)
429- let cY = fraction(cW, cy, d)
430- let cZ = if ((cR == 0))
420+ let cO = bm(cs)
421+ let cP = bn()
422+ let cQ = h(this, cO)
423+ let cR = h(this, cP)
424+ let cS = bq()
425+ let cT = valueOrElse(getInteger(this, cS), 0)
426+ let cU = cl(co)
427+ let cV = bo(cs)
428+ let cW = h(this, cV)
429+ let cX = fraction(cJ, cM, cK)
430+ let cY = fraction(cJ, cN, cK)
431+ let cZ = fraction(cX, cz, d)
432+ let da = fraction(cY, cA, d)
433+ let db = if ((cT == 0))
431434 then 0
432- else fraction(cX, cS, cR)
433- let da = if ((cR == 0))
435+ else fraction(cZ, cU, cT)
436+ let dc = if ((cT == 0))
434437 then 0
435- else fraction(cY, cS, cR)
436- let db = (cZ + da)
437- let dc = bp(cq)
438- let dd = h(this, dc)
439- let de = (db - dd)
440- let df = [IntegerEntry(cD, cG)]
441- let dg = makeString([("userBoostEmissionLastIntegral=" + toString(cF)), ("userBoostEmissionIntegral=" + toString(cH)), ("userMaxBoostInt=" + toString(cO)), ("totalMaxBoostInt=" + toString(cP)), ("userBoostAvaliableToClaimTotal=" + toString(cU)), ("userBoostAvaliableToClaimTotalNew=" + toString(db)), ("userBoostClaimed=" + toString(dd)), ("userBoostAvailable=" + toString(de)), ("userBoostEmissionIntegral0=" + toString(cV)), ("userBoostEmissionIntegral1=" + toString(cW)), ("poolUserBoostEmissionIntegral0=" + toString(cX)), ("poolUserBoostEmissionIntegral1=" + toString(cY)), ("poolWeight0=" + toString(cx)), ("poolWeight1=" + toString(cy)), ("h=" + toString(bT)), ("udh=" + toString(cI)), ("uLastH=" + toString(cJ)), ("udh0=" + toString(cK)), ("udh1=" + toString(cL)), ("userCurrGwx=" + toString(cS)), ("totalCachedGwx=" + toString(cR))], "::")
442- $Tuple3(db, df, dg)
438+ else fraction(da, cU, cT)
439+ let dd = (db + dc)
440+ let de = bp(cs)
441+ let df = h(this, de)
442+ let dg = (dd - df)
443+ let dh = [IntegerEntry(cF, cI)]
444+ let di = makeString([("userBoostEmissionLastIntegral=" + toString(cH)), ("userBoostEmissionIntegral=" + toString(cJ)), ("userMaxBoostInt=" + toString(cQ)), ("totalMaxBoostInt=" + toString(cR)), ("userBoostAvaliableToClaimTotal=" + toString(cW)), ("userBoostAvaliableToClaimTotalNew=" + toString(dd)), ("userBoostClaimed=" + toString(df)), ("userBoostAvailable=" + toString(dg)), ("userBoostEmissionIntegral0=" + toString(cX)), ("userBoostEmissionIntegral1=" + toString(cY)), ("poolUserBoostEmissionIntegral0=" + toString(cZ)), ("poolUserBoostEmissionIntegral1=" + toString(da)), ("poolWeight0=" + toString(cz)), ("poolWeight1=" + toString(cA)), ("h=" + toString(bT)), ("udh=" + toString(cK)), ("uLastH=" + toString(cL)), ("udh0=" + toString(cM)), ("udh1=" + toString(cN)), ("userCurrGwx=" + toString(cU)), ("totalCachedGwx=" + toString(cT))], "::")
445+ $Tuple3(dd, dh, di)
443446 }
444447 }
445448 }
446449
447450
448451 @Callable(ay)
449-func constructor (dh,di,ap,dj,dk,as) = {
450- let dl = ax(ay)
451- if ((dl == dl))
452- then ([IntegerEntry(aU(), 0), StringEntry(al(), at(di, ap, dj, dk, as)), StringEntry(s(), dh)] ++ bD(0, 0, 0, 0))
452+func constructor (dj,dk,ap,dl,dm,as) = {
453+ let dn = ax(ay)
454+ if ((dn == dn))
455+ then ([IntegerEntry(aU(), 0), StringEntry(al(), at(dk, ap, dl, dm, as)), StringEntry(s(), dj)] ++ bD(0, 0, 0, 0))
453456 else throw("Strict value is not equal to itself.")
454457 }
455458
457460
458461 @Callable(ay)
459462 func lock (aO) = {
460- let dm = am()
461- let dn = dm[ag]
462- let ao = fromBase58String(dn)
463- let ap = parseIntValue(dm[ah])
464- let aq = parseIntValue(dm[ai])
465- let ar = parseIntValue(dm[aj])
466- let as = addressFromStringValue(dm[ak])
463+ let do = am()
464+ let dp = do[ag]
465+ let ao = fromBase58String(dp)
466+ let ap = parseIntValue(do[ah])
467+ let aq = parseIntValue(do[ai])
468+ let ar = parseIntValue(do[aj])
469+ let as = addressFromStringValue(do[ak])
467470 if ((size(ay.payments) != 1))
468471 then throw("invalid payment - exact one payment must be attached")
469472 else {
470473 let cf = ay.payments[0]
471- let do = cf.amount
474+ let dq = cf.amount
472475 if ((ao != value(cf.assetId)))
473- then throw((("invalid asset is in payment - " + dn) + " is expected"))
476+ then throw((("invalid asset is in payment - " + dp) + " is expected"))
474477 else {
475- let dp = aU()
476- let cm = toString(ay.caller)
477- let dq = isDefined(getString(aV(cm)))
478- let cq = if (dq)
479- then value(getString(aV(cm)))
480- else toString(k(this, dp))
481- let aL = parseIntValue(cq)
478+ let dr = aU()
479+ let co = toString(ay.caller)
480+ let ds = isDefined(getString(aV(co)))
481+ let cs = if (ds)
482+ then value(getString(aV(co)))
483+ else toString(k(this, dr))
484+ let aL = parseIntValue(cs)
482485 let by = height
483- let bX = aY(cq)
484- let bY = aZ(cq)
485- let bW = aX(cq)
486- if ((ap > do))
486+ let bX = aY(cs)
487+ let bY = aZ(cs)
488+ let bW = aX(cs)
489+ if ((ap > dq))
487490 then throw(("amount is less then minLockAmount=" + toString(ap)))
488491 else if ((aq > aO))
489492 then throw(("passed duration is less then minLockDuration=" + toString(aq)))
490493 else if ((aO > ar))
491494 then throw(("passed duration is greater then maxLockDuration=" + toString(ar)))
492- else if (if (dq)
495+ else if (if (ds)
493496 then ((k(this, bX) + k(this, bY)) >= by)
494497 else false)
495498 then throw("there is an active lock - consider to use increaseLock")
496499 else if ((h(this, bW) > 0))
497500 then throw(("there are locked WXs - consider to use increaseLock " + bW))
498501 else {
499- let dr = fraction(aO, c, ar)
500- let ds = fraction(do, dr, c)
501- let dt = n(invoke(as, "calcGwxParamsREADONLY", [ds, by, aO], nil))
502- let bz = q(dt[0])
503- let bA = q(dt[1])
504- let bd = toString(q(dt[2]))
505- let cz = k(bs, Z())
506- let cA = k(bs, ab())
507- let cB = k(bs, ad())
508- let bT = if ((height > cB))
509- then cB
502+ let dt = fraction(aO, c, ar)
503+ let du = fraction(dq, dt, c)
504+ let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, by, aO], nil))
505+ let bz = q(dv[0])
506+ let bA = q(dv[1])
507+ let bd = toString(q(dv[2]))
508+ let cB = k(bs, Z())
509+ let cC = k(bs, ab())
510+ let cD = k(bs, ad())
511+ let bT = if ((height > cD))
512+ then cD
510513 else height
511- let cC = max([(bT - cA), 0])
512- let cE = bj(cq)
513- let cG = (((cz * cC) * 2) / 3)
514- let cM = bm(cq)
515- let cN = bn()
516- let cO = ((ds * aO) / 2)
517- let cP = h(this, cN)
518- let cQ = bq()
519- let cR = valueOrElse(getInteger(this, cQ), 0)
520- let du = if (dq)
514+ let cE = max([(bT - cC), 0])
515+ let cG = bj(cs)
516+ let cI = (((cB * cE) * 2) / 3)
517+ let cO = bm(cs)
518+ let cP = bn()
519+ let cQ = ((du * aO) / 2)
520+ let cR = h(this, cP)
521+ let cS = bq()
522+ let cT = valueOrElse(getInteger(this, cS), 0)
523+ let dw = if (ds)
521524 then nil
522- else [IntegerEntry(dp, (aL + 1)), StringEntry(aV(cm), cq), StringEntry(aW(cq), cm)]
523- ((((du ++ bV(cm, cq, do, by, aO, bz, bA, bd)) ++ bD(do, aO, 1, if (dq)
525+ else [IntegerEntry(dr, (aL + 1)), StringEntry(aV(co), cs), StringEntry(aW(cs), co)]
526+ ((((dw ++ bV(co, cs, dq, by, aO, bz, bA, bd)) ++ bD(dq, aO, 1, if (ds)
524527 then 0
525- else 1)) :+ bv("lock", cm, do, by, aO, bz, bA, ay)) ++ [IntegerEntry(cE, cG), IntegerEntry(cQ, (cR + ds))])
528+ else 1)) :+ bv("lock", co, dq, by, aO, bz, bA, ay)) ++ [IntegerEntry(cG, cI), IntegerEntry(cS, (cT + du))])
526529 }
527530 }
528531 }
531534
532535
533536 @Callable(ay)
534-func increaseLock (dv) = {
535- let dm = am()
536- let dn = dm[ag]
537- let ao = fromBase58String(dn)
538- let aq = parseIntValue(dm[ai])
539- let ar = parseIntValue(dm[aj])
540- let as = addressFromStringValue(dm[ak])
541- let do = cd(ay, ao)
542- let cm = toString(ay.caller)
543- let cp = aJ(cm)
544- let cq = cp[aB]
545- let dw = parseIntValue(cp[aC])
546- let by = parseIntValue(cp[aD])
547- let dx = parseIntValue(cp[aE])
548- let dy = (by + dx)
549- let dz = max([(dy - height), 0])
550- let dA = (dw + do)
551- let dB = (dz + dv)
552- if ((0 > dv))
537+func increaseLock (dx) = {
538+ let do = am()
539+ let dp = do[ag]
540+ let ao = fromBase58String(dp)
541+ let aq = parseIntValue(do[ai])
542+ let ar = parseIntValue(do[aj])
543+ let as = addressFromStringValue(do[ak])
544+ let dq = cd(ay, ao)
545+ let co = toString(ay.caller)
546+ let cr = aJ(co)
547+ let cs = cr[aB]
548+ let dy = parseIntValue(cr[aC])
549+ let by = parseIntValue(cr[aD])
550+ let dz = parseIntValue(cr[aE])
551+ let dA = (by + dz)
552+ let dB = max([(dA - height), 0])
553+ let dC = (dy + dq)
554+ let dD = (dB + dx)
555+ if ((0 > dx))
553556 then throw("duration is less then zero")
554- else if ((aq > dB))
557+ else if ((aq > dD))
555558 then throw(("lockDurationNew is less then minLockDuration=" + toString(aq)))
556- else if ((dB > ar))
559+ else if ((dD > ar))
557560 then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(ar)))
558561 else {
559- let dr = fraction(dB, c, ar)
560- let ds = fraction(dA, dr, c)
561- let dC = height
562- let dt = n(invoke(as, "calcGwxParamsREADONLY", [ds, dC, dB], nil))
563- let bz = q(dt[0])
564- let bA = q(dt[1])
565- let bd = toString(q(dt[2]))
566- let cz = k(bs, Z())
567- let cA = k(bs, ab())
568- let cB = k(bs, ad())
569- let bT = if ((height > cB))
570- then cB
562+ let dt = fraction(dD, c, ar)
563+ let du = fraction(dC, dt, c)
564+ let dE = height
565+ let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, dE, dD], nil))
566+ let bz = q(dv[0])
567+ let bA = q(dv[1])
568+ let bd = toString(q(dv[2]))
569+ let cB = k(bs, Z())
570+ let cC = k(bs, ab())
571+ let cD = k(bs, ad())
572+ let bT = if ((height > cD))
573+ then cD
571574 else height
572- let cC = max([(bT - cA), 0])
573- let cE = bj(cq)
574- let cF = h(this, cE)
575- let cG = (((cz * cC) * 2) / 3)
576- let cH = (cG - cF)
577- if ((0 > cH))
575+ let cE = max([(bT - cC), 0])
576+ let cG = bj(cs)
577+ let cH = h(this, cG)
578+ let cI = (((cB * cE) * 2) / 3)
579+ let cJ = (cI - cH)
580+ if ((0 > cJ))
578581 then throw("wrong calculations")
579582 else {
580- let cM = bm(cq)
581- let cN = bn()
582- let cO = h(this, cM)
583- let cP = h(this, cN)
584- let dD = cg(cm)
585- let dE = (ds - dD)
586- if ((0 > dE))
587- then throw(("gwxDiff is less then 0: " + toString(dE)))
583+ let cO = bm(cs)
584+ let cP = bn()
585+ let cQ = h(this, cO)
586+ let cR = h(this, cP)
587+ let dF = cl(co)
588+ let dG = (du - dF)
589+ if ((0 > dG))
590+ then throw(("gwxDiff is less then 0: " + toString(dG)))
588591 else {
589- let cQ = bq()
590- let cR = valueOrElse(getInteger(this, cQ), 0)
591- let cT = bo(cq)
592- let cU = h(this, cT)
593- let db = fraction(cH, dD, cR)
594- let dF = ((ds * dB) / 2)
595- let dG = ((dD * dz) / 2)
596- let dH = (dF - dG)
597- (((bV(cm, cq, dA, dC, dB, bz, bA, bd) ++ bD(do, dv, 0, 0)) :+ bv("lock", cm, do, by, dB, bz, bA, ay)) ++ [IntegerEntry(cQ, (cR + dE))])
592+ let cS = bq()
593+ let cT = valueOrElse(getInteger(this, cS), 0)
594+ let cV = bo(cs)
595+ let cW = h(this, cV)
596+ let dd = fraction(cJ, dF, cT)
597+ let dH = ((du * dD) / 2)
598+ let dI = ((dF * dB) / 2)
599+ let dJ = (dH - dI)
600+ (((bV(co, cs, dC, dE, dD, bz, bA, bd) ++ bD(dq, dx, 0, 0)) :+ bv("lock", co, dq, by, dD, bz, bA, ay)) ++ [IntegerEntry(cS, (cT + dG))])
598601 }
599602 }
600603 }
603606
604607
605608 @Callable(ay)
606-func claimWxBoost (cl,cm) = if ((bt != ay.caller))
609+func claimWxBoost (cn,co) = if ((bt != ay.caller))
607610 then throw("permissions denied")
608611 else {
609- let dI = ck(cl, cm, false)
610- let de = dI._1
611- let df = dI._2
612- let dg = dI._3
613- $Tuple2(df, [de])
612+ let dK = cm(cn, co, false)
613+ let dg = dK._1
614+ let dh = dK._2
615+ let di = dK._3
616+ $Tuple2(dh, [dg])
614617 }
615618
616619
617620
618621 @Callable(ay)
619-func claimWxBoostREADONLY (cl,cm) = {
620- let dJ = ck(cl, cm, true)
621- let de = dJ._1
622- let df = dJ._2
623- let dg = dJ._3
624- $Tuple2(nil, [de, dg])
622+func claimWxBoostREADONLY (cn,co) = {
623+ let dL = cm(cn, co, true)
624+ let dg = dL._1
625+ let dh = dL._2
626+ let di = dL._3
627+ $Tuple2(nil, [dg, di])
625628 }
626629
627630
628631
629632 @Callable(ay)
630633 func unlock (aI) = {
631- let cp = aJ(aI)
632- let cq = cp[aB]
633- let dw = parseIntValue(cp[aC])
634- let by = parseIntValue(cp[aD])
635- let dx = parseIntValue(cp[aE])
636- let dy = (by + dx)
637- let dm = am()
638- let ao = fromBase58String(dm[ag])
639- let as = addressFromStringValue(dm[ak])
640- if ((dy >= height))
641- then throw((("wait " + toString(dy)) + " to unlock"))
642- else if ((0 >= dw))
634+ let cr = aJ(aI)
635+ let cs = cr[aB]
636+ let dy = parseIntValue(cr[aC])
637+ let by = parseIntValue(cr[aD])
638+ let dz = parseIntValue(cr[aE])
639+ let dA = (by + dz)
640+ let do = am()
641+ let ao = fromBase58String(do[ag])
642+ let as = addressFromStringValue(do[ak])
643+ if ((dA >= height))
644+ then throw((("wait " + toString(dA)) + " to unlock"))
645+ else if ((0 >= dy))
643646 then throw("nothing to unlock")
644647 else {
645648 let bd = valueOrElse(getInteger(as, ae()), 0)
646- (((bV(aI, cq, 0, by, dx, 0, 0, toString(bd)) ++ bD(-(dw), 0, 0, -1)) :+ bv("unlock", aI, dw, by, dx, 0, 0, ay)) :+ ScriptTransfer(addressFromStringValue(aI), dw, ao))
649+ (((bV(aI, cs, 0, by, dz, 0, 0, toString(bd)) ++ bD(-(dy), 0, 0, -1)) :+ bv("unlock", aI, dy, by, dz, 0, 0, ay)) :+ ScriptTransfer(addressFromStringValue(aI), dy, ao))
647650 }
648651 }
649652
651654
652655 @Callable(ay)
653656 func gwxUserInfoREADONLY (aI) = {
654- let aS = cg(aI)
657+ let aS = cl(aI)
655658 $Tuple2(nil, [aS])
656659 }
657660
658661
659662
660663 @Callable(ay)
661-func setManager (dK) = {
662- let dl = ax(ay)
663- if ((dl == dl))
664+func getUserGwxAmountAtHeightREADONLY (aI,ch) = {
665+ let aS = cg(aI, ch)
666+ $Tuple2(nil, aS)
667+ }
668+
669+
670+
671+@Callable(ay)
672+func setManager (dM) = {
673+ let dn = ax(ay)
674+ if ((dn == dn))
664675 then {
665- let dL = fromBase58String(dK)
666- if ((dL == dL))
667- then [StringEntry(Y(), dK)]
676+ let dN = fromBase58String(dM)
677+ if ((dN == dN))
678+ then [StringEntry(Y(), dM)]
668679 else throw("Strict value is not equal to itself.")
669680 }
670681 else throw("Strict value is not equal to itself.")
674685
675686 @Callable(ay)
676687 func confirmManager () = {
677- let dM = aw()
678- let dN = if (isDefined(dM))
688+ let dO = aw()
689+ let dP = if (isDefined(dO))
679690 then true
680691 else throw("No pending manager")
681- if ((dN == dN))
692+ if ((dP == dP))
682693 then {
683- let dO = if ((ay.callerPublicKey == value(dM)))
694+ let dQ = if ((ay.callerPublicKey == value(dO)))
684695 then true
685696 else throw("You are not pending manager")
686- if ((dO == dO))
687- then [StringEntry(X(), toBase58String(value(dM))), DeleteEntry(Y())]
697+ if ((dQ == dQ))
698+ then [StringEntry(X(), toBase58String(value(dO))), DeleteEntry(Y())]
688699 else throw("Strict value is not equal to itself.")
689700 }
690701 else throw("Strict value is not equal to itself.")
691702 }
692703
693704
694-@Verifier(dP)
695-func dQ () = {
696- let dR = {
705+@Verifier(dR)
706+func dS () = {
707+ let dT = {
697708 let o = au()
698709 if ($isInstanceOf(o, "ByteVector"))
699710 then {
701712 aA
702713 }
703714 else if ($isInstanceOf(o, "Unit"))
704- then dP.senderPublicKey
715+ then dR.senderPublicKey
705716 else throw("Match error")
706717 }
707- sigVerify(dP.bodyBytes, dP.proofs[0], dR)
718+ sigVerify(dR.bodyBytes, dR.proofs[0], dT)
708719 }
709720
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = 100000000
99
1010 let d = c
1111
1212 func e (f,g) = valueOrErrorMessage(getString(f, g), (("mandatory this." + g) + " is not defined"))
1313
1414
1515 func h (f,g) = valueOrElse(getInteger(f, g), 0)
1616
1717
1818 func i (f,g,j) = valueOrElse(getInteger(f, g), j)
1919
2020
2121 func k (f,g) = valueOrErrorMessage(getInteger(f, g), (("mandatory this." + g) + " is not defined"))
2222
2323
2424 func l (m) = if ((0 > m))
2525 then -(m)
2626 else m
2727
2828
2929 func n (m) = {
3030 let o = m
3131 if ($isInstanceOf(o, "List[Any]"))
3232 then {
3333 let p = o
3434 p
3535 }
3636 else throw("fail to cast into List[Any]")
3737 }
3838
3939
4040 func q (m) = {
4141 let o = m
4242 if ($isInstanceOf(o, "Int"))
4343 then {
4444 let r = o
4545 r
4646 }
4747 else throw("fail to cast into Int")
4848 }
4949
5050
5151 func s () = "%s%s__config__factoryAddress"
5252
5353
5454 let t = 1
5555
5656 let u = 2
5757
5858 let v = 3
5959
6060 let w = 4
6161
6262 let x = 5
6363
6464 let y = 6
6565
6666 let z = 7
6767
6868 let A = 8
6969
7070 let B = 9
7171
7272 let C = 10
7373
7474 let D = 11
7575
7676 func E () = "%s__factoryConfig"
7777
7878
7979 func F (G) = makeString(["%s%s%s", G, "mappings__lpAsset2PoolContract"], a)
8080
8181
8282 func H () = "%s__lpTokensList"
8383
8484
8585 func I (G) = makeString(["%s%s%s", G, "mappings__lpAsset2PoolContract"], a)
8686
8787
8888 func J (K) = makeString(["%s%s", "poolWeight", K], a)
8989
9090
9191 func L (M,N) = ((("%s%s__poolWeight__" + M) + "__") + toString(N))
9292
9393
9494 func O () = addressFromStringValue(e(this, s()))
9595
9696
9797 func P () = split(valueOrElse(getString(O(), H()), ""), a)
9898
9999
100100 func Q (R) = split(e(R, E()), a)
101101
102102
103103 func S (T) = addressFromStringValue(T[u])
104104
105105
106106 func U (T) = addressFromStringValue(T[x])
107107
108108
109109 func V (T) = addressFromStringValue(T[t])
110110
111111
112112 func W (T) = addressFromStringValue(T[C])
113113
114114
115115 func X () = "%s__managerPublicKey"
116116
117117
118118 func Y () = "%s__pendingManagerPublicKey"
119119
120120
121121 func Z () = "%s%s__ratePerBlock__current"
122122
123123
124124 func aa () = "%s%s__ratePerBlockMax__current"
125125
126126
127127 func ab () = "%s%s__emission__startBlock"
128128
129129
130130 func ac () = "%s%s__emission__duration"
131131
132132
133133 func ad () = "%s%s__emission__endBlock"
134134
135135
136136 func ae () = "%s__nextPeriod"
137137
138138
139139 func af () = "%s%s__gwxRewardEmissionPart__startHeight"
140140
141141
142142 let ag = 1
143143
144144 let ah = 2
145145
146146 let ai = 3
147147
148148 let aj = 4
149149
150150 let ak = 5
151151
152152 func al () = "%s__config"
153153
154154
155155 func am () = split(e(this, al()), a)
156156
157157
158158 func an (ao,ap,aq,ar,as) = makeString(["%s%d%d%d", ao, ap, aq, ar, as], a)
159159
160160
161161 func at (ao,ap,aq,ar,as) = an(ao, toString(ap), toString(aq), toString(ar), as)
162162
163163
164164 func au () = {
165165 let o = getString(X())
166166 if ($isInstanceOf(o, "String"))
167167 then {
168168 let av = o
169169 fromBase58String(av)
170170 }
171171 else if ($isInstanceOf(o, "Unit"))
172172 then unit
173173 else throw("Match error")
174174 }
175175
176176
177177 func aw () = {
178178 let o = getString(Y())
179179 if ($isInstanceOf(o, "String"))
180180 then {
181181 let av = o
182182 fromBase58String(av)
183183 }
184184 else if ($isInstanceOf(o, "Unit"))
185185 then unit
186186 else throw("Match error")
187187 }
188188
189189
190190 func ax (ay) = {
191191 let az = throw("Permission denied")
192192 let o = au()
193193 if ($isInstanceOf(o, "ByteVector"))
194194 then {
195195 let aA = o
196196 if ((ay.callerPublicKey == aA))
197197 then true
198198 else az
199199 }
200200 else if ($isInstanceOf(o, "Unit"))
201201 then if ((ay.caller == this))
202202 then true
203203 else az
204204 else throw("Match error")
205205 }
206206
207207
208208 let aB = 1
209209
210210 let aC = 2
211211
212212 let aD = 3
213213
214214 let aE = 4
215215
216216 let aF = 5
217217
218218 let aG = 6
219219
220220 func aH (aI) = makeString(["%s%s__lock", aI], a)
221221
222222
223223 func aJ (aI) = split(e(this, aH(aI)), a)
224224
225225
226226 func aK (aL,aM,aN,aO,aP,aQ,aR,aS) = makeString(["%d%d%d%d%d%d%d%d", aL, aM, aN, aO, aP, aQ, aR, aS], a)
227227
228228
229229 func aT (aL,aM,aN,aO,aP,aQ,aS) = aK(aL, toString(aM), toString(aN), toString(aO), toString(aP), toString(aQ), toString(lastBlock.timestamp), toString(aS))
230230
231231
232232 func aU () = "%s__nextUserNum"
233233
234234
235235 func aV (aI) = makeString(["%s%s%s__mapping__user2num", aI], a)
236236
237237
238238 func aW (N) = makeString(["%s%s%s__mapping__num2user", N], a)
239239
240240
241241 func aX (aL) = makeString(["%s%d%s__paramByUserNum", aL, "amount"], a)
242242
243243
244244 func aY (aL) = makeString(["%s%d%s__paramByUserNum", aL, "start"], a)
245245
246246
247247 func aZ (aL) = makeString(["%s%d%s__paramByUserNum", aL, "duration"], a)
248248
249249
250250 func ba (aL) = makeString(["%s%d%s__paramByUserNum", aL, "k"], a)
251251
252252
253253 func bb (aL) = makeString(["%s%d%s__paramByUserNum", aL, "b"], a)
254254
255255
256256 func bc (aL,bd) = makeString(["%s%d%s%d__paramByPeriod", aL, "k", bd], a)
257257
258258
259259 func be (aL,bd) = makeString(["%s%d%s%d__paramByPeriod", aL, "b", bd], a)
260260
261261
262262 func bf () = "%s%s__stats__activeTotalLocked"
263263
264264
265265 func bg () = "%s%s__stats__locksDurationSumInBlocks"
266266
267267
268268 func bh () = "%s%s__stats__locksCount"
269269
270270
271271 func bi () = "%s%s__stats__activeUsersCount"
272272
273273
274274 func bj (aL) = makeString(["%s%d__userBoostEmissionLastInt", aL], a)
275275
276276
277277 func bk (aL,bl) = makeString(["%s%d__userBoostEmissionLastInt", aL, bl], a)
278278
279279
280280 func bm (aL) = makeString(["%s%d__maxBoostInt", aL], a)
281281
282282
283283 func bn () = "%s%s__maxBoostInt__total"
284284
285285
286286 func bo (aL) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aL], a)
287287
288288
289289 func bp (aL) = makeString(["%s%d__userBoostClaimed", aL], a)
290290
291291
292292 func bq () = "%s%s__gwxCached__total"
293293
294294
295295 let br = O()
296296
297297 let T = Q(br)
298298
299299 let bs = U(T)
300300
301301 let bt = V(T)
302302
303303 let bu = W(T)
304304
305305 func bv (bw,bx,aM,by,aO,bz,bA,ay) = {
306306 let bB = makeString(["%s%s%s%s__history", bw, bx, toBase58String(ay.transactionId)], a)
307307 let bC = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aM), toString(by), toString(aO), toString(bz), toString(bA)], a)
308308 StringEntry(bB, bC)
309309 }
310310
311311
312312 func bD (bE,bF,bG,bH) = {
313313 let bI = bg()
314314 let bJ = bh()
315315 let bK = bi()
316316 let bL = bf()
317317 let bM = h(this, bI)
318318 let bN = h(this, bJ)
319319 let bO = h(this, bK)
320320 let bP = h(this, bL)
321321 [IntegerEntry(bI, (bM + bF)), IntegerEntry(bJ, (bN + bG)), IntegerEntry(bK, (bO + bH)), IntegerEntry(bL, (bP + bE))]
322322 }
323323
324324
325325 func bQ (bR,bS,bT) = {
326326 let bU = 1000
327327 (((bR * bT) + bS) / bU)
328328 }
329329
330330
331331 func bV (aI,aL,aM,aN,aO,bz,bA,bd) = {
332332 let bW = aX(aL)
333333 let bX = aY(aL)
334334 let bY = aZ(aL)
335335 let bZ = ba(aL)
336336 let ca = bb(aL)
337337 let cb = bc(aL, bd)
338338 let cc = be(aL, bd)
339339 let aS = bQ(bz, bA, height)
340340 [IntegerEntry(bW, aM), IntegerEntry(bX, aN), IntegerEntry(bY, aO), IntegerEntry(bZ, bz), IntegerEntry(ca, bA), IntegerEntry(cb, bz), IntegerEntry(cc, bA), StringEntry(aH(aI), aT(aL, aM, aN, aO, bz, bA, aS))]
341341 }
342342
343343
344344 func cd (ay,ce) = if ((size(ay.payments) > 1))
345345 then throw("only one payment is allowed")
346346 else if ((size(ay.payments) == 0))
347347 then 0
348348 else {
349349 let cf = ay.payments[0]
350350 if ((value(cf.assetId) != ce))
351351 then throw("invalid asset id in payment")
352352 else cf.amount
353353 }
354354
355355
356-func cg (aI) = {
357- let ch = "empty"
358- let ci = aV(aI)
359- let aL = valueOrElse(getString(ci), ch)
356+func cg (aI,ch) = {
357+ let ci = "empty"
358+ let cj = aV(aI)
359+ let aL = valueOrElse(getString(cj), ci)
360360 let bz = valueOrElse(getInteger(ba(aL)), 0)
361361 let bA = valueOrElse(getInteger(bb(aL)), 0)
362- let cj = bQ(bz, bA, height)
363- let aS = if ((0 > cj))
362+ let ck = bQ(bz, bA, ch)
363+ let aS = if ((0 > ck))
364364 then 0
365- else cj
365+ else ck
366366 aS
367367 }
368368
369369
370-func ck (cl,cm,cn) = {
371- let ch = "EMPTY"
372- let co = valueOrElse(getString(this, aH(cm)), ch)
373- if ((co == ch))
370+func cl (aI) = cg(aI, height)
371+
372+
373+func cm (cn,co,cp) = {
374+ let ci = "EMPTY"
375+ let cq = valueOrElse(getString(this, aH(co)), ci)
376+ if ((cq == ci))
374377 then $Tuple3(0, nil, "userRecord::is::empty")
375378 else {
376- let cp = split(co, a)
377- let cq = cp[aB]
378- let cr = valueOrElse(getInteger(bu, af()), 0)
379- let cs = "empty"
380- let ct = if ((cl != cs))
379+ let cr = split(cq, a)
380+ let cs = cr[aB]
381+ let ct = valueOrElse(getInteger(bu, af()), 0)
382+ let cu = "empty"
383+ let cv = if ((cn != cu))
381384 then {
382- let cu = valueOrErrorMessage(getString(br, F(cl)), ("unsupported lp asset " + cl))
383- let cv = getIntegerValue(br, J(cu))
384- let cw = valueOrElse(getInteger(br, L(cu, 0)), cv)
385- $Tuple2(cw, cv)
385+ let cw = valueOrErrorMessage(getString(br, F(cn)), ("unsupported lp asset " + cn))
386+ let cx = getIntegerValue(br, J(cw))
387+ let cy = valueOrElse(getInteger(br, L(cw, 0)), cx)
388+ $Tuple2(cy, cx)
386389 }
387- else if (cn)
390+ else if (cp)
388391 then $Tuple2(0, 0)
389- else throw(("not readonly mode: unsupported lp asset " + cl))
390- let cx = ct._1
391- let cy = ct._2
392- let cz = k(bs, Z())
393- let cA = k(bs, ab())
394- let cB = k(bs, ad())
395- let bT = if ((height > cB))
396- then cB
392+ else throw(("not readonly mode: unsupported lp asset " + cn))
393+ let cz = cv._1
394+ let cA = cv._2
395+ let cB = k(bs, Z())
396+ let cC = k(bs, ab())
397+ let cD = k(bs, ad())
398+ let bT = if ((height > cD))
399+ then cD
397400 else height
398- let cC = max([(bT - cA), 0])
399- let cD = bk(cq, cl)
400- let cE = bj(cq)
401- let cF = valueOrElse(getInteger(this, cD), h(this, cE))
402- let cG = (((cz * cC) * 2) / 3)
403- let cH = (cG - cF)
404- let cI = fraction(cH, 3, (2 * cz))
405- let cJ = (bT - cI)
406- let cK = max([(cr - cJ), 0])
407- let cL = ((bT - cJ) - cK)
408- if (if (if ((0 > cJ))
401+ let cE = max([(bT - cC), 0])
402+ let cF = bk(cs, cn)
403+ let cG = bj(cs)
404+ let cH = valueOrElse(getInteger(this, cF), h(this, cG))
405+ let cI = (((cB * cE) * 2) / 3)
406+ let cJ = (cI - cH)
407+ let cK = fraction(cJ, 3, (2 * cB))
408+ let cL = (bT - cK)
409+ let cM = max([(ct - cL), 0])
410+ let cN = ((bT - cL) - cM)
411+ if (if (if ((0 > cL))
409412 then true
410- else (0 > cL))
413+ else (0 > cN))
411414 then true
412- else (l(((cK + cL) - cI)) >= 1))
413- then throw(((((((("invalid udh calc: udh=" + toString(cI)) + " uLastH=") + toString(cJ)) + " udh0=") + toString(cK)) + " udh1=") + toString(cL)))
414- else if ((0 > cH))
415+ else (l(((cM + cN) - cK)) >= 1))
416+ then throw(((((((("invalid udh calc: udh=" + toString(cK)) + " uLastH=") + toString(cL)) + " udh0=") + toString(cM)) + " udh1=") + toString(cN)))
417+ else if ((0 > cJ))
415418 then throw("wrong calculations")
416419 else {
417- let cM = bm(cq)
418- let cN = bn()
419- let cO = h(this, cM)
420- let cP = h(this, cN)
421- let cQ = bq()
422- let cR = valueOrElse(getInteger(this, cQ), 0)
423- let cS = cg(cm)
424- let cT = bo(cq)
425- let cU = h(this, cT)
426- let cV = fraction(cH, cK, cI)
427- let cW = fraction(cH, cL, cI)
428- let cX = fraction(cV, cx, d)
429- let cY = fraction(cW, cy, d)
430- let cZ = if ((cR == 0))
420+ let cO = bm(cs)
421+ let cP = bn()
422+ let cQ = h(this, cO)
423+ let cR = h(this, cP)
424+ let cS = bq()
425+ let cT = valueOrElse(getInteger(this, cS), 0)
426+ let cU = cl(co)
427+ let cV = bo(cs)
428+ let cW = h(this, cV)
429+ let cX = fraction(cJ, cM, cK)
430+ let cY = fraction(cJ, cN, cK)
431+ let cZ = fraction(cX, cz, d)
432+ let da = fraction(cY, cA, d)
433+ let db = if ((cT == 0))
431434 then 0
432- else fraction(cX, cS, cR)
433- let da = if ((cR == 0))
435+ else fraction(cZ, cU, cT)
436+ let dc = if ((cT == 0))
434437 then 0
435- else fraction(cY, cS, cR)
436- let db = (cZ + da)
437- let dc = bp(cq)
438- let dd = h(this, dc)
439- let de = (db - dd)
440- let df = [IntegerEntry(cD, cG)]
441- let dg = makeString([("userBoostEmissionLastIntegral=" + toString(cF)), ("userBoostEmissionIntegral=" + toString(cH)), ("userMaxBoostInt=" + toString(cO)), ("totalMaxBoostInt=" + toString(cP)), ("userBoostAvaliableToClaimTotal=" + toString(cU)), ("userBoostAvaliableToClaimTotalNew=" + toString(db)), ("userBoostClaimed=" + toString(dd)), ("userBoostAvailable=" + toString(de)), ("userBoostEmissionIntegral0=" + toString(cV)), ("userBoostEmissionIntegral1=" + toString(cW)), ("poolUserBoostEmissionIntegral0=" + toString(cX)), ("poolUserBoostEmissionIntegral1=" + toString(cY)), ("poolWeight0=" + toString(cx)), ("poolWeight1=" + toString(cy)), ("h=" + toString(bT)), ("udh=" + toString(cI)), ("uLastH=" + toString(cJ)), ("udh0=" + toString(cK)), ("udh1=" + toString(cL)), ("userCurrGwx=" + toString(cS)), ("totalCachedGwx=" + toString(cR))], "::")
442- $Tuple3(db, df, dg)
438+ else fraction(da, cU, cT)
439+ let dd = (db + dc)
440+ let de = bp(cs)
441+ let df = h(this, de)
442+ let dg = (dd - df)
443+ let dh = [IntegerEntry(cF, cI)]
444+ let di = makeString([("userBoostEmissionLastIntegral=" + toString(cH)), ("userBoostEmissionIntegral=" + toString(cJ)), ("userMaxBoostInt=" + toString(cQ)), ("totalMaxBoostInt=" + toString(cR)), ("userBoostAvaliableToClaimTotal=" + toString(cW)), ("userBoostAvaliableToClaimTotalNew=" + toString(dd)), ("userBoostClaimed=" + toString(df)), ("userBoostAvailable=" + toString(dg)), ("userBoostEmissionIntegral0=" + toString(cX)), ("userBoostEmissionIntegral1=" + toString(cY)), ("poolUserBoostEmissionIntegral0=" + toString(cZ)), ("poolUserBoostEmissionIntegral1=" + toString(da)), ("poolWeight0=" + toString(cz)), ("poolWeight1=" + toString(cA)), ("h=" + toString(bT)), ("udh=" + toString(cK)), ("uLastH=" + toString(cL)), ("udh0=" + toString(cM)), ("udh1=" + toString(cN)), ("userCurrGwx=" + toString(cU)), ("totalCachedGwx=" + toString(cT))], "::")
445+ $Tuple3(dd, dh, di)
443446 }
444447 }
445448 }
446449
447450
448451 @Callable(ay)
449-func constructor (dh,di,ap,dj,dk,as) = {
450- let dl = ax(ay)
451- if ((dl == dl))
452- then ([IntegerEntry(aU(), 0), StringEntry(al(), at(di, ap, dj, dk, as)), StringEntry(s(), dh)] ++ bD(0, 0, 0, 0))
452+func constructor (dj,dk,ap,dl,dm,as) = {
453+ let dn = ax(ay)
454+ if ((dn == dn))
455+ then ([IntegerEntry(aU(), 0), StringEntry(al(), at(dk, ap, dl, dm, as)), StringEntry(s(), dj)] ++ bD(0, 0, 0, 0))
453456 else throw("Strict value is not equal to itself.")
454457 }
455458
456459
457460
458461 @Callable(ay)
459462 func lock (aO) = {
460- let dm = am()
461- let dn = dm[ag]
462- let ao = fromBase58String(dn)
463- let ap = parseIntValue(dm[ah])
464- let aq = parseIntValue(dm[ai])
465- let ar = parseIntValue(dm[aj])
466- let as = addressFromStringValue(dm[ak])
463+ let do = am()
464+ let dp = do[ag]
465+ let ao = fromBase58String(dp)
466+ let ap = parseIntValue(do[ah])
467+ let aq = parseIntValue(do[ai])
468+ let ar = parseIntValue(do[aj])
469+ let as = addressFromStringValue(do[ak])
467470 if ((size(ay.payments) != 1))
468471 then throw("invalid payment - exact one payment must be attached")
469472 else {
470473 let cf = ay.payments[0]
471- let do = cf.amount
474+ let dq = cf.amount
472475 if ((ao != value(cf.assetId)))
473- then throw((("invalid asset is in payment - " + dn) + " is expected"))
476+ then throw((("invalid asset is in payment - " + dp) + " is expected"))
474477 else {
475- let dp = aU()
476- let cm = toString(ay.caller)
477- let dq = isDefined(getString(aV(cm)))
478- let cq = if (dq)
479- then value(getString(aV(cm)))
480- else toString(k(this, dp))
481- let aL = parseIntValue(cq)
478+ let dr = aU()
479+ let co = toString(ay.caller)
480+ let ds = isDefined(getString(aV(co)))
481+ let cs = if (ds)
482+ then value(getString(aV(co)))
483+ else toString(k(this, dr))
484+ let aL = parseIntValue(cs)
482485 let by = height
483- let bX = aY(cq)
484- let bY = aZ(cq)
485- let bW = aX(cq)
486- if ((ap > do))
486+ let bX = aY(cs)
487+ let bY = aZ(cs)
488+ let bW = aX(cs)
489+ if ((ap > dq))
487490 then throw(("amount is less then minLockAmount=" + toString(ap)))
488491 else if ((aq > aO))
489492 then throw(("passed duration is less then minLockDuration=" + toString(aq)))
490493 else if ((aO > ar))
491494 then throw(("passed duration is greater then maxLockDuration=" + toString(ar)))
492- else if (if (dq)
495+ else if (if (ds)
493496 then ((k(this, bX) + k(this, bY)) >= by)
494497 else false)
495498 then throw("there is an active lock - consider to use increaseLock")
496499 else if ((h(this, bW) > 0))
497500 then throw(("there are locked WXs - consider to use increaseLock " + bW))
498501 else {
499- let dr = fraction(aO, c, ar)
500- let ds = fraction(do, dr, c)
501- let dt = n(invoke(as, "calcGwxParamsREADONLY", [ds, by, aO], nil))
502- let bz = q(dt[0])
503- let bA = q(dt[1])
504- let bd = toString(q(dt[2]))
505- let cz = k(bs, Z())
506- let cA = k(bs, ab())
507- let cB = k(bs, ad())
508- let bT = if ((height > cB))
509- then cB
502+ let dt = fraction(aO, c, ar)
503+ let du = fraction(dq, dt, c)
504+ let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, by, aO], nil))
505+ let bz = q(dv[0])
506+ let bA = q(dv[1])
507+ let bd = toString(q(dv[2]))
508+ let cB = k(bs, Z())
509+ let cC = k(bs, ab())
510+ let cD = k(bs, ad())
511+ let bT = if ((height > cD))
512+ then cD
510513 else height
511- let cC = max([(bT - cA), 0])
512- let cE = bj(cq)
513- let cG = (((cz * cC) * 2) / 3)
514- let cM = bm(cq)
515- let cN = bn()
516- let cO = ((ds * aO) / 2)
517- let cP = h(this, cN)
518- let cQ = bq()
519- let cR = valueOrElse(getInteger(this, cQ), 0)
520- let du = if (dq)
514+ let cE = max([(bT - cC), 0])
515+ let cG = bj(cs)
516+ let cI = (((cB * cE) * 2) / 3)
517+ let cO = bm(cs)
518+ let cP = bn()
519+ let cQ = ((du * aO) / 2)
520+ let cR = h(this, cP)
521+ let cS = bq()
522+ let cT = valueOrElse(getInteger(this, cS), 0)
523+ let dw = if (ds)
521524 then nil
522- else [IntegerEntry(dp, (aL + 1)), StringEntry(aV(cm), cq), StringEntry(aW(cq), cm)]
523- ((((du ++ bV(cm, cq, do, by, aO, bz, bA, bd)) ++ bD(do, aO, 1, if (dq)
525+ else [IntegerEntry(dr, (aL + 1)), StringEntry(aV(co), cs), StringEntry(aW(cs), co)]
526+ ((((dw ++ bV(co, cs, dq, by, aO, bz, bA, bd)) ++ bD(dq, aO, 1, if (ds)
524527 then 0
525- else 1)) :+ bv("lock", cm, do, by, aO, bz, bA, ay)) ++ [IntegerEntry(cE, cG), IntegerEntry(cQ, (cR + ds))])
528+ else 1)) :+ bv("lock", co, dq, by, aO, bz, bA, ay)) ++ [IntegerEntry(cG, cI), IntegerEntry(cS, (cT + du))])
526529 }
527530 }
528531 }
529532 }
530533
531534
532535
533536 @Callable(ay)
534-func increaseLock (dv) = {
535- let dm = am()
536- let dn = dm[ag]
537- let ao = fromBase58String(dn)
538- let aq = parseIntValue(dm[ai])
539- let ar = parseIntValue(dm[aj])
540- let as = addressFromStringValue(dm[ak])
541- let do = cd(ay, ao)
542- let cm = toString(ay.caller)
543- let cp = aJ(cm)
544- let cq = cp[aB]
545- let dw = parseIntValue(cp[aC])
546- let by = parseIntValue(cp[aD])
547- let dx = parseIntValue(cp[aE])
548- let dy = (by + dx)
549- let dz = max([(dy - height), 0])
550- let dA = (dw + do)
551- let dB = (dz + dv)
552- if ((0 > dv))
537+func increaseLock (dx) = {
538+ let do = am()
539+ let dp = do[ag]
540+ let ao = fromBase58String(dp)
541+ let aq = parseIntValue(do[ai])
542+ let ar = parseIntValue(do[aj])
543+ let as = addressFromStringValue(do[ak])
544+ let dq = cd(ay, ao)
545+ let co = toString(ay.caller)
546+ let cr = aJ(co)
547+ let cs = cr[aB]
548+ let dy = parseIntValue(cr[aC])
549+ let by = parseIntValue(cr[aD])
550+ let dz = parseIntValue(cr[aE])
551+ let dA = (by + dz)
552+ let dB = max([(dA - height), 0])
553+ let dC = (dy + dq)
554+ let dD = (dB + dx)
555+ if ((0 > dx))
553556 then throw("duration is less then zero")
554- else if ((aq > dB))
557+ else if ((aq > dD))
555558 then throw(("lockDurationNew is less then minLockDuration=" + toString(aq)))
556- else if ((dB > ar))
559+ else if ((dD > ar))
557560 then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(ar)))
558561 else {
559- let dr = fraction(dB, c, ar)
560- let ds = fraction(dA, dr, c)
561- let dC = height
562- let dt = n(invoke(as, "calcGwxParamsREADONLY", [ds, dC, dB], nil))
563- let bz = q(dt[0])
564- let bA = q(dt[1])
565- let bd = toString(q(dt[2]))
566- let cz = k(bs, Z())
567- let cA = k(bs, ab())
568- let cB = k(bs, ad())
569- let bT = if ((height > cB))
570- then cB
562+ let dt = fraction(dD, c, ar)
563+ let du = fraction(dC, dt, c)
564+ let dE = height
565+ let dv = n(invoke(as, "calcGwxParamsREADONLY", [du, dE, dD], nil))
566+ let bz = q(dv[0])
567+ let bA = q(dv[1])
568+ let bd = toString(q(dv[2]))
569+ let cB = k(bs, Z())
570+ let cC = k(bs, ab())
571+ let cD = k(bs, ad())
572+ let bT = if ((height > cD))
573+ then cD
571574 else height
572- let cC = max([(bT - cA), 0])
573- let cE = bj(cq)
574- let cF = h(this, cE)
575- let cG = (((cz * cC) * 2) / 3)
576- let cH = (cG - cF)
577- if ((0 > cH))
575+ let cE = max([(bT - cC), 0])
576+ let cG = bj(cs)
577+ let cH = h(this, cG)
578+ let cI = (((cB * cE) * 2) / 3)
579+ let cJ = (cI - cH)
580+ if ((0 > cJ))
578581 then throw("wrong calculations")
579582 else {
580- let cM = bm(cq)
581- let cN = bn()
582- let cO = h(this, cM)
583- let cP = h(this, cN)
584- let dD = cg(cm)
585- let dE = (ds - dD)
586- if ((0 > dE))
587- then throw(("gwxDiff is less then 0: " + toString(dE)))
583+ let cO = bm(cs)
584+ let cP = bn()
585+ let cQ = h(this, cO)
586+ let cR = h(this, cP)
587+ let dF = cl(co)
588+ let dG = (du - dF)
589+ if ((0 > dG))
590+ then throw(("gwxDiff is less then 0: " + toString(dG)))
588591 else {
589- let cQ = bq()
590- let cR = valueOrElse(getInteger(this, cQ), 0)
591- let cT = bo(cq)
592- let cU = h(this, cT)
593- let db = fraction(cH, dD, cR)
594- let dF = ((ds * dB) / 2)
595- let dG = ((dD * dz) / 2)
596- let dH = (dF - dG)
597- (((bV(cm, cq, dA, dC, dB, bz, bA, bd) ++ bD(do, dv, 0, 0)) :+ bv("lock", cm, do, by, dB, bz, bA, ay)) ++ [IntegerEntry(cQ, (cR + dE))])
592+ let cS = bq()
593+ let cT = valueOrElse(getInteger(this, cS), 0)
594+ let cV = bo(cs)
595+ let cW = h(this, cV)
596+ let dd = fraction(cJ, dF, cT)
597+ let dH = ((du * dD) / 2)
598+ let dI = ((dF * dB) / 2)
599+ let dJ = (dH - dI)
600+ (((bV(co, cs, dC, dE, dD, bz, bA, bd) ++ bD(dq, dx, 0, 0)) :+ bv("lock", co, dq, by, dD, bz, bA, ay)) ++ [IntegerEntry(cS, (cT + dG))])
598601 }
599602 }
600603 }
601604 }
602605
603606
604607
605608 @Callable(ay)
606-func claimWxBoost (cl,cm) = if ((bt != ay.caller))
609+func claimWxBoost (cn,co) = if ((bt != ay.caller))
607610 then throw("permissions denied")
608611 else {
609- let dI = ck(cl, cm, false)
610- let de = dI._1
611- let df = dI._2
612- let dg = dI._3
613- $Tuple2(df, [de])
612+ let dK = cm(cn, co, false)
613+ let dg = dK._1
614+ let dh = dK._2
615+ let di = dK._3
616+ $Tuple2(dh, [dg])
614617 }
615618
616619
617620
618621 @Callable(ay)
619-func claimWxBoostREADONLY (cl,cm) = {
620- let dJ = ck(cl, cm, true)
621- let de = dJ._1
622- let df = dJ._2
623- let dg = dJ._3
624- $Tuple2(nil, [de, dg])
622+func claimWxBoostREADONLY (cn,co) = {
623+ let dL = cm(cn, co, true)
624+ let dg = dL._1
625+ let dh = dL._2
626+ let di = dL._3
627+ $Tuple2(nil, [dg, di])
625628 }
626629
627630
628631
629632 @Callable(ay)
630633 func unlock (aI) = {
631- let cp = aJ(aI)
632- let cq = cp[aB]
633- let dw = parseIntValue(cp[aC])
634- let by = parseIntValue(cp[aD])
635- let dx = parseIntValue(cp[aE])
636- let dy = (by + dx)
637- let dm = am()
638- let ao = fromBase58String(dm[ag])
639- let as = addressFromStringValue(dm[ak])
640- if ((dy >= height))
641- then throw((("wait " + toString(dy)) + " to unlock"))
642- else if ((0 >= dw))
634+ let cr = aJ(aI)
635+ let cs = cr[aB]
636+ let dy = parseIntValue(cr[aC])
637+ let by = parseIntValue(cr[aD])
638+ let dz = parseIntValue(cr[aE])
639+ let dA = (by + dz)
640+ let do = am()
641+ let ao = fromBase58String(do[ag])
642+ let as = addressFromStringValue(do[ak])
643+ if ((dA >= height))
644+ then throw((("wait " + toString(dA)) + " to unlock"))
645+ else if ((0 >= dy))
643646 then throw("nothing to unlock")
644647 else {
645648 let bd = valueOrElse(getInteger(as, ae()), 0)
646- (((bV(aI, cq, 0, by, dx, 0, 0, toString(bd)) ++ bD(-(dw), 0, 0, -1)) :+ bv("unlock", aI, dw, by, dx, 0, 0, ay)) :+ ScriptTransfer(addressFromStringValue(aI), dw, ao))
649+ (((bV(aI, cs, 0, by, dz, 0, 0, toString(bd)) ++ bD(-(dy), 0, 0, -1)) :+ bv("unlock", aI, dy, by, dz, 0, 0, ay)) :+ ScriptTransfer(addressFromStringValue(aI), dy, ao))
647650 }
648651 }
649652
650653
651654
652655 @Callable(ay)
653656 func gwxUserInfoREADONLY (aI) = {
654- let aS = cg(aI)
657+ let aS = cl(aI)
655658 $Tuple2(nil, [aS])
656659 }
657660
658661
659662
660663 @Callable(ay)
661-func setManager (dK) = {
662- let dl = ax(ay)
663- if ((dl == dl))
664+func getUserGwxAmountAtHeightREADONLY (aI,ch) = {
665+ let aS = cg(aI, ch)
666+ $Tuple2(nil, aS)
667+ }
668+
669+
670+
671+@Callable(ay)
672+func setManager (dM) = {
673+ let dn = ax(ay)
674+ if ((dn == dn))
664675 then {
665- let dL = fromBase58String(dK)
666- if ((dL == dL))
667- then [StringEntry(Y(), dK)]
676+ let dN = fromBase58String(dM)
677+ if ((dN == dN))
678+ then [StringEntry(Y(), dM)]
668679 else throw("Strict value is not equal to itself.")
669680 }
670681 else throw("Strict value is not equal to itself.")
671682 }
672683
673684
674685
675686 @Callable(ay)
676687 func confirmManager () = {
677- let dM = aw()
678- let dN = if (isDefined(dM))
688+ let dO = aw()
689+ let dP = if (isDefined(dO))
679690 then true
680691 else throw("No pending manager")
681- if ((dN == dN))
692+ if ((dP == dP))
682693 then {
683- let dO = if ((ay.callerPublicKey == value(dM)))
694+ let dQ = if ((ay.callerPublicKey == value(dO)))
684695 then true
685696 else throw("You are not pending manager")
686- if ((dO == dO))
687- then [StringEntry(X(), toBase58String(value(dM))), DeleteEntry(Y())]
697+ if ((dQ == dQ))
698+ then [StringEntry(X(), toBase58String(value(dO))), DeleteEntry(Y())]
688699 else throw("Strict value is not equal to itself.")
689700 }
690701 else throw("Strict value is not equal to itself.")
691702 }
692703
693704
694-@Verifier(dP)
695-func dQ () = {
696- let dR = {
705+@Verifier(dR)
706+func dS () = {
707+ let dT = {
697708 let o = au()
698709 if ($isInstanceOf(o, "ByteVector"))
699710 then {
700711 let aA = o
701712 aA
702713 }
703714 else if ($isInstanceOf(o, "Unit"))
704- then dP.senderPublicKey
715+ then dR.senderPublicKey
705716 else throw("Match error")
706717 }
707- sigVerify(dP.bodyBytes, dP.proofs[0], dR)
718+ sigVerify(dR.bodyBytes, dR.proofs[0], dT)
708719 }
709720

github/deemru/w8io/169f3d6 
186.01 ms