tx · 8qapBEDzbTWJPvQ1cEwWJS2XPgE56qn3dLHANVPhHCn3

3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37:  -0.01400000 Waves

2021.09.16 16:03 [1705642] smart account 3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37 > SELF 0.00000000 Waves

{ "type": 13, "id": "8qapBEDzbTWJPvQ1cEwWJS2XPgE56qn3dLHANVPhHCn3", "fee": 1400000, "feeAssetId": null, "timestamp": 1631797474852, "version": 2, "chainId": 84, "sender": "3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37", "senderPublicKey": "4bwUHdA4vTBJ1k43dYKiPYTDqm3QqiZXNGXoQstGAD1k", "proofs": [ "5CM9MvrBciK2oDkcfDraXzcg8aAjDA5wz8Nkyq1BPHPf3fm63Z9ix3mk7xX1bw7cF3PxJv9kzrhyZahX4AJmDTSp", "3FgVVa4kZCpXtCRD4iwhPZjqJ2gPPLruGBuFEzgUoXwhhrjKeh59vrgscnBCwjeMdyX429T6AM833bKemzL9q9tx" ], "script": "base64:AAIFAAAAAAAAEBwIAhIDCgEIEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQESABoNCgJhMRIHdmVyc2lvbhoQCgJhMhIKa2V5VmVyc2lvbhoPCgJhMxIJa2V5QWN0aXZlGhEKAmE0EgtrZXlBc3NldElkQRoRCgJhNRILa2V5QXNzZXRJZEIaEQoCYTYSC2tleUJhbGFuY2VBGhEKAmE3EgtrZXlCYWxhbmNlQhoVCgJhOBIPa2V5QmFsYW5jZUluaXRBGhUKAmE5Eg9rZXlCYWxhbmNlSW5pdEIaFQoCYjESD2tleVNoYXJlQXNzZXRJZBoZCgJiMhITa2V5U2hhcmVBc3NldFN1cHBseRoTCgJiMxINa2V5Q29tbWlzc2lvbhohCgJiNBIba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyGg4KAmI1EghrZXlDYXVzZRoVCgJiNhIPa2V5Rmlyc3RIYXJ2ZXN0GhsKAmI3EhVrZXlGaXJzdEhhcnZlc3RIZWlnaHQaEwoCYjgSDWtleVNoYXJlTGltaXQaEwoCYjkSDWtleUJhc2VQZXJpb2QaFQoCYzESD2tleVBlcmlvZExlbmd0aBoUCgJjMhIOa2V5U3RhcnRIZWlnaHQaHAoCYzMSFmtleU9yYWNsZUFzc2V0UHJpb3JpdHkaGQoCYzQSE2tleU9yYWNsZVNjcmlwdEhhc2gaFwoCYzUSEWtleUluaXRQb29sSGVpZ2h0GhUKAmM2Eg9rZXlBZG1pblB1YktleTEaFQoCYzcSD2tleUFkbWluUHViS2V5MhoVCgJjOBIPa2V5QWRtaW5QdWJLZXkzGgwKAmM5EgZvcmFjbGUaEQoCZDESC2dldEFkbWluUHViGhEKAmQyEgtrZXlBZG1pblB1YhoNCgJkMxIHJG1hdGNoMBoMCgJkNBIGc3RyaW5nGg0KAmQ1Egdub3RoaW5nGhIKAmQ2EgxhZG1pblB1YktleTEaEgoCZDcSDGFkbWluUHViS2V5MhoSCgJkOBIMYWRtaW5QdWJLZXkzGhoKAmQ5EhRhZG1pblB1YktleVN0YXJ0U3RvcBoYCgJlMRISYWRtaW5QdWJLZXlTdGFraW5nGhMKAmUyEg13YWxsZXRBZGRyZXNzGhMKAmUzEg12b3RpbmdBZGRyZXNzGgoKAmU0EgRVU0ROGgoKAmU1EgROU0JUGgoKAmU2EgRTV09QGgoKAmU3EgRFVVJOGhwKAmU4EhZzdGFraW5nVVNETk5TQlRBZGRyZXNzGhgKAmU5EhJzdGFraW5nRVVSTkFkZHJlc3MaGgoCZjESFFVTRE5Ub1dhdmVzRXhjaGFuZ2VyGhkKAmYyEhNVU0ROVG9OU0JURXhjaGFuZ2VyGhYKAmYzEhBzdGFraW5nRmVlSW5VU0ROGhYKAmY0EhBzdGFraW5nRmVlSW5FVVJOGhAKAmY1EgpiYXNlUGVyaW9kGhEKAmY2EgtzdGFydEhlaWdodBoSCgJmNxIMcGVyaW9kTGVuZ3RoGhsKAmY4EhVmaXJzdEhhcnZlc3RFbmRQZXJpb2QaDgoCZjkSCGlzQWN0aXZlGhEKAmcxEgtzdHJBc3NldElkQRoRCgJnMhILc3RyQXNzZXRJZEIaDgoCZzMSCGFzc2V0SWRBGg4KAmc0Eghhc3NldElkQhoQCgJnNRIKYXNzZXROYW1lQRoICgJnNhICaWQaCwoCZzcSBXdhdmVzGhAKAmc4Egphc3NldE5hbWVCGg4KAmc5EghiYWxhbmNlQRoOCgJoMRIIYmFsYW5jZUIaEgoCaDISDHNoYXJlQXNzZXRJZBoWCgJoMxIQc2hhcmVBc3NldFN1cHBseRoQCgJoNBIKY29tbWlzc2lvbhoaCgJoNRIUY29tbWlzc2lvbkdvdmVybmFuY2UaHgoCaDYSGGNvbW1pc3Npb25TY2FsZURlbGltaXRlchoRCgJoNxILc2NhbGVWYWx1ZTMaEQoCaDgSC3NjYWxlVmFsdWU4GiAKAmg5EhpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlchoXCgJpMRIRc2NhbGVWYWx1ZThEaWdpdHMaHwoCaTISGWNvbWlzc2lvbkZvckluaXRhbGl6YXRpb24aFAoCaTMSDmFjY291bnRCYWxhbmNlGg0KAmk0Egdhc3NldElkGhIKAmk1EgxzdGFrZWRBbW91bnQaHAoCaTYSFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQaCQoCaTcSA2FJZBoHCgJpOBIBaRoUCgJpORIOaXNBbGxvd2VkQXNzZXQaEwoCajESDXN0YWtlZEFtb3VudEEaEwoCajISDXN0YWtlZEFtb3VudEIaEAoCajMSCmFzc2V0SW5pdEEaEAoCajQSCmFzc2V0SW5pdEIaFwoCajUSEWF2YWlsYWJsZUJhbGFuY2VBGhcKAmo2EhFhdmFpbGFibGVCYWxhbmNlQhofCgJqNxIZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQRofCgJqOBIZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQhoWCgJqORIQaGFzRW5vdWdoQmFsYW5jZRoSCgJrMRIMZ2V0QXNzZXRJbmZvGg4KAmsyEghzdHJpbmdJZBoKCgJrMxIEaW5mbxocCgJrNBIWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZxoOCgJrNRIIYXNzZXRTdHIaDQoCazYSB3N1c3BlbmQaCwoCazcSBWNhdXNlGhYKAms4EhBkZWR1Y3RTdGFraW5nRmVlGgwKAms5EgZhbW91bnQaEwoCbDESDXNlY29uZEFzc2V0SWQaDwoCbDISCXN0YWtpbkZlZRoMCgJsMxIGcmVzdWx0GhMKAmw0Eg1nZXRTdGFraW5nRmVlGicKAmw1EiF0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2UaDwoCbDYSCWF2YWlsYWJsZRoPCgJsNxIJYXNzZXROYW1lGigKAmw4EiJ0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2VzGg0KAmw5EgdhbW91bnRBGg0KAm0xEgdhbW91bnRCGhcKAm0yEhFzdXNwZW5kU3VzcGljaW91cxoUCgJtMxIOdXNlckFkZHJlc3NTdHIaEQoCbTQSCyR0MDgzNjA4NDM3GhAKAm01EgpwbXRBbW91bnQxGhEKAm02EgtwbXRBc3NldElkMRoRCgJtNxILJHQwODQ0Mjg1MTkaEAoCbTgSCnBtdEFtb3VudDIaEQoCbTkSC3BtdEFzc2V0SWQyGhEKAm4xEgskdDA4NTI0ODYwNxoTCgJuMhINcG10QW1vdW50U1dPUBoUCgJuMxIOcG10QXNzZXRJZFNXT1AaCwoCbjQSBWNoZWNrGhQKAm41Eg51c2VyU2NyaXB0SGFzaBoRCgJuNhILdXNlckFkZHJlc3MaFAoCbjcSDnBtdFN0ckFzc2V0SWQxGhQKAm44Eg5wbXRTdHJBc3NldElkMhoUCgJuORIOYXNzZXQxUHJpb3JpdHkaFAoCbzESDmFzc2V0MlByaW9yaXR5GhIKAm8yEgwkdDA5OTYzMTAxOTAaEAoCbzMSCnBtdEFtb3VudEEaEQoCbzQSC3BtdEFzc2V0SWRBGhAKAm81EgpwbXRBbW91bnRCGhEKAm82EgtwbXRBc3NldElkQhoTCgJvNxINJHQwMTAxOTkxMDI3NhoUCgJvOBIOcG10U3RyQXNzZXRJZEEaEwoCbzkSDXBtdEFzc2V0TmFtZUEaEgoCcDESDHBtdERlY2ltYWxzQRoTCgJwMhINJHQwMTAyODUxMDM2MhoUCgJwMxIOcG10U3RyQXNzZXRJZEIaEwoCcDQSDXBtdEFzc2V0TmFtZUIaEgoCcDUSDHBtdERlY2ltYWxzQhoPCgJwNhIJYWRkUGFyYW1zGg0KAnA3EgdhZGRQb29sGg8KAnA4EglzaGFyZU5hbWUaFgoCcDkSEHNoYXJlRGVzY3JpcHRpb24aEwoCcTESDXNoYXJlRGVjaW1hbHMaCgoCcTISBGFyZzEaCgoCcTMSBGFyZzIaCgoCcTQSBGFyZzMaGAoCcTUSEnNoYXJlSW5pdGlhbFN1cHBseRoQCgJxNhIKc2hhcmVJc3N1ZRoSCgJxNxIMc2hhcmVJc3N1ZUlkGg8KAnE4EgliYXNlRW50cnkaEAoCcTkSCnNoYXJlTGltaXQaFwoCcjESEXNsaXBwYWdlVG9sZXJhbmNlGhMKAnIyEg0kdDAxMzI4MjEzMzU5GhMKAnIzEg0kdDAxMzM2ODEzNDQ1GhAKAnI0Egp0b2tlblJhdGlvGhkKAnI1EhNyYXRpb1NoYXJlVG9rZW5zSW5BGhkKAnI2EhNyYXRpb1NoYXJlVG9rZW5zSW5CGhsKAnI3EhVzaGFyZVRva2VuVG9QYXlBbW91bnQaEwoCcjgSDSR0MDE3ODQ0MTc5OTQaDwoCcjkSCXBtdEFtb3VudBoQCgJzMRIKcG10QXNzZXRJZBoSCgJzMhIMYW1vdW50VG9QYXlBGhIKAnMzEgxhbW91bnRUb1BheUIaGAoCczQSEm1pbkFtb3VudFRvUmVjZWl2ZRoTCgJzNRINJHQwMTkyMjAxOTI5NRoTCgJzNhINY2FsY3VsYXRlRmVlcxoPCgJzNxIJdG9rZW5Gcm9tGg0KAnM4Egd0b2tlblRvGhYKAnM5EhBhbW91bnRXaXRob3V0RmVlGhMKAnQxEg1hbW91bnRXaXRoRmVlGhYKAnQyEhBnb3Zlcm5hbmNlUmV3YXJkGhEKAnQzEgthc3NldElkU2VuZBoTCgJ0NBINJHQwMjA1NjkyMDY2MBoRCgJ0NRILbmV3QmFsYW5jZUEaEQoCdDYSC25ld0JhbGFuY2VCGhMKAnQ3Eg0kdDAyMTQ3OTIxNTcwGhEKAnQ4EgthbW91bnRMZWF2ZRojCgJ0ORIddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEaIwoCdTESHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCGhMKAnUyEg1hbW91bnRFbnJvbGxBGhMKAnUzEg1hbW91bnRFbnJvbGxCGggKAnU0EgJ0eBoMCgJ1NRIGdmVyaWZ5GhkKAnU2EhNtdWx0aVNpZ25lZEJ5QWRtaW5zGhgKAnU3EhJhZG1pblB1YktleTFTaWduZWQaGAoCdTgSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJ1ORISYWRtaW5QdWJLZXkzU2lnbmVkGgkKAnYxEgNpbnYaGQoCdjISE2NhbGxUYWtlSW50b0FjY291bnQaHAoCdjMSFmNhbGxFbmFibGVGaXJzdEhhcnZlc3QaEQoCdjQSC2NhbGxTdGFraW5nGhUKAnY1Eg9leGNoYW5nZVRvV2F2ZXMaFQoCdjYSD2V4Y2hhbmdlVG9OU0JUcxoTCgJ2NxINc2lnbmVkQnlBZG1pbgAAAFgAAAAAAmExAgAAAAUxLjAuMAAAAAACYTICAAAAB3ZlcnNpb24AAAAAAmEzAgAAAAZhY3RpdmUAAAAAAmE0AgAAAApBX2Fzc2V0X2lkAAAAAAJhNQIAAAAKQl9hc3NldF9pZAAAAAACYTYCAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAACYTcCAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAACYTgCAAAADEFfYXNzZXRfaW5pdAAAAAACYTkCAAAADEJfYXNzZXRfaW5pdAAAAAACYjECAAAADnNoYXJlX2Fzc2V0X2lkAAAAAAJiMgIAAAASc2hhcmVfYXNzZXRfc3VwcGx5AAAAAAJiMwIAAAAKY29tbWlzc2lvbgAAAAACYjQCAAAAGmNvbW1pc3Npb25fc2NhbGVfZGVsaW1pdGVyAAAAAAJiNQIAAAAOc2h1dGRvd25fY2F1c2UAAAAAAmI2AgAAAA1maXJzdF9o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", "height": 1705642, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AcrRzHEcEPYSC45RLLJBonvpz8H2qVT6RDcTgZrDLzPb Next: 8JPZfJW9oMChr8rHqvf9neeS4JRbXM2aNxNaTK9yN4T7 Diff:
OldNewDifferences
4545
4646 let v = "script_hash_cpmm"
4747
48-let w = "init_pool_height_"
48+let w = "init_pool_height"
4949
5050 let x = "admin_pub_1"
5151
409409 let bH = bG._1
410410 let bI = bG._2
411411 let bJ = bG._3
412- let bK = invoke(A, "addPool", [this, ((bE + "_") + bI)], nil)
413- if ((bK == bK))
412+ let bK = [toString(this), ((bE + "_") + bI), bD, bH]
413+ let bL = invoke(A, "addPool", bK, nil)
414+ if ((bL == bL))
414415 then if (!(isDefined(getString(A, ("pool_" + toString(this))))))
415416 then throw("Pool is not added")
416417 else {
417- let bL = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
418- let bM = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
419- let bN = ((bF + bJ) / 2)
420- let bO = pow(by, bF, 5, 1, bF, DOWN)
421- let bP = pow(bA, bJ, 5, 1, bJ, DOWN)
422- let bQ = pow(10, 0, bN, 0, 0, DOWN)
423- let bR = fraction(bO, bP, bQ)
424- let bS = Issue(bL, bM, bR, bN, true)
425- let bT = calculateAssetId(bS)
426- let bU = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(l, ao), IntegerEntry(m, aq), bS, StringEntry(j, toBase58String(bT)), IntegerEntry(k, bR), IntegerEntry(w, height), ScriptTransfer(bs, bR, bT), ScriptTransfer(L, av, P)]
427- bU
418+ let bM = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
419+ let bN = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
420+ let bO = ((bF + bJ) / 2)
421+ let bP = pow(by, bF, 5, 1, bF, DOWN)
422+ let bQ = pow(bA, bJ, 5, 1, bJ, DOWN)
423+ let bR = pow(10, 0, bO, 0, 0, DOWN)
424+ let bS = fraction(bP, bQ, bR)
425+ let bT = Issue(bM, bN, bS, bO, true)
426+ let bU = calculateAssetId(bT)
427+ let bV = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(l, ao), IntegerEntry(m, aq), bT, StringEntry(j, toBase58String(bU)), IntegerEntry(k, bS), IntegerEntry(w, height), ScriptTransfer(bs, bS, bU), ScriptTransfer(L, av, P)]
428+ bV
428429 }
429430 else throw("Strict value is not equal to itself.")
430431 }
433434
434435
435436 @Callable(aB)
436-func keepLimitForFirstHarvest (bV) = if (!(ab))
437+func keepLimitForFirstHarvest (bW) = if (!(ab))
437438 then throw("DApp is inactive at this moment")
438439 else if (!(containsElement([G, H, I, K], aB.callerPublicKey)))
439440 then throw("Only admin can call this function")
440- else [IntegerEntry(q, bV)]
441+ else [IntegerEntry(q, bW)]
441442
442443
443444
444445 @Callable(aB)
445-func replenishWithTwoTokens (bW) = {
446+func replenishWithTwoTokens (bX) = {
446447 let bz = aB.payments[0].assetId
447448 let bB = aB.payments[1].assetId
448449 let by = aT(aB.payments[0].amount, bz, bB)
451452 then (al == 0)
452453 else false)
453454 then {
454- let bX = aM(bz)
455- let bD = bX._1
456- let bE = bX._2
457- let bF = bX._3
458- let bY = aM(bB)
459- let bH = bY._1
460- let bI = bY._2
461- let bJ = bY._3
462- let bZ = fraction(fraction(aF, as, by), ar, fraction(aG, as, bA))
455+ let bY = aM(bz)
456+ let bD = bY._1
457+ let bE = bY._2
458+ let bF = bY._3
459+ let bZ = aM(bB)
460+ let bH = bZ._1
461+ let bI = bZ._2
462+ let bJ = bZ._3
463+ let ca = fraction(fraction(aF, as, by), ar, fraction(aG, as, bA))
463464 if ((bz == bB))
464465 then throw("Assets must be different")
465466 else {
466- let bN = ((bF + bJ) / 2)
467- let bR = fraction(pow(by, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bN, 0, 0, DOWN))
467+ let bO = ((bF + bJ) / 2)
468+ let bS = fraction(pow(by, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bO, 0, 0, DOWN))
468469 if (!(ab))
469470 then throw("DApp is inactive at this moment")
470- else if (if ((0 > bW))
471+ else if (if ((0 > bX))
471472 then true
472- else (bW > at))
473- then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bW)))
473+ else (bX > at))
474+ then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bX)))
474475 else if ((size(aB.payments) != 2))
475476 then throw("Two attached assets expected")
476- else if (if ((((ar * (at - bW)) / at) > bZ))
477+ else if (if ((((ar * (at - bX)) / at) > ca))
477478 then true
478- else (bZ > ((ar * (at + bW)) / at)))
479+ else (ca > ((ar * (at + bX)) / at)))
479480 then throw("Incorrect assets amount: amounts must have the contract ratio")
480481 else if (if ((bz != ae))
481482 then true
482483 else (bB != af))
483484 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
484- else if ((bR == 0))
485+ else if ((bS == 0))
485486 then throw("Too small amount to replenish")
486487 else if (!(aL))
487488 then ([ScriptTransfer(aB.caller, by, bz), ScriptTransfer(aB.caller, bA, bB)] ++ bf())
488- else [Reissue(am, bR, true), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(k, bR), ScriptTransfer(aB.caller, bR, am)]
489+ else [Reissue(am, bS, true), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(k, bS), ScriptTransfer(aB.caller, bS, am)]
489490 }
490491 }
491492 else {
492- let bZ = fraction(fraction(ak, as, by), ar, fraction(al, as, bA))
493- let ca = fraction(by, as, ak)
494- let cb = fraction(bA, as, al)
495- let cc = fraction(min([ca, cb]), an, as)
493+ let ca = fraction(fraction(ak, as, by), ar, fraction(al, as, bA))
494+ let cb = fraction(by, as, ak)
495+ let cc = fraction(bA, as, al)
496+ let cd = fraction(min([cb, cc]), an, as)
496497 if (!(ab))
497498 then throw("DApp is inactive at this moment")
498- else if (if ((0 > bW))
499+ else if (if ((0 > bX))
499500 then true
500- else (bW > at))
501- then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bW)))
501+ else (bX > at))
502+ then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bX)))
502503 else if ((size(aB.payments) != 2))
503504 then throw("Two attached assets expected")
504505 else if (if ((bz != ae))
505506 then true
506507 else (bB != af))
507508 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
508- else if (if ((((ar * (at - bW)) / at) > bZ))
509+ else if (if ((((ar * (at - bX)) / at) > ca))
509510 then true
510- else (bZ > ((ar * (at + bW)) / at)))
511+ else (ca > ((ar * (at + bX)) / at)))
511512 then throw("Incorrect assets amount: amounts must have the contract ratio")
512- else if ((cc == 0))
513+ else if ((cd == 0))
513514 then throw("Too small amount to replenish")
514515 else if (!(aL))
515516 then ([ScriptTransfer(aB.caller, by, bz), ScriptTransfer(aB.caller, bA, bB)] ++ bf())
516- else [IntegerEntry(f, (ak + by)), IntegerEntry(g, (al + bA)), IntegerEntry(k, (an + cc)), Reissue(am, cc, true), ScriptTransfer(aB.caller, cc, am)]
517+ else [IntegerEntry(f, (ak + by)), IntegerEntry(g, (al + bA)), IntegerEntry(k, (an + cd)), Reissue(am, cd, true), ScriptTransfer(aB.caller, cd, am)]
517518 }
518519 }
519520
521522
522523 @Callable(aB)
523524 func withdraw () = {
524- let cd = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
525- let ce = cd._1
526- let cf = cd._2
527- let cg = aT(fraction(ce, ak, an), ae, af)
528- let ch = aT(fraction(ce, al, an), af, ae)
525+ let ce = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
526+ let cf = ce._1
527+ let cg = ce._2
528+ let ch = aT(fraction(cf, ak, an), ae, af)
529+ let ci = aT(fraction(cf, al, an), af, ae)
529530 if (!(ab))
530531 then throw("DApp is inactive at this moment")
531532 else if ((size(aB.payments) != 1))
532533 then throw("One attached payment expected")
533- else if ((cf != am))
534+ else if ((cg != am))
534535 then throw(("Incorrect asset attached. Expected: " + toBase58String(am)))
535536 else if (!(aL))
536- then ([ScriptTransfer(aB.caller, ce, cf)] ++ bf())
537- else if (if ((cg > aH))
537+ then ([ScriptTransfer(aB.caller, cf, cg)] ++ bf())
538+ else if (if ((ch > aH))
538539 then true
539- else (ch > aI))
540- then bc(cg, ch)
541- else [IntegerEntry(f, (ak - cg)), IntegerEntry(g, (al - ch)), IntegerEntry(k, (an - ce)), Burn(am, ce), ScriptTransfer(aB.caller, cg, ae), ScriptTransfer(aB.caller, ch, af)]
540+ else (ci > aI))
541+ then bc(ch, ci)
542+ else [IntegerEntry(f, (ak - ch)), IntegerEntry(g, (al - ci)), IntegerEntry(k, (an - cf)), Burn(am, cf), ScriptTransfer(aB.caller, ch, ae), ScriptTransfer(aB.caller, ci, af)]
542543 }
543544
544545
545546
546547 @Callable(aB)
547-func exchange (ci) = {
548- let cj = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
549- let ce = cj._1
550- let cf = cj._2
551- func ck (cl,cm) = {
552- let cn = fraction(cm, ce, (ce + cl))
553- let co = fraction(cn, (aq - ao), aq)
554- let cp = fraction(cn, ap, aq)
555- if ((ci > co))
556- then throw(((("Calculated amount to receive " + toString(co)) + " is less than specified minimum ") + toString(ci)))
557- else $Tuple3(cn, co, cp)
548+func exchange (cj) = {
549+ let ck = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
550+ let cf = ck._1
551+ let cg = ck._2
552+ func cl (cm,cn) = {
553+ let co = fraction(cn, cf, (cf + cm))
554+ let cp = fraction(co, (aq - ao), aq)
555+ let cq = fraction(co, ap, aq)
556+ if ((cj > cp))
557+ then throw(((("Calculated amount to receive " + toString(cp)) + " is less than specified minimum ") + toString(cj)))
558+ else $Tuple3(co, cp, cq)
558559 }
559560
560561 if (!(ab))
563564 then true
564565 else (al == 0))
565566 then throw("Can't exchange with zero balance")
566- else if ((0 >= ci))
567- then throw(("Minimal amount to receive must be positive. Actual: " + toString(ci)))
567+ else if ((0 >= cj))
568+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(cj)))
568569 else if ((size(aB.payments) != 1))
569570 then throw("One attached payment expected")
570571 else if (!(aL))
571- then ([ScriptTransfer(aB.caller, ce, cf)] ++ bf())
572- else if ((cf == ae))
572+ then ([ScriptTransfer(aB.caller, cf, cg)] ++ bf())
573+ else if ((cg == ae))
573574 then {
574- let cq = af
575- let cr = ck(ak, al)
576- let cn = cr._1
577- let co = cr._2
578- let cp = cr._3
579- let cs = (ak + ce)
580- let ct = ((al - co) - cp)
581- if (if ((aD >= cs))
575+ let cr = af
576+ let cs = cl(ak, al)
577+ let co = cs._1
578+ let cp = cs._2
579+ let cq = cs._3
580+ let ct = (ak + cf)
581+ let cu = ((al - cp) - cq)
582+ if (if ((aD >= ct))
582583 then true
583- else (aE >= ct))
584- then aZ(co, aI, aj)
585- else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aB.caller, co, cq), ScriptTransfer(L, cp, cq)]
584+ else (aE >= cu))
585+ then aZ(cp, aI, aj)
586+ else [IntegerEntry(f, ct), IntegerEntry(g, cu), ScriptTransfer(aB.caller, cp, cr), ScriptTransfer(L, cq, cr)]
586587 }
587- else if ((cf == af))
588+ else if ((cg == af))
588589 then {
589- let cq = ae
590- let cu = ck(al, ak)
591- let cn = cu._1
592- let co = cu._2
593- let cp = cu._3
594- let cs = ((ak - co) - cp)
595- let ct = (al + ce)
596- if (if ((aD >= cs))
590+ let cr = ae
591+ let cv = cl(al, ak)
592+ let co = cv._1
593+ let cp = cv._2
594+ let cq = cv._3
595+ let ct = ((ak - cp) - cq)
596+ let cu = (al + cf)
597+ if (if ((aD >= ct))
597598 then true
598- else (aE >= ct))
599- then aZ(co, aH, ag)
600- else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aB.caller, co, cq), ScriptTransfer(L, cp, cq)]
599+ else (aE >= cu))
600+ then aZ(cp, aH, ag)
601+ else [IntegerEntry(f, ct), IntegerEntry(g, cu), ScriptTransfer(aB.caller, cp, cr), ScriptTransfer(L, cq, cr)]
601602 }
602603 else throw(((("Incorrect asset attached. Expected: " + ac) + " or ") + ad))
603604 }
623624
624625
625626 @Callable(aB)
626-func takeIntoAccountExtraFunds (cv) = {
627- let cw = (aJ - ak)
628- let cx = (aK - al)
629- let cy = (cw - (if ((ae == unit))
630- then cv
627+func takeIntoAccountExtraFunds (cw) = {
628+ let cx = (aJ - ak)
629+ let cy = (aK - al)
630+ let cz = (cx - (if ((ae == unit))
631+ then cw
631632 else 0))
632- let cz = (cx - (if ((af == unit))
633- then cv
633+ let cA = (cy - (if ((af == unit))
634+ then cw
634635 else 0))
635636 if (!(ab))
636637 then throw("DApp is inactive at this moment")
637638 else if ((aB.caller != this))
638639 then throw("Only the DApp itself can call this function")
639- else if ((0 > cv))
640- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cv)))
641- else if (if ((0 > cw))
640+ else if ((0 > cw))
641+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cw)))
642+ else if (if ((0 > cx))
642643 then true
643- else (0 > cx))
644+ else (0 > cy))
644645 then aR("Enroll amount negative")
645- else if (if ((0 > cy))
646+ else if (if ((0 > cz))
646647 then true
647- else (0 > cz))
648+ else (0 > cA))
648649 then throw("Too large amountLeave")
649- else [IntegerEntry(f, (ak + cy)), IntegerEntry(g, (al + cz)), IntegerEntry(("last_income_" + ac), cy), IntegerEntry(("last_income_" + ad), cz)]
650+ else [IntegerEntry(f, (ak + cz)), IntegerEntry(g, (al + cA)), IntegerEntry(("last_income_" + ac), cz), IntegerEntry(("last_income_" + ad), cA)]
650651 }
651652
652653
655656 func enableFirstHarvest () = [BooleanEntry(o, true), IntegerEntry(p, (Y + (aa * Z)))]
656657
657658
658-@Verifier(cA)
659-func cB () = {
660- let cC = {
661- let cD = if (sigVerify(cA.bodyBytes, cA.proofs[0], G))
659+@Verifier(cB)
660+func cC () = {
661+ let cD = {
662+ let cE = if (sigVerify(cB.bodyBytes, cB.proofs[0], G))
662663 then 1
663664 else 0
664- let cE = if (sigVerify(cA.bodyBytes, cA.proofs[1], H))
665+ let cF = if (sigVerify(cB.bodyBytes, cB.proofs[1], H))
665666 then 1
666667 else 0
667- let cF = if (sigVerify(cA.bodyBytes, cA.proofs[2], I))
668+ let cG = if (sigVerify(cB.bodyBytes, cB.proofs[2], I))
668669 then 1
669670 else 0
670- (((cD + cE) + cF) >= 2)
671+ (((cE + cF) + cG) >= 2)
671672 }
672- let D = cA
673+ let D = cB
673674 if ($isInstanceOf(D, "InvokeScriptTransaction"))
674675 then {
675- let cG = D
676- let cH = if ((cG.dApp == this))
677- then (cG.function == "takeIntoAccountExtraFunds")
676+ let cH = D
677+ let cI = if ((cH.dApp == this))
678+ then (cH.function == "takeIntoAccountExtraFunds")
678679 else false
679- let cI = if ((cG.dApp == this))
680- then (cG.function == "enableFirstHarvest")
680+ let cJ = if ((cH.dApp == this))
681+ then (cH.function == "enableFirstHarvest")
681682 else false
682- let cJ = if (if ((cG.dApp == R))
683- then if (if (if (containsElement(["lockNeutrino", "lockNsbt"], cG.function))
684- then (size(cG.payments) == 1)
683+ let cK = if (if ((cH.dApp == R))
684+ then if (if (if ((cH.function == "lockNeutrino"))
685+ then (size(cH.payments) == 1)
685686 else false)
686- then if ((cG.payments[0].assetId == N))
687+ then if ((cH.payments[0].assetId == N))
687688 then true
688- else (cG.payments[0].assetId == O)
689+ else (cH.payments[0].assetId == O)
689690 else false)
690691 then true
691- else if (containsElement(["unlockNeutrino", "unlockNsbt"], cG.function))
692- then (size(cG.payments) == 0)
692+ else if ((cH.function == "unlockNeutrino"))
693+ then (size(cH.payments) == 0)
693694 else false
694695 else false)
695696 then true
696- else if ((cG.dApp == S))
697- then if (if (if ((cG.function == "startStaking"))
698- then (size(cG.payments) == 1)
697+ else if ((cH.dApp == S))
698+ then if (if (if ((cH.function == "startStaking"))
699+ then (size(cH.payments) == 1)
699700 else false)
700- then (cG.payments[0].assetId == Q)
701+ then (cH.payments[0].assetId == Q)
701702 else false)
702703 then true
703- else if ((cG.function == "stopStaking"))
704- then (size(cG.payments) == 0)
704+ else if ((cH.function == "stopStaking"))
705+ then (size(cH.payments) == 0)
705706 else false
706707 else false
707- let cK = if (if (if ((cG.dApp == T))
708- then (cG.function == "exchange")
708+ let cL = if (if (if ((cH.dApp == T))
709+ then (cH.function == "exchange")
709710 else false)
710711 then (ae == N)
711712 else false)
712713 then true
713714 else if (if ((af == N))
714- then (size(cG.payments) == 1)
715+ then (size(cH.payments) == 1)
715716 else false)
716- then (cG.payments[0].assetId == N)
717+ then (cH.payments[0].assetId == N)
717718 else false
718- let cL = if (if (if ((cG.dApp == U))
719- then (cG.function == "exchange")
719+ let cM = if (if (if ((cH.dApp == U))
720+ then (cH.function == "exchange")
720721 else false)
721722 then (ae == O)
722723 else false)
723724 then true
724725 else if (if ((af == O))
725- then (size(cG.payments) == 1)
726+ then (size(cH.payments) == 1)
726727 else false)
727- then (cG.payments[0].assetId == N)
728+ then (cH.payments[0].assetId == N)
728729 else false
729- let cM = if (if (if (sigVerify(cA.bodyBytes, cA.proofs[0], G))
730+ let cN = if (if (if (sigVerify(cB.bodyBytes, cB.proofs[0], G))
730731 then true
731- else sigVerify(cA.bodyBytes, cA.proofs[0], H))
732+ else sigVerify(cB.bodyBytes, cB.proofs[0], H))
732733 then true
733- else sigVerify(cA.bodyBytes, cA.proofs[0], I))
734+ else sigVerify(cB.bodyBytes, cB.proofs[0], I))
734735 then true
735- else sigVerify(cA.bodyBytes, cA.proofs[0], K)
736- if (if (if (if (if (if (cH)
737- then true
738- else cI)
736+ else sigVerify(cB.bodyBytes, cB.proofs[0], K)
737+ if (if (if (if (if (if (cI)
739738 then true
740739 else cJ)
741740 then true
742741 else cK)
743742 then true
744743 else cL)
745- then cM
744+ then true
745+ else cM)
746+ then cN
746747 else false)
747748 then true
748- else cC
749+ else cD
749750 }
750- else cC
751+ else cD
751752 }
752753
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "commission_scale_delimiter"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
3434 let p = "first_harvest_height"
3535
3636 let q = "share_limit_on_first_harvest"
3737
3838 let r = "base_period"
3939
4040 let s = "period_length"
4141
4242 let t = "start_height"
4343
4444 let u = "asset_priority_"
4545
4646 let v = "script_hash_cpmm"
4747
48-let w = "init_pool_height_"
48+let w = "init_pool_height"
4949
5050 let x = "admin_pub_1"
5151
5252 let y = "admin_pub_2"
5353
5454 let z = "admin_pub_3"
5555
5656 let A = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
5757
5858 func B (C) = {
5959 let D = getString(A, C)
6060 if ($isInstanceOf(D, "String"))
6161 then {
6262 let E = D
6363 fromBase58String(E)
6464 }
6565 else {
6666 let F = D
6767 throw("Admin public key is empty")
6868 }
6969 }
7070
7171
7272 let G = B(x)
7373
7474 let H = B(y)
7575
7676 let I = B(z)
7777
7878 let J = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7979
8080 let K = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
8181
8282 let L = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8383
8484 let M = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8585
8686 let N = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8787
8888 let O = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
8989
9090 let P = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
9191
9292 let Q = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
9393
9494 let R = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
9595
9696 let S = Address(base58'3MyVqAbmKWh339gF6hy8faWw1jGeTV2wnGE')
9797
9898 let T = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
9999
100100 let U = Address(base58'3Mye9wVR7d2mc6Y5ZJTu11svzgUQ7o8H9dA')
101101
102102 let V = 270000
103103
104104 let W = 234000
105105
106106 let X = valueOrErrorMessage(getInteger(M, r), "Empty keyBasePeriod")
107107
108108 let Y = valueOrErrorMessage(getInteger(M, t), "Empty keyStartHeight")
109109
110110 let Z = valueOrErrorMessage(getInteger(M, s), "Empty keyPeriodLength")
111111
112112 let aa = ((X + ((height - Y) / Z)) + 1)
113113
114114 let ab = getBooleanValue(this, c)
115115
116116 let ac = getStringValue(this, d)
117117
118118 let ad = getStringValue(this, e)
119119
120120 let ae = if ((ac == "WAVES"))
121121 then unit
122122 else fromBase58String(ac)
123123
124124 let af = if ((ad == "WAVES"))
125125 then unit
126126 else fromBase58String(ad)
127127
128128 let ag = {
129129 let D = ae
130130 if ($isInstanceOf(D, "ByteVector"))
131131 then {
132132 let ah = D
133133 value(assetInfo(ah)).name
134134 }
135135 else if ($isInstanceOf(D, "Unit"))
136136 then {
137137 let ai = D
138138 "WAVES"
139139 }
140140 else throw("Match error")
141141 }
142142
143143 let aj = {
144144 let D = af
145145 if ($isInstanceOf(D, "ByteVector"))
146146 then {
147147 let ah = D
148148 value(assetInfo(ah)).name
149149 }
150150 else if ($isInstanceOf(D, "Unit"))
151151 then {
152152 let ai = D
153153 "WAVES"
154154 }
155155 else throw("Match error")
156156 }
157157
158158 let ak = getIntegerValue(this, f)
159159
160160 let al = getIntegerValue(this, g)
161161
162162 let am = fromBase58String(getStringValue(this, j))
163163
164164 let an = getIntegerValue(this, k)
165165
166166 let ao = 3000
167167
168168 let ap = 1200
169169
170170 let aq = 1000000
171171
172172 let ar = 1000
173173
174174 let as = 100000000
175175
176176 let at = 1000
177177
178178 let au = 8
179179
180180 let av = 1000000000
181181
182182 func aw (ax) = {
183183 let D = ax
184184 if ($isInstanceOf(D, "ByteVector"))
185185 then {
186186 let ah = D
187187 assetBalance(this, ah)
188188 }
189189 else if ($isInstanceOf(D, "Unit"))
190190 then {
191191 let ai = D
192192 wavesBalance(this).available
193193 }
194194 else throw("Match error")
195195 }
196196
197197
198198 func ay (ax) = {
199199 let az = {
200200 let D = ax
201201 if ($isInstanceOf(D, "ByteVector"))
202202 then {
203203 let aA = D
204204 if (if ((aA == N))
205205 then true
206206 else (aA == O))
207207 then getInteger(R, ((("rpd_balance_" + toBase58String(aA)) + "_") + toString(this)))
208208 else if ((aA == Q))
209209 then getInteger(S, ((("%s%s%s__stakingBalance__" + toBase58String(aA)) + "__") + toString(this)))
210210 else 0
211211 }
212212 else if ($isInstanceOf(D, "Unit"))
213213 then 0
214214 else throw("Match error")
215215 }
216216 let D = az
217217 if ($isInstanceOf(D, "Int"))
218218 then {
219219 let aB = D
220220 aB
221221 }
222222 else 0
223223 }
224224
225225
226226 func aC (ax) = {
227227 let D = ax
228228 if ($isInstanceOf(D, "ByteVector"))
229229 then {
230230 let ah = D
231231 if (if ((ah == N))
232232 then true
233233 else (ah == P))
234234 then true
235235 else false
236236 }
237237 else if ($isInstanceOf(D, "Unit"))
238238 then {
239239 let ai = D
240240 true
241241 }
242242 else throw("Match error")
243243 }
244244
245245
246246 let aD = ay(ae)
247247
248248 let aE = ay(af)
249249
250250 let aF = getIntegerValue(this, h)
251251
252252 let aG = getIntegerValue(this, i)
253253
254254 let aH = (ak - aD)
255255
256256 let aI = (al - aE)
257257
258258 let aJ = (aw(ae) + aD)
259259
260260 let aK = (aw(af) + aE)
261261
262262 let aL = if ((aJ >= ak))
263263 then (aK >= al)
264264 else false
265265
266266 func aM (ax) = {
267267 let D = ax
268268 if ($isInstanceOf(D, "ByteVector"))
269269 then {
270270 let ah = D
271271 let aN = toBase58String(ah)
272272 let aO = valueOrErrorMessage(assetInfo(ah), (("Asset " + aN) + " doesn't exist"))
273273 $Tuple3(aN, aO.name, aO.decimals)
274274 }
275275 else if ($isInstanceOf(D, "Unit"))
276276 then {
277277 let ai = D
278278 $Tuple3("WAVES", "WAVES", 8)
279279 }
280280 else throw("Match error")
281281 }
282282
283283
284284 func aP (aQ) = if ((aQ == "WAVES"))
285285 then $Tuple3("WAVES", "WAVES", 8)
286286 else {
287287 let aN = aQ
288288 let ah = fromBase58String(aQ)
289289 let aO = valueOrErrorMessage(assetInfo(ah), (("Asset " + aN) + " doesn't exist"))
290290 $Tuple3(aN, aO.name, aO.decimals)
291291 }
292292
293293
294294 func aR (aS) = [BooleanEntry(c, false), StringEntry(n, aS)]
295295
296296
297297 func aT (aU,ax,aV) = if (if ((ax == N))
298298 then true
299299 else (ax == Q))
300300 then {
301301 let aW = if ((ax == N))
302302 then (V * (if ((aV == O))
303303 then 2
304304 else 1))
305305 else if ((ax == Q))
306306 then W
307307 else 0
308308 let aX = (aU - aW)
309309 if ((0 >= aX))
310310 then throw((((("Insufficient amount " + toString(aU)) + " to deduct staking fee ") + toString(aW)) + "USDN/EURN"))
311311 else aX
312312 }
313313 else aU
314314
315315
316316 func aY (ax,aV) = if ((ax == N))
317317 then (V * (if ((aV == O))
318318 then 2
319319 else 1))
320320 else if ((ax == Q))
321321 then W
322322 else 0
323323
324324
325325 func aZ (aU,ba,bb) = throw((((((((("Insufficient DApp balance to pay " + toString(aU)) + " ") + bb) + " due to staking. Available: ") + toString(ba)) + " ") + bb) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
326326
327327
328328 func bc (bd,be) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(bd)) + " ") + ag) + " and ") + toString(be)) + " ") + aj) + " due to staking. Available: ") + toString(aH)) + " ") + ag) + " and ") + toString(aI)) + " ") + aj) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
329329
330330
331331 func bf () = aR(((((((((((((((("Suspicious state. Actual balances: " + toString(aJ)) + " ") + ag) + ", ") + toString(aK)) + " ") + aj) + ". State: ") + toString(ak)) + " ") + ag) + ", ") + toString(al)) + " ") + aj))
332332
333333
334334 @Callable(aB)
335335 func init (bg) = {
336336 let bh = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
337337 let bi = bh._1
338338 let bj = bh._2
339339 let bk = $Tuple2(aB.payments[1].amount, aB.payments[1].assetId)
340340 let bl = bk._1
341341 let bm = bk._2
342342 let bn = $Tuple2(aB.payments[2].amount, aB.payments[2].assetId)
343343 let bo = bn._1
344344 let bp = bn._2
345345 let bq = isDataStorageUntouched(this)
346346 let br = scriptHash(this)
347347 let bs = addressFromStringValue(bg)
348348 if ((aB.caller == this))
349349 then throw("You can't call yourself")
350350 else if (if ((bp != P))
351351 then true
352352 else (bo != av))
353353 then throw("You need to attach 10 SWOP tokens")
354354 else if (if (!(aC(bj)))
355355 then !(aC(bm))
356356 else false)
357357 then throw("One of assets must be USDN, WAVES or SWOP")
358358 else if (if ((br != value(getBinary(A, v))))
359359 then true
360360 else !(bq))
361361 then throw("Unexpected script was found.")
362362 else if (isDefined(getBoolean(this, c)))
363363 then throw("DApp is already active")
364364 else if ((bj == bm))
365365 then throw("Assets must be different")
366366 else {
367367 let bt = {
368368 let D = bj
369369 if ($isInstanceOf(D, "ByteVector"))
370370 then {
371371 let ah = D
372372 toBase58String(ah)
373373 }
374374 else if ($isInstanceOf(D, "Unit"))
375375 then {
376376 let ai = D
377377 "WAVES"
378378 }
379379 else throw("Match error")
380380 }
381381 let bu = {
382382 let D = bm
383383 if ($isInstanceOf(D, "ByteVector"))
384384 then {
385385 let ah = D
386386 toBase58String(ah)
387387 }
388388 else if ($isInstanceOf(D, "Unit"))
389389 then {
390390 let ai = D
391391 "WAVES"
392392 }
393393 else throw("Match error")
394394 }
395395 let bv = valueOrElse(getInteger(A, (u + bt)), 999999)
396396 let bw = valueOrElse(getInteger(A, (u + bu)), 999999)
397397 let bx = if ((bw > bv))
398398 then $Tuple4(bl, bm, bi, bj)
399399 else $Tuple4(bi, bj, bl, bm)
400400 let by = bx._1
401401 let bz = bx._2
402402 let bA = bx._3
403403 let bB = bx._4
404404 let bC = aM(bz)
405405 let bD = bC._1
406406 let bE = bC._2
407407 let bF = bC._3
408408 let bG = aM(bB)
409409 let bH = bG._1
410410 let bI = bG._2
411411 let bJ = bG._3
412- let bK = invoke(A, "addPool", [this, ((bE + "_") + bI)], nil)
413- if ((bK == bK))
412+ let bK = [toString(this), ((bE + "_") + bI), bD, bH]
413+ let bL = invoke(A, "addPool", bK, nil)
414+ if ((bL == bL))
414415 then if (!(isDefined(getString(A, ("pool_" + toString(this))))))
415416 then throw("Pool is not added")
416417 else {
417- let bL = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
418- let bM = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
419- let bN = ((bF + bJ) / 2)
420- let bO = pow(by, bF, 5, 1, bF, DOWN)
421- let bP = pow(bA, bJ, 5, 1, bJ, DOWN)
422- let bQ = pow(10, 0, bN, 0, 0, DOWN)
423- let bR = fraction(bO, bP, bQ)
424- let bS = Issue(bL, bM, bR, bN, true)
425- let bT = calculateAssetId(bS)
426- let bU = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(l, ao), IntegerEntry(m, aq), bS, StringEntry(j, toBase58String(bT)), IntegerEntry(k, bR), IntegerEntry(w, height), ScriptTransfer(bs, bR, bT), ScriptTransfer(L, av, P)]
427- bU
418+ let bM = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
419+ let bN = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
420+ let bO = ((bF + bJ) / 2)
421+ let bP = pow(by, bF, 5, 1, bF, DOWN)
422+ let bQ = pow(bA, bJ, 5, 1, bJ, DOWN)
423+ let bR = pow(10, 0, bO, 0, 0, DOWN)
424+ let bS = fraction(bP, bQ, bR)
425+ let bT = Issue(bM, bN, bS, bO, true)
426+ let bU = calculateAssetId(bT)
427+ let bV = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(l, ao), IntegerEntry(m, aq), bT, StringEntry(j, toBase58String(bU)), IntegerEntry(k, bS), IntegerEntry(w, height), ScriptTransfer(bs, bS, bU), ScriptTransfer(L, av, P)]
428+ bV
428429 }
429430 else throw("Strict value is not equal to itself.")
430431 }
431432 }
432433
433434
434435
435436 @Callable(aB)
436-func keepLimitForFirstHarvest (bV) = if (!(ab))
437+func keepLimitForFirstHarvest (bW) = if (!(ab))
437438 then throw("DApp is inactive at this moment")
438439 else if (!(containsElement([G, H, I, K], aB.callerPublicKey)))
439440 then throw("Only admin can call this function")
440- else [IntegerEntry(q, bV)]
441+ else [IntegerEntry(q, bW)]
441442
442443
443444
444445 @Callable(aB)
445-func replenishWithTwoTokens (bW) = {
446+func replenishWithTwoTokens (bX) = {
446447 let bz = aB.payments[0].assetId
447448 let bB = aB.payments[1].assetId
448449 let by = aT(aB.payments[0].amount, bz, bB)
449450 let bA = aT(aB.payments[1].amount, bB, bz)
450451 if (if ((ak == 0))
451452 then (al == 0)
452453 else false)
453454 then {
454- let bX = aM(bz)
455- let bD = bX._1
456- let bE = bX._2
457- let bF = bX._3
458- let bY = aM(bB)
459- let bH = bY._1
460- let bI = bY._2
461- let bJ = bY._3
462- let bZ = fraction(fraction(aF, as, by), ar, fraction(aG, as, bA))
455+ let bY = aM(bz)
456+ let bD = bY._1
457+ let bE = bY._2
458+ let bF = bY._3
459+ let bZ = aM(bB)
460+ let bH = bZ._1
461+ let bI = bZ._2
462+ let bJ = bZ._3
463+ let ca = fraction(fraction(aF, as, by), ar, fraction(aG, as, bA))
463464 if ((bz == bB))
464465 then throw("Assets must be different")
465466 else {
466- let bN = ((bF + bJ) / 2)
467- let bR = fraction(pow(by, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bN, 0, 0, DOWN))
467+ let bO = ((bF + bJ) / 2)
468+ let bS = fraction(pow(by, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bO, 0, 0, DOWN))
468469 if (!(ab))
469470 then throw("DApp is inactive at this moment")
470- else if (if ((0 > bW))
471+ else if (if ((0 > bX))
471472 then true
472- else (bW > at))
473- then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bW)))
473+ else (bX > at))
474+ then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bX)))
474475 else if ((size(aB.payments) != 2))
475476 then throw("Two attached assets expected")
476- else if (if ((((ar * (at - bW)) / at) > bZ))
477+ else if (if ((((ar * (at - bX)) / at) > ca))
477478 then true
478- else (bZ > ((ar * (at + bW)) / at)))
479+ else (ca > ((ar * (at + bX)) / at)))
479480 then throw("Incorrect assets amount: amounts must have the contract ratio")
480481 else if (if ((bz != ae))
481482 then true
482483 else (bB != af))
483484 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
484- else if ((bR == 0))
485+ else if ((bS == 0))
485486 then throw("Too small amount to replenish")
486487 else if (!(aL))
487488 then ([ScriptTransfer(aB.caller, by, bz), ScriptTransfer(aB.caller, bA, bB)] ++ bf())
488- else [Reissue(am, bR, true), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(k, bR), ScriptTransfer(aB.caller, bR, am)]
489+ else [Reissue(am, bS, true), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(k, bS), ScriptTransfer(aB.caller, bS, am)]
489490 }
490491 }
491492 else {
492- let bZ = fraction(fraction(ak, as, by), ar, fraction(al, as, bA))
493- let ca = fraction(by, as, ak)
494- let cb = fraction(bA, as, al)
495- let cc = fraction(min([ca, cb]), an, as)
493+ let ca = fraction(fraction(ak, as, by), ar, fraction(al, as, bA))
494+ let cb = fraction(by, as, ak)
495+ let cc = fraction(bA, as, al)
496+ let cd = fraction(min([cb, cc]), an, as)
496497 if (!(ab))
497498 then throw("DApp is inactive at this moment")
498- else if (if ((0 > bW))
499+ else if (if ((0 > bX))
499500 then true
500- else (bW > at))
501- then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bW)))
501+ else (bX > at))
502+ then throw(((("Slippage tolerance must be between 0 and " + toString(at)) + " inclusively. Actual: ") + toString(bX)))
502503 else if ((size(aB.payments) != 2))
503504 then throw("Two attached assets expected")
504505 else if (if ((bz != ae))
505506 then true
506507 else (bB != af))
507508 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
508- else if (if ((((ar * (at - bW)) / at) > bZ))
509+ else if (if ((((ar * (at - bX)) / at) > ca))
509510 then true
510- else (bZ > ((ar * (at + bW)) / at)))
511+ else (ca > ((ar * (at + bX)) / at)))
511512 then throw("Incorrect assets amount: amounts must have the contract ratio")
512- else if ((cc == 0))
513+ else if ((cd == 0))
513514 then throw("Too small amount to replenish")
514515 else if (!(aL))
515516 then ([ScriptTransfer(aB.caller, by, bz), ScriptTransfer(aB.caller, bA, bB)] ++ bf())
516- else [IntegerEntry(f, (ak + by)), IntegerEntry(g, (al + bA)), IntegerEntry(k, (an + cc)), Reissue(am, cc, true), ScriptTransfer(aB.caller, cc, am)]
517+ else [IntegerEntry(f, (ak + by)), IntegerEntry(g, (al + bA)), IntegerEntry(k, (an + cd)), Reissue(am, cd, true), ScriptTransfer(aB.caller, cd, am)]
517518 }
518519 }
519520
520521
521522
522523 @Callable(aB)
523524 func withdraw () = {
524- let cd = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
525- let ce = cd._1
526- let cf = cd._2
527- let cg = aT(fraction(ce, ak, an), ae, af)
528- let ch = aT(fraction(ce, al, an), af, ae)
525+ let ce = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
526+ let cf = ce._1
527+ let cg = ce._2
528+ let ch = aT(fraction(cf, ak, an), ae, af)
529+ let ci = aT(fraction(cf, al, an), af, ae)
529530 if (!(ab))
530531 then throw("DApp is inactive at this moment")
531532 else if ((size(aB.payments) != 1))
532533 then throw("One attached payment expected")
533- else if ((cf != am))
534+ else if ((cg != am))
534535 then throw(("Incorrect asset attached. Expected: " + toBase58String(am)))
535536 else if (!(aL))
536- then ([ScriptTransfer(aB.caller, ce, cf)] ++ bf())
537- else if (if ((cg > aH))
537+ then ([ScriptTransfer(aB.caller, cf, cg)] ++ bf())
538+ else if (if ((ch > aH))
538539 then true
539- else (ch > aI))
540- then bc(cg, ch)
541- else [IntegerEntry(f, (ak - cg)), IntegerEntry(g, (al - ch)), IntegerEntry(k, (an - ce)), Burn(am, ce), ScriptTransfer(aB.caller, cg, ae), ScriptTransfer(aB.caller, ch, af)]
540+ else (ci > aI))
541+ then bc(ch, ci)
542+ else [IntegerEntry(f, (ak - ch)), IntegerEntry(g, (al - ci)), IntegerEntry(k, (an - cf)), Burn(am, cf), ScriptTransfer(aB.caller, ch, ae), ScriptTransfer(aB.caller, ci, af)]
542543 }
543544
544545
545546
546547 @Callable(aB)
547-func exchange (ci) = {
548- let cj = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
549- let ce = cj._1
550- let cf = cj._2
551- func ck (cl,cm) = {
552- let cn = fraction(cm, ce, (ce + cl))
553- let co = fraction(cn, (aq - ao), aq)
554- let cp = fraction(cn, ap, aq)
555- if ((ci > co))
556- then throw(((("Calculated amount to receive " + toString(co)) + " is less than specified minimum ") + toString(ci)))
557- else $Tuple3(cn, co, cp)
548+func exchange (cj) = {
549+ let ck = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
550+ let cf = ck._1
551+ let cg = ck._2
552+ func cl (cm,cn) = {
553+ let co = fraction(cn, cf, (cf + cm))
554+ let cp = fraction(co, (aq - ao), aq)
555+ let cq = fraction(co, ap, aq)
556+ if ((cj > cp))
557+ then throw(((("Calculated amount to receive " + toString(cp)) + " is less than specified minimum ") + toString(cj)))
558+ else $Tuple3(co, cp, cq)
558559 }
559560
560561 if (!(ab))
561562 then throw("DApp is inactive at this moment")
562563 else if (if ((ak == 0))
563564 then true
564565 else (al == 0))
565566 then throw("Can't exchange with zero balance")
566- else if ((0 >= ci))
567- then throw(("Minimal amount to receive must be positive. Actual: " + toString(ci)))
567+ else if ((0 >= cj))
568+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(cj)))
568569 else if ((size(aB.payments) != 1))
569570 then throw("One attached payment expected")
570571 else if (!(aL))
571- then ([ScriptTransfer(aB.caller, ce, cf)] ++ bf())
572- else if ((cf == ae))
572+ then ([ScriptTransfer(aB.caller, cf, cg)] ++ bf())
573+ else if ((cg == ae))
573574 then {
574- let cq = af
575- let cr = ck(ak, al)
576- let cn = cr._1
577- let co = cr._2
578- let cp = cr._3
579- let cs = (ak + ce)
580- let ct = ((al - co) - cp)
581- if (if ((aD >= cs))
575+ let cr = af
576+ let cs = cl(ak, al)
577+ let co = cs._1
578+ let cp = cs._2
579+ let cq = cs._3
580+ let ct = (ak + cf)
581+ let cu = ((al - cp) - cq)
582+ if (if ((aD >= ct))
582583 then true
583- else (aE >= ct))
584- then aZ(co, aI, aj)
585- else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aB.caller, co, cq), ScriptTransfer(L, cp, cq)]
584+ else (aE >= cu))
585+ then aZ(cp, aI, aj)
586+ else [IntegerEntry(f, ct), IntegerEntry(g, cu), ScriptTransfer(aB.caller, cp, cr), ScriptTransfer(L, cq, cr)]
586587 }
587- else if ((cf == af))
588+ else if ((cg == af))
588589 then {
589- let cq = ae
590- let cu = ck(al, ak)
591- let cn = cu._1
592- let co = cu._2
593- let cp = cu._3
594- let cs = ((ak - co) - cp)
595- let ct = (al + ce)
596- if (if ((aD >= cs))
590+ let cr = ae
591+ let cv = cl(al, ak)
592+ let co = cv._1
593+ let cp = cv._2
594+ let cq = cv._3
595+ let ct = ((ak - cp) - cq)
596+ let cu = (al + cf)
597+ if (if ((aD >= ct))
597598 then true
598- else (aE >= ct))
599- then aZ(co, aH, ag)
600- else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aB.caller, co, cq), ScriptTransfer(L, cp, cq)]
599+ else (aE >= cu))
600+ then aZ(cp, aH, ag)
601+ else [IntegerEntry(f, ct), IntegerEntry(g, cu), ScriptTransfer(aB.caller, cp, cr), ScriptTransfer(L, cq, cr)]
601602 }
602603 else throw(((("Incorrect asset attached. Expected: " + ac) + " or ") + ad))
603604 }
604605
605606
606607
607608 @Callable(aB)
608609 func shutdown () = if (!(ab))
609610 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
610611 else if (!(containsElement([G, H, I, J], aB.callerPublicKey)))
611612 then throw("Only admin can call this function")
612613 else aR("Paused by admin")
613614
614615
615616
616617 @Callable(aB)
617618 func activate () = if (ab)
618619 then throw("DApp is already active")
619620 else if (!(containsElement([G, H, I, J], aB.callerPublicKey)))
620621 then throw("Only admin can call this function")
621622 else [BooleanEntry(c, true), DeleteEntry(n)]
622623
623624
624625
625626 @Callable(aB)
626-func takeIntoAccountExtraFunds (cv) = {
627- let cw = (aJ - ak)
628- let cx = (aK - al)
629- let cy = (cw - (if ((ae == unit))
630- then cv
627+func takeIntoAccountExtraFunds (cw) = {
628+ let cx = (aJ - ak)
629+ let cy = (aK - al)
630+ let cz = (cx - (if ((ae == unit))
631+ then cw
631632 else 0))
632- let cz = (cx - (if ((af == unit))
633- then cv
633+ let cA = (cy - (if ((af == unit))
634+ then cw
634635 else 0))
635636 if (!(ab))
636637 then throw("DApp is inactive at this moment")
637638 else if ((aB.caller != this))
638639 then throw("Only the DApp itself can call this function")
639- else if ((0 > cv))
640- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cv)))
641- else if (if ((0 > cw))
640+ else if ((0 > cw))
641+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cw)))
642+ else if (if ((0 > cx))
642643 then true
643- else (0 > cx))
644+ else (0 > cy))
644645 then aR("Enroll amount negative")
645- else if (if ((0 > cy))
646+ else if (if ((0 > cz))
646647 then true
647- else (0 > cz))
648+ else (0 > cA))
648649 then throw("Too large amountLeave")
649- else [IntegerEntry(f, (ak + cy)), IntegerEntry(g, (al + cz)), IntegerEntry(("last_income_" + ac), cy), IntegerEntry(("last_income_" + ad), cz)]
650+ else [IntegerEntry(f, (ak + cz)), IntegerEntry(g, (al + cA)), IntegerEntry(("last_income_" + ac), cz), IntegerEntry(("last_income_" + ad), cA)]
650651 }
651652
652653
653654
654655 @Callable(aB)
655656 func enableFirstHarvest () = [BooleanEntry(o, true), IntegerEntry(p, (Y + (aa * Z)))]
656657
657658
658-@Verifier(cA)
659-func cB () = {
660- let cC = {
661- let cD = if (sigVerify(cA.bodyBytes, cA.proofs[0], G))
659+@Verifier(cB)
660+func cC () = {
661+ let cD = {
662+ let cE = if (sigVerify(cB.bodyBytes, cB.proofs[0], G))
662663 then 1
663664 else 0
664- let cE = if (sigVerify(cA.bodyBytes, cA.proofs[1], H))
665+ let cF = if (sigVerify(cB.bodyBytes, cB.proofs[1], H))
665666 then 1
666667 else 0
667- let cF = if (sigVerify(cA.bodyBytes, cA.proofs[2], I))
668+ let cG = if (sigVerify(cB.bodyBytes, cB.proofs[2], I))
668669 then 1
669670 else 0
670- (((cD + cE) + cF) >= 2)
671+ (((cE + cF) + cG) >= 2)
671672 }
672- let D = cA
673+ let D = cB
673674 if ($isInstanceOf(D, "InvokeScriptTransaction"))
674675 then {
675- let cG = D
676- let cH = if ((cG.dApp == this))
677- then (cG.function == "takeIntoAccountExtraFunds")
676+ let cH = D
677+ let cI = if ((cH.dApp == this))
678+ then (cH.function == "takeIntoAccountExtraFunds")
678679 else false
679- let cI = if ((cG.dApp == this))
680- then (cG.function == "enableFirstHarvest")
680+ let cJ = if ((cH.dApp == this))
681+ then (cH.function == "enableFirstHarvest")
681682 else false
682- let cJ = if (if ((cG.dApp == R))
683- then if (if (if (containsElement(["lockNeutrino", "lockNsbt"], cG.function))
684- then (size(cG.payments) == 1)
683+ let cK = if (if ((cH.dApp == R))
684+ then if (if (if ((cH.function == "lockNeutrino"))
685+ then (size(cH.payments) == 1)
685686 else false)
686- then if ((cG.payments[0].assetId == N))
687+ then if ((cH.payments[0].assetId == N))
687688 then true
688- else (cG.payments[0].assetId == O)
689+ else (cH.payments[0].assetId == O)
689690 else false)
690691 then true
691- else if (containsElement(["unlockNeutrino", "unlockNsbt"], cG.function))
692- then (size(cG.payments) == 0)
692+ else if ((cH.function == "unlockNeutrino"))
693+ then (size(cH.payments) == 0)
693694 else false
694695 else false)
695696 then true
696- else if ((cG.dApp == S))
697- then if (if (if ((cG.function == "startStaking"))
698- then (size(cG.payments) == 1)
697+ else if ((cH.dApp == S))
698+ then if (if (if ((cH.function == "startStaking"))
699+ then (size(cH.payments) == 1)
699700 else false)
700- then (cG.payments[0].assetId == Q)
701+ then (cH.payments[0].assetId == Q)
701702 else false)
702703 then true
703- else if ((cG.function == "stopStaking"))
704- then (size(cG.payments) == 0)
704+ else if ((cH.function == "stopStaking"))
705+ then (size(cH.payments) == 0)
705706 else false
706707 else false
707- let cK = if (if (if ((cG.dApp == T))
708- then (cG.function == "exchange")
708+ let cL = if (if (if ((cH.dApp == T))
709+ then (cH.function == "exchange")
709710 else false)
710711 then (ae == N)
711712 else false)
712713 then true
713714 else if (if ((af == N))
714- then (size(cG.payments) == 1)
715+ then (size(cH.payments) == 1)
715716 else false)
716- then (cG.payments[0].assetId == N)
717+ then (cH.payments[0].assetId == N)
717718 else false
718- let cL = if (if (if ((cG.dApp == U))
719- then (cG.function == "exchange")
719+ let cM = if (if (if ((cH.dApp == U))
720+ then (cH.function == "exchange")
720721 else false)
721722 then (ae == O)
722723 else false)
723724 then true
724725 else if (if ((af == O))
725- then (size(cG.payments) == 1)
726+ then (size(cH.payments) == 1)
726727 else false)
727- then (cG.payments[0].assetId == N)
728+ then (cH.payments[0].assetId == N)
728729 else false
729- let cM = if (if (if (sigVerify(cA.bodyBytes, cA.proofs[0], G))
730+ let cN = if (if (if (sigVerify(cB.bodyBytes, cB.proofs[0], G))
730731 then true
731- else sigVerify(cA.bodyBytes, cA.proofs[0], H))
732+ else sigVerify(cB.bodyBytes, cB.proofs[0], H))
732733 then true
733- else sigVerify(cA.bodyBytes, cA.proofs[0], I))
734+ else sigVerify(cB.bodyBytes, cB.proofs[0], I))
734735 then true
735- else sigVerify(cA.bodyBytes, cA.proofs[0], K)
736- if (if (if (if (if (if (cH)
737- then true
738- else cI)
736+ else sigVerify(cB.bodyBytes, cB.proofs[0], K)
737+ if (if (if (if (if (if (cI)
739738 then true
740739 else cJ)
741740 then true
742741 else cK)
743742 then true
744743 else cL)
745- then cM
744+ then true
745+ else cM)
746+ then cN
746747 else false)
747748 then true
748- else cC
749+ else cD
749750 }
750- else cC
751+ else cD
751752 }
752753

github/deemru/w8io/873ac7e 
163.44 ms