tx · 5xTszvuWpMMjCFqhR7KizNAXbZLQyAMFpYA2P7m5bjxe

3P6DLdJTP2EySq9MFdJu6beUevrQd2sVVBh:  -0.01400000 Waves

2022.05.08 13:08 [3108038] smart account 3P6DLdJTP2EySq9MFdJu6beUevrQd2sVVBh > SELF 0.00000000 Waves

{ "type": 13, "id": "5xTszvuWpMMjCFqhR7KizNAXbZLQyAMFpYA2P7m5bjxe", "fee": 1400000, "feeAssetId": null, "timestamp": 1652003641392, "version": 2, "chainId": 87, "sender": "3P6DLdJTP2EySq9MFdJu6beUevrQd2sVVBh", "senderPublicKey": "A4VXaWmJoTmXzxX1zWBsXNjbfoNuqgu8YgP4Dnkpo9uB", "proofs": [ "", "4u4D9sChVK8PH5Loxauvyz1RTcwhJM5ZkjwYcTTxA2H2GuEfsreR11L8a4KkjzD3NGyB8ZyD2VwciT53wCYJRF3n", "371qZdwGg2g9Zq5LY4u4bwZbtE45XyQneAHts4H2VRM9bEf1s699DWGwsvbG1LUDof4Ua3sYbenByJRDY5Q14wcb" ], "script": "base64:AAIFAAAAAAAAADAIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgASBQoDBAEIEgAAAABUAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAIa1ZlcnNpb24CAAAAB3ZlcnNpb24AAAAAB2tBY3RpdmUCAAAABmFjdGl2ZQAAAAAJa0Fzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAlrQXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAACWtCYWxhbmNlQQIAAAAPQV9hc3NldF9iYWxhbmNlAAAAAAlrQmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAANa0JhbGFuY2VJbml0QQIAAAAMQV9hc3NldF9pbml0AAAAAA1rQmFsYW5jZUluaXRCAgAAAAxCX2Fzc2V0X2luaXQAAAAADWtTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABFrU2hhcmVBc3NldFN1cHBseQIAAAASc2hhcmVfYXNzZXRfc3VwcGx5AAAAAARrRmVlAgAAAApjb21taXNzaW9uAAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAA1rRmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAALa1NoYXJlTGltaXQCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAC2tCYXNlUGVyaW9kAgAAAAtiYXNlX3BlcmlvZAAAAAANa1BlcmlvZExlbmd0aAIAAAANcGVyaW9kX2xlbmd0aAAAAAAMa1N0YXJ0SGVpZ2h0AgAAAAxzdGFydF9oZWlnaHQAAAAADGtVU0ROQWRkcmVzcwIAAAAYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAAAAAxrRVVSTkFkZHJlc3MCAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAAxrTGVhc2luZ1Bvb2wCAAAAD2xlYXNpbmdfYWRkcmVzcwAAAAAOa0xlYXNpbmdBbW91bnQCAAAADmxlYXNpbmdfYW1vdW50AAAAAAprTGVhc2luZ0lkAgAAAApsZWFzaW5nX2lkAAAAAA1rQWRtaW5QdWJLZXkxAgAAAAthZG1pbl9wdWJfMQAAAAANa0FkbWluUHViS2V5MgIAAAALYWRtaW5fcHViXzIAAAAADWtBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAABJrQWRtaW5JbnZva2VQdWJLZXkCAAAAEGFkbWluX2ludm9rZV9wdWIAAAAAEGtNb25leUJveEFkZHJlc3MCAAAAEW1vbmV5X2JveF9hZGRyZXNzAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAZvcmFjbGUFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZzdHJpbmcFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAAGc3RyaW5nBAAAAAdub3RoaW5nBQAAAAckbWF0Y2gwCQAAAgAAAAEJAAEsAAAAAgUAAAADa2V5AgAAAAhpcyBlbXB0eQAAAAAMYWRtaW5QdWJLZXkxCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADWtBZG1pblB1YktleTEAAAAADGFkbWluUHViS2V5MgkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAA1rQWRtaW5QdWJLZXkyAAAAAAxhZG1pblB1YktleTMJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAANa0FkbWluUHViS2V5MwAAAAARYWRtaW5JbnZva2VQdWJLZXkJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAASa0FkbWluSW52b2tlUHViS2V5AAAAAA9tb25leUJveEFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAABBrTW9uZXlCb3hBZGRyZXNzAAAAAA12b3RpbmdBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFX+D/7rE/JYs2NlJlbruypSwjc8IykrCK7AAAAAARVU0ROAQAAACC2JinDBPXOU5GkDkt1JC9k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BEVVUk4JAAQaAAAAAgUAAAASc3Rha2luZ0VVUk5BZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABglcyVzJXNfX3N0YWtpbmdCYWxhbmNlX18JAAJYAAAAAQUAAAADYUlkAgAAAAJfXwkABCUAAAABBQAAAAR0aGlzAAAAAAAAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAADmtMZWFzaW5nQW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAAckbWF0Y2gwBQAAABZzdGFrZWRBbW91bnRDYWxjdWxhdGVkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWkFAAAAByRtYXRjaDAFAAAAAWkAAAAAAAAAAAAAAAAADXN0YWtlZEFtb3VudEEJAQAAAAxzdGFrZWRBbW91bnQAAAABBQAAAAhhc3NldElkQQAAAAANc3Rha2VkQW1vdW50QgkBAAAADHN0YWtlZEFtb3VudAAAAAEFAAAACGFzc2V0SWRCAAAAAAphc3NldEluaXRBCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA1rQmFsYW5jZUluaXRBAAAAAAphc3NldEluaXRCCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA1rQmFsYW5jZUluaXRCAAAAABFhdmFpbGFibGVCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANc3Rha2VkQW1vdW50QQAAAAARYXZhaWxhYmxlQmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADXN0YWtlZEFtb3VudEIAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEEFAAAADXN0YWtlZEFtb3VudEEAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEIFAAAADXN0YWtlZEFtb3VudEIAAAAAEGhhc0Vub3VnaEJhbGFuY2UDCQAAZwAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFAAAACGJhbGFuY2VBCQAAZwAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFAAAACGJhbGFuY2VCBwEAAAAMZ2V0QXNzZXRJbmZvAAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAQAAAAIc3RyaW5nSWQJAAJYAAAAAQUAAAACaWQEAAAABGluZm8JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAAJpZAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAAIc3RyaW5nSWQCAAAADiBkb2Vzbid0IGV4aXN0CQAFFQAAAAMFAAAACHN0cmluZ0lkCAUAAAAEaW5mbwAAAARuYW1lCAUAAAAEaW5mbwAAAAhkZWNpbWFscwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFd2F2ZXMFAAAAByRtYXRjaDAJAAUVAAAAAwIAAAAFV0FWRVMCAAAABVdBVkVTAAAAAAAAAAAICQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQAAAAhhc3NldFN0cgMJAAAAAAAAAgUAAAAIYXNzZXRTdHICAAAABVdBVkVTCQAFFQAAAAMCAAAABVdBVkVTAgAAAAVXQVZFUwAAAAAAAAAACAQAAAAIc3RyaW5nSWQFAAAACGFzc2V0U3RyBAAAAAJpZAkAAlkAAAABBQAAAAhhc3NldFN0cgQAAAAEaW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAAAmlkCQABLAAAAAIJAAEsAAAAAgIAAAAGQXNzZXQgBQAAAAhzdHJpbmdJZAIAAAAOIGRvZXNuJ3QgZXhpc3QJAAUVAAAAAwUAAAAIc3RyaW5nSWQIBQAAAARpbmZvAAAABG5hbWUIBQAAAARpbmZvAAAACGRlY2ltYWxzAQAAAAdzdXNwZW5kAAAAAQAAAAVjYXVzZQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAHa0FjdGl2ZQcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAGa0NhdXNlBQAAAAVjYXVzZQUAAAADbmlsAQAAABhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMAAAACAAAABXN0YWtlAAAAB2Fzc2V0SWQDBQAAAAVzdGFrZQMJAAAAAAAAAgUAAAAHYXNzZXRJZAUAAAAEVVNETgkABRQAAAACAgAAAAxsb2NrTmV1dHJpbm8FAAAAEnN0YWtpbmdVU0ROQWRkcmVzcwkABRQAAAACAgAAAAxzdGFydFN0YWtpbmcFAAAAEnN0YWtpbmdFVVJOQWRkcmVzcwMJAAAAAAAAAgUAAAAHYXNzZXRJZAUAAAAEVVNETgkABRQAAAACAgAAAA51bmxvY2tOZXV0cmlubwUAAAASc3Rha2luZ1VTRE5BZGRyZXNzCQAFFAAAAAICAAAAC3N0b3BTdGFraW5nBQAAABJzdGFraW5nRVVSTkFkZHJlc3MBAAAAEWNhbGNTdGFraW5nUGFyYW1zAAAAAwAAAAVzdGFrZQAAAAZhbW91bnQAAAAHYXNzZXRJZAMFAAAABXN0YWtlBAAAAAskdDA2MDg5NjE1NQkBAAAAGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwAAAAIFAAAABXN0YWtlBQAAAAdhc3NldElkBAAAAARjYWxsCAUAAAALJHQwNjA4OTYxNTUAAAACXzEEAAAAC3N0YWtpbmdBZGRyCAUAAAALJHQwNjA4OTYxNTUAAAACXzIJAAUWAAAABAUAAAAEY2FsbAUAAAALc3Rha2luZ0FkZHIFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAHYXNzZXRJZAUAAAAGYW1vdW50BQAAAANuaWwEAAAACyR0MDYyNDE2MzA3CQEAAAAYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAAAAAgUAAAAFc3Rha2UFAAAAB2Fzc2V0SWQEAAAABGNhbGwIBQAAAAskdDA2MjQxNjMwNwAAAAJfMQQAAAALc3Rha2luZ0FkZHIIBQAAAAskdDA2MjQxNjMwNwAAAAJf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QW1vdW50QgkABEwAAAACBQAAAA5wbXRTdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyBAAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAIa1ZlcnNpb24FAAAAB3ZlcnNpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAB2tBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJa0Fzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABGtGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABm9yYWNsZQIAAAANYmFzZV9mZWVfY3BtbQkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUlzc3VlSWQFAAAAA25pbAMFAAAADGZpcnN0SGFydmVzdAkABE4AAAACBQAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAADWtGaXJzdEhhcnZlc3QFAAAADGZpcnN0SGFydmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa0ZpcnN0SGFydmVzdEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFAAAADHBlcmlvZExlbmd0aAUAAAADbmlsBQAAAAliYXNlRW50cnkJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABFpbml0V2l0aEluaXRSYXRpbwAAAAUAAAAJYW10QXNzZXRBAAAACWFtdEFzc2V0QgAAAAtzdHJBc3NldElkQQAAAAtzdHJBc3NldElkQgAAAAxmaXJzdEhhcnZlc3QEAAAADSR0MDEwMjQ2MTAzMzMJAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQUAAAALc3RyQXNzZXRJZEEEAAAADnBtdFN0ckFzc2V0SWRBCAUAAAANJHQwMTAyNDYxMDMzMwAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAADSR0MDEwMjQ2MTAzMzMAAAACXzIEAAAADHBtdERlY2ltYWxzQQgFAAAADSR0MDEwMjQ2MTAzMzMAAAACXzMEAAAADSR0MDEwMzM4MTA0MjUJAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQUAAAALc3RyQXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTAzMzgxMDQyNQAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDEwMzM4MTA0MjUAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDEwMzM4MTA0MjUAAAACXzMDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEWFkbWluSW52b2tlUHViS2V5BQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQEAAAAJaXNEZWZpbmVkAAAAAQkABBsAAAACBQAAAAR0aGlzBQAAAAdrQWN0aXZlCQAAAgAAAAECAAAAFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRBBQAAAAtzdHJBc3NldElkQgkAAAIAAAABAgAAABhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEAAAACXNoYXJlTmFtZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAABcwkAAS8AAAACBQAAAA1wbXRBc3NldE5hbWVBAAAAAAAAAAAHAgAAAAFfCQABLwAAAAIFAAAADXBtdEFzc2V0TmFtZUIAAAAAAAAAAAcEAAAAEHNoYXJlRGVzY3JpcHRpb24JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACJTaGFyZVRva2VuIG9mIFN3b3BGaSBwcm90b2NvbCBmb3IgBQAAAA1wbXRBc3NldE5hbWVBAgAAAAUgYW5kIAUAAAANcG10QXNzZXROYW1lQgIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAABHRoaXMEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5AAAAAAAAAAAABAAAAApzaGFyZUlzc3VlCQAEQgAAAAUFAAAACXNoYXJlTmFtZQUAAAAQc2hhcmVEZXNjcmlwdGlvbgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAA1zaGFyZURlY2ltYWxzBgQAAAAMc2hhcmVJc3N1ZUlkCQAEOAAAAAEFAAAACnNoYXJlSXNzdWUEAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAhrVmVyc2lvbgUAAAAHdmVyc2lvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAHa0FjdGl2ZQYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJa0Fzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlrQXNzZXRJZEIFAAAADnBtdFN0ckFzc2V0SWRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rQmFsYW5jZUluaXRBBQAAAAlhbXRBc3NldEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtCYWxhbmNlSW5pdEIFAAAACWFtdEFzc2V0QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABGtGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABm9yYWNsZQIAAAANYmFzZV9mZWVfY3BtbQkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAANuaWwDBQAAAAxmaXJzdEhhcnZlc3QJAAROAAAAAgUAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA1rRmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tGaXJzdEhhcnZlc3RIZWlnaHQJAABkAAAAAgUAAAALc3RhcnRIZWlnaHQJAABoAAAAAgUAAAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQAAAAxwZXJpb2RMZW5ndGgFAAAAA25pbAUAAAAJYmFzZUVudHJ5AAAAAWkBAAAAGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAAAAAEAAAAKc2hhcmVMaW1pdAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAARYWRtaW5JbnZva2VQdWJLZXkFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa1NoYXJlTGltaXQFAAAACnNoYXJlTGltaXQFAAAAA25pbAAAAAFpAQAAABZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAAAAQAAABFzbGlwcGFnZVRvbGVyYW5jZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAALcG10QXNzZXRJZEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0SWRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAApwbXRBbW91bnRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAACnBtdEFtb3VudEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAQAAAANJHQwMTI4MDQxMjg4MQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDEyODA0MTI4ODEAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMjgwNDEyODgxAAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMjgwNDEyODgxAAAAAl8zBAAAAA0k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aW8GCQAAZgAAAAIFAAAACnRva2VuUmF0aW8JAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGQAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAECAAAAPUluY29ycmVjdCBhc3NldHMgYW1vdW50OiBhbW91bnRzIG11c3QgaGF2ZSB0aGUgY29udHJhY3QgcmF0aW8DCQAAAAAAAAIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAAB1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QQUAAAALcG10QXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRCBQAAAAtwbXRBc3NldElkQgUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAABAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAAOcG10U3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACnBtdEFtb3VudEEJAARMAAAAAgUAAAAOcG10U3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADnBtdFN0ckFzc2V0SWRCCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAApw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ZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEEEAAAADSR0MDE4ODc3MTg5OTkJAQAAAA1jYWxjdWxhdGVGZWVzAAAABAUAAAAJcG10QW1vdW50BQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDE4ODc3MTg5OTkAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxODg3NzE4OTk5AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTg4NzcxODk5OQAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAALbmV3QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRBCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBwkABEwAAAACCQAAZAAAAAIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAARMAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRCCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAAlwbXRBbW91bnQJAARMAAAAAgUAAAALc3RyQXNzZXRJZEIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEFAAAAC25ld0JhbGFuY2VBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPbW9uZXlCb3hBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQAFFAAAAAIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAEIG9yIAUAAAALc3RyQXNzZXRJZEIAAAABaQEAAAAIc2h1dGRvd24AAAAAAwkBAAAAASEAAAABBQAAAAZhY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAABmtDYXVzZQIAAAAadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAQAAAAdzdXNwZW5kAAAAAQIAAAAPUGF1c2VkIGJ5IGFkbWluAAAAAWkBAAAACGFjdGl2YXRlAAAAAAMFAAAABmFjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAdrQWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAZrQ2F1c2UFAAAAA25pbAAAAAFpAQAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAPbW9uZXlCb3hBZGRyZXNzCQAAAgAAAAECAAAAJk9ubHkgdGhlIHdhbGxldCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwMJAABmAAAAAgAAAAAAAAAAAAUAAAANYW1vdW50RW5yb2xsQQYJAABmAAAAAgAAAAAAAAAAAAUAAAANYW1vdW50RW5yb2xsQgkBAAAAB3N1c3BlbmQAAAABAgAAABZFbnJvbGwgYW1vdW50IG5lZ2F0aXZlAwMJAAAAAAAAAgUAAAANYW1vdW50RW5yb2xsQQAAAAAAAAAAAAkAAAAAAAACBQAAAA1hbW91bnRFbnJvbGxCAAAAAAAAAAAABwkAAAIAAAABAgAAABBObyBtb25leSB0byB0YWtlBAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRCCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAA1hbW91bnRFbnJvbGxCCQAETAAAAAIFAAAAC3N0ckFzc2V0SWRCBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UyBQAAAAZzdGFrZTIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADGxhc3RfaW5jb21lXwUAAAALc3RyQXNzZXRJZEEFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMbGFzdF9pbmNvbWVfBQAAAAtzdHJBc3NldElkQgUAAAANYW1vdW50RW5yb2xsQgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAMc3Rha2VVbnN0YWtlAAAAAwAAAAVzdGFrZQAAAAZhbW91bnQAAAANYXNzZXRJZFN0cmluZwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAC1Pbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24DCQAAAAAAAAIFAAAADWFzc2V0SWRTdHJpbmcCAAAABVdBVkVTBAAAAARwb29sCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAGb3JhY2xlBQAAAAxrTGVhc2luZ1Bvb2wCAAAAGU5vIGxlYXNpbmcgcG9vbCBpbiBvcmFjbGUEAAAACWxlYXNpbmdJZAkABBwAAAACBQAAAAR0aGlzBQAAAAprTGVhc2luZ0lkBAAAAA1sZWFzaW5nQW1vdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAADmtMZWFzaW5nQW1vdW50AAAAAAAAAAAABAAAAA5uZXdMZWFzZUFtb3VudAMFAAAABXN0YWtlCQAAZAAAAAIFAAAADWxlYXNpbmdBbW91bnQFAAAABmFtb3VudAkAAGUAAAACBQAAAA1sZWFzaW5nQW1vdW50BQAAAAZhbW91bnQEAAAACG5ld0xlYXNlCQAERAAAAAIFAAAABHBvb2wFAAAADm5ld0xlYXNlQW1vdW50BAAAAApuZXdMZWFzZUlkCQAEOQAAAAEFAAAACG5ld0xlYXNlBAAAAAhiYXNlRXRyeQkABEwAAAACBQAAAAhuZXdMZWFzZQkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACBQAAAAprTGVhc2luZ0lkBQAAAApuZXdMZWFzZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA5rTGVhc2luZ0Ftb3VudAUAAAAO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", "height": 3108038, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FJPKRJw1cPzQnz9AU42yA5fNgafSKGqSpJR38qWwdQPV Next: AZZ4RwbBy9z3cBpCRpdK7GbYzHiDs4XTfFD3azsHA9BG Diff:
OldNewDifferences
2525
2626 let l = "commission"
2727
28-let m = "commission_scale_delimiter"
28+let m = "shutdown_cause"
2929
30-let n = "shutdown_cause"
30+let n = "first_harvest"
3131
32-let o = "first_harvest"
32+let o = "first_harvest_height"
3333
34-let p = "first_harvest_height"
34+let p = "share_limit_on_first_harvest"
3535
36-let q = "share_limit_on_first_harvest"
36+let q = "base_period"
3737
38-let r = "base_period"
38+let r = "period_length"
3939
40-let s = "period_length"
40+let s = "start_height"
4141
42-let t = "start_height"
42+let t = "staking_usdnnsbt_address"
4343
44-let u = "first_harvest_height"
44+let u = "staking_eurn_address"
4545
46-let v = "staking_usdnnsbt_address"
46+let v = "leasing_address"
4747
48-let w = "staking_eurn_address"
48+let w = "leasing_amount"
4949
50-let x = "leasing_address"
50+let x = "leasing_id"
5151
52-let y = "leasing_amount"
52+let y = "admin_pub_1"
5353
54-let z = "leasing_id"
54+let z = "admin_pub_2"
5555
56-let A = "admin_pub_1"
56+let A = "admin_pub_3"
5757
58-let B = "admin_pub_2"
58+let B = "admin_invoke_pub"
5959
60-let C = "admin_pub_3"
60+let C = "money_box_address"
6161
6262 let D = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
6363
7070 }
7171 else {
7272 let I = G
73- throw("Admin public key is empty")
73+ throw((F + "is empty"))
7474 }
7575 }
7676
7777
78-let J = E(A)
78+let J = E(y)
7979
80-let K = E(B)
80+let K = E(z)
8181
82-let L = E(C)
82+let L = E(A)
8383
84-let M = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
84+let M = E(B)
8585
86-let N = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
86+let N = Address(E(C))
8787
88-let O = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
88+let O = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8989
90-let P = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
90+let P = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9191
92-let Q = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
92+let Q = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
9393
94-let R = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
94+let R = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
9595
96-let S = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
96+let S = ["WAVES", toBase58String(P), toBase58String(R)]
9797
98-let T = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
98+let T = Address(E(t))
9999
100-let U = ["WAVES", toBase58String(Q), toBase58String(R), toBase58String(T)]
100+let U = Address(E(u))
101101
102-let V = Address(fromBase58String(valueOrErrorMessage(getString(D, v), "no usdn staking address")))
102+let V = valueOrErrorMessage(getInteger(O, q), "Empty kBasePeriod")
103103
104-let W = Address(fromBase58String(valueOrErrorMessage(getString(D, w), "no eurn staking address")))
104+let W = valueOrErrorMessage(getInteger(O, s), "Empty kStartHeight")
105105
106-let X = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
106+let X = valueOrErrorMessage(getInteger(O, r), "Empty kPeriodLength")
107107
108-let Y = Address(base58'3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m')
108+let Y = ((V + ((height - W) / X)) + 3)
109109
110-let Z = valueOrErrorMessage(getInteger(P, r), "Empty kBasePeriod")
110+let Z = getBooleanValue(this, c)
111111
112-let aa = valueOrErrorMessage(getInteger(P, t), "Empty kStartHeight")
112+let aa = getStringValue(this, d)
113113
114-let ab = valueOrErrorMessage(getInteger(P, s), "Empty kPeriodLength")
114+let ab = getStringValue(this, e)
115115
116-let ac = ((Z + ((height - aa) / ab)) + 3)
116+let ac = if ((aa == "WAVES"))
117+ then unit
118+ else fromBase58String(aa)
117119
118-let ad = getBooleanValue(this, c)
120+let ad = if ((ab == "WAVES"))
121+ then unit
122+ else fromBase58String(ab)
119123
120-let ae = getStringValue(this, d)
121-
122-let af = getStringValue(this, e)
123-
124-let ag = if ((ae == "WAVES"))
125- then unit
126- else fromBase58String(ae)
127-
128-let ah = if ((af == "WAVES"))
129- then unit
130- else fromBase58String(af)
131-
132-let ai = {
133- let G = ag
124+let ae = {
125+ let G = ac
134126 if ($isInstanceOf(G, "ByteVector"))
135127 then {
136- let aj = G
137- value(assetInfo(aj)).name
128+ let af = G
129+ value(assetInfo(af)).name
138130 }
139131 else if ($isInstanceOf(G, "Unit"))
140132 then {
141- let ak = G
133+ let ag = G
142134 "WAVES"
143135 }
144136 else throw("Match error")
145137 }
146138
147-let al = {
148- let G = ah
139+let ah = {
140+ let G = ad
149141 if ($isInstanceOf(G, "ByteVector"))
150142 then {
151- let aj = G
152- value(assetInfo(aj)).name
143+ let af = G
144+ value(assetInfo(af)).name
153145 }
154146 else if ($isInstanceOf(G, "Unit"))
155147 then {
156- let ak = G
148+ let ag = G
157149 "WAVES"
158150 }
159151 else throw("Match error")
160152 }
161153
162-let am = getIntegerValue(this, f)
154+let ai = getIntegerValue(this, f)
163155
164-let an = getIntegerValue(this, g)
156+let aj = getIntegerValue(this, g)
165157
166-let ao = fromBase58String(getStringValue(this, j))
158+let ak = fromBase58String(getStringValue(this, j))
167159
168-let ap = getIntegerValue(this, k)
160+let al = getIntegerValue(this, k)
169161
170-let aq = 3000
162+let am = getIntegerValue(this, l)
171163
172-let ar = 1200
164+let an = fraction(am, 40, 100)
173165
174-let as = 1000000
166+let ao = 1000000
175167
176-let at = 1000
168+let ap = 1000
177169
178-let au = 100000000
170+let aq = 100000000
179171
180-let av = 1000
172+let ar = 1000
181173
182-let aw = 8
174+let as = 8
183175
184-func ax (ay) = {
185- let G = ay
176+func at (au) = {
177+ let G = au
186178 if ($isInstanceOf(G, "ByteVector"))
187179 then {
188- let aj = G
189- assetBalance(this, aj)
180+ let af = G
181+ assetBalance(this, af)
190182 }
191183 else if ($isInstanceOf(G, "Unit"))
192184 then {
193- let ak = G
185+ let ag = G
194186 wavesBalance(this).available
195187 }
196188 else throw("Match error")
197189 }
198190
199191
200-func az (ay) = {
201- let aA = {
202- let G = ay
192+func av (au) = {
193+ let aw = {
194+ let G = au
203195 if ($isInstanceOf(G, "ByteVector"))
204196 then {
205- let aB = G
206- if (if ((aB == Q))
207- then true
208- else (aB == R))
209- then getInteger(V, ((("rpd_balance_" + toBase58String(aB)) + "_") + toString(this)))
210- else if ((aB == T))
211- then getInteger(W, ((("%s%s%s__stakingBalance__" + toBase58String(aB)) + "__") + toString(this)))
197+ let ax = G
198+ if ((ax == P))
199+ then getInteger(T, ((("rpd_balance_" + toBase58String(ax)) + "_") + toString(this)))
200+ else if ((ax == R))
201+ then getInteger(U, ((("%s%s%s__stakingBalance__" + toBase58String(ax)) + "__") + toString(this)))
212202 else 0
213203 }
214204 else if ($isInstanceOf(G, "Unit"))
215- then valueOrElse(getInteger(this, y), 0)
205+ then valueOrElse(getInteger(this, w), 0)
216206 else throw("Match error")
217207 }
218- let G = aA
208+ let G = aw
219209 if ($isInstanceOf(G, "Int"))
220210 then {
221- let aC = G
222- aC
211+ let ay = G
212+ ay
223213 }
224214 else 0
225215 }
226216
227217
228-let aD = az(ag)
218+let az = av(ac)
229219
230-let aE = az(ah)
220+let aA = av(ad)
231221
232-let aF = getIntegerValue(this, h)
222+let aB = getIntegerValue(this, h)
233223
234-let aG = getIntegerValue(this, i)
224+let aC = getIntegerValue(this, i)
235225
236-let aH = (am - aD)
226+let aD = (ai - az)
237227
238-let aI = (an - aE)
228+let aE = (aj - aA)
239229
240-let aJ = (ax(ag) + aD)
230+let aF = (at(ac) + az)
241231
242-let aK = (ax(ah) + aE)
232+let aG = (at(ad) + aA)
243233
244-let aL = if ((aJ >= am))
245- then (aK >= an)
234+let aH = if ((aF >= ai))
235+ then (aG >= aj)
246236 else false
247237
248-func aM (ay) = {
249- let G = ay
238+func aI (au) = {
239+ let G = au
250240 if ($isInstanceOf(G, "ByteVector"))
251241 then {
252- let aj = G
253- let aN = toBase58String(aj)
254- let aO = valueOrErrorMessage(assetInfo(aj), (("Asset " + aN) + " doesn't exist"))
255- $Tuple3(aN, aO.name, aO.decimals)
242+ let af = G
243+ let aJ = toBase58String(af)
244+ let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
245+ $Tuple3(aJ, aK.name, aK.decimals)
256246 }
257247 else if ($isInstanceOf(G, "Unit"))
258248 then {
259- let ak = G
249+ let ag = G
260250 $Tuple3("WAVES", "WAVES", 8)
261251 }
262252 else throw("Match error")
263253 }
264254
265255
266-func aP (aQ) = if ((aQ == "WAVES"))
256+func aL (aM) = if ((aM == "WAVES"))
267257 then $Tuple3("WAVES", "WAVES", 8)
268258 else {
269- let aN = aQ
270- let aj = fromBase58String(aQ)
271- let aO = valueOrErrorMessage(assetInfo(aj), (("Asset " + aN) + " doesn't exist"))
272- $Tuple3(aN, aO.name, aO.decimals)
259+ let aJ = aM
260+ let af = fromBase58String(aM)
261+ let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
262+ $Tuple3(aJ, aK.name, aK.decimals)
273263 }
274264
275265
276-func aR (aS) = [BooleanEntry(c, false), StringEntry(n, aS)]
266+func aN (aO) = [BooleanEntry(c, false), StringEntry(m, aO)]
277267
278268
279-func aT (aU,ay) = if (aU)
280- then if ((ay == Q))
281- then $Tuple2("lockNeutrino", V)
282- else if ((ay == R))
283- then $Tuple2("lockNsbt", V)
284- else $Tuple2("startStaking", W)
285- else if ((ay == Q))
286- then $Tuple2("unlockNeutrino", V)
287- else if ((ay == R))
288- then $Tuple2("unlockNsbt", V)
289- else $Tuple2("stopStaking", W)
269+func aP (aQ,au) = if (aQ)
270+ then if ((au == P))
271+ then $Tuple2("lockNeutrino", T)
272+ else $Tuple2("startStaking", U)
273+ else if ((au == P))
274+ then $Tuple2("unlockNeutrino", T)
275+ else $Tuple2("stopStaking", U)
290276
291277
292-func aV (aU,aW,ay) = if (aU)
278+func aR (aQ,aS,au) = if (aQ)
293279 then {
294- let aX = aT(aU, ay)
295- let aY = aX._1
296- let aZ = aX._2
297- $Tuple4(aY, aZ, nil, [AttachedPayment(ay, aW)])
280+ let aT = aP(aQ, au)
281+ let aU = aT._1
282+ let aV = aT._2
283+ $Tuple4(aU, aV, nil, [AttachedPayment(au, aS)])
298284 }
299285 else {
300- let ba = aT(aU, ay)
301- let aY = ba._1
302- let aZ = ba._2
303- $Tuple4(aY, aZ, [aW, toBase58String(ay)], nil)
286+ let aW = aP(aQ, au)
287+ let aU = aW._1
288+ let aV = aW._2
289+ $Tuple4(aU, aV, [aS, toBase58String(au)], nil)
304290 }
305291
306292
307-func bb (bc,bd,be,bf) = {
308- let bg = fraction(bf, bc, (bc + be))
309- let bh = fraction(bg, (as - aq), as)
310- let bi = fraction(bg, ar, as)
311- if ((bd > bh))
312- then throw(((("Calculated amount to receive " + toString(bh)) + " is less than specified minimum ") + toString(bd)))
313- else $Tuple3(bg, bh, bi)
293+func aX (aY,aZ,ba,bb) = {
294+ let bc = fraction(bb, aY, (aY + ba))
295+ let bd = fraction(bc, (ao - am), ao)
296+ let be = fraction(bc, an, ao)
297+ if ((aZ > bd))
298+ then throw(((("Calculated amount to receive " + toString(bd)) + " is less than specified minimum ") + toString(aZ)))
299+ else $Tuple3(bc, bd, be)
314300 }
315301
316302
317-func bj () = aR(((((((((((((((("Suspicious state. Actual balances: " + toString(aJ)) + " ") + ai) + ", ") + toString(aK)) + " ") + al) + ". State: ") + toString(am)) + " ") + ai) + ", ") + toString(an)) + " ") + al))
303+func bf () = aN(((((((((((((((("Suspicious state. Actual balances: " + toString(aF)) + " ") + ae) + ", ") + toString(aG)) + " ") + ah) + ". State: ") + toString(ai)) + " ") + ae) + ", ") + toString(aj)) + " ") + ah))
318304
319305
320-func bk () = if (ad)
306+func bg () = if (Z)
321307 then unit
322308 else throw("DApp is inactive at this moment")
323309
324310
325-@Callable(aC)
326-func init (bl) = {
327- let bm = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
328- let bn = bm._1
329- let bo = bm._2
330- let bp = $Tuple2(aC.payments[1].amount, aC.payments[1].assetId)
331- let bq = bp._1
332- let br = bp._2
333- let bs = aM(bo)
311+@Callable(ay)
312+func init (bh) = {
313+ let bi = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
314+ let bj = bi._1
315+ let bk = bi._2
316+ let bl = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
317+ let bm = bl._1
318+ let bn = bl._2
319+ let bo = aI(bk)
320+ let bp = bo._1
321+ let bq = bo._2
322+ let br = bo._3
323+ let bs = aI(bn)
334324 let bt = bs._1
335325 let bu = bs._2
336326 let bv = bs._3
337- let bw = aM(br)
338- let bx = bw._1
339- let by = bw._2
340- let bz = bw._3
341- if (!(containsElement([J, K, L, N], aC.callerPublicKey)))
327+ if (!(containsElement([J, K, L, M], ay.callerPublicKey)))
342328 then throw("Only admin can call this function")
343329 else if (isDefined(getBoolean(this, c)))
344330 then throw("DApp is already active")
345- else if ((bo == br))
331+ else if ((bk == bn))
346332 then throw("Assets must be different")
347333 else {
348- let bA = ((("s" + take(bu, 7)) + "_") + take(by, 7))
349- let bB = ((((("ShareToken of SwopFi protocol for " + bu) + " and ") + by) + " at address ") + toString(this))
350- let bC = ((bv + bz) / 2)
351- let bD = pow(bn, bv, 5, 1, bv, DOWN)
352- let bE = pow(bq, bz, 5, 1, bz, DOWN)
353- let bF = pow(10, 0, bC, 0, 0, DOWN)
354- let bG = fraction(bD, bE, bF)
355- let bH = Issue(bA, bB, bG, bC, true)
356- let bI = calculateAssetId(bH)
357- let bJ = if (containsElement(U, bt))
358- then invoke(this, "stakeUnstake", [true, bn, bt], nil)
334+ let bw = ((("s" + take(bq, 7)) + "_") + take(bu, 7))
335+ let bx = ((((("ShareToken of SwopFi protocol for " + bq) + " and ") + bu) + " at address ") + toString(this))
336+ let by = ((br + bv) / 2)
337+ let bz = pow(bj, br, 5, 1, br, DOWN)
338+ let bA = pow(bm, bv, 5, 1, bv, DOWN)
339+ let bB = pow(10, 0, by, 0, 0, DOWN)
340+ let bC = fraction(bz, bA, bB)
341+ let bD = Issue(bw, bx, bC, by, true)
342+ let bE = calculateAssetId(bD)
343+ let bF = if (containsElement(S, bp))
344+ then invoke(this, "stakeUnstake", [true, bj, bp], nil)
359345 else 0
360- if ((bJ == bJ))
346+ if ((bF == bF))
361347 then {
362- let bK = if (containsElement(U, bx))
363- then invoke(this, "stakeUnstake", [true, bq, bx], nil)
348+ let bG = if (containsElement(S, bt))
349+ then invoke(this, "stakeUnstake", [true, bm, bt], nil)
364350 else 0
365- if ((bK == bK))
351+ if ((bG == bG))
366352 then {
367- let bL = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bt), StringEntry(e, bx), IntegerEntry(f, bn), IntegerEntry(g, bq), IntegerEntry(l, aq), IntegerEntry(m, as), bH, StringEntry(j, toBase58String(bI)), IntegerEntry(k, bG), ScriptTransfer(aC.caller, bG, bI)]
368- if (bl)
369- then (bL ++ [BooleanEntry(o, bl), IntegerEntry(p, (aa + (ac * ab)))])
370- else bL
353+ let bH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bp), StringEntry(e, bt), IntegerEntry(f, bj), IntegerEntry(g, bm), IntegerEntry(l, getIntegerValue(D, "base_fee_cpmm")), bD, StringEntry(j, toBase58String(bE)), IntegerEntry(k, bC), ScriptTransfer(ay.caller, bC, bE)]
354+ if (bh)
355+ then (bH ++ [BooleanEntry(n, bh), IntegerEntry(o, (W + (Y * X)))])
356+ else bH
371357 }
372358 else throw("Strict value is not equal to itself.")
373359 }
377363
378364
379365
380-@Callable(aC)
381-func initWithInitRatio (bM,bN,ae,af,bl) = {
382- let bO = aP(ae)
383- let bt = bO._1
384- let bu = bO._2
385- let bv = bO._3
386- let bP = aP(af)
387- let bx = bP._1
388- let by = bP._2
389- let bz = bP._3
390- if (!(containsElement([J, K, L, N], aC.callerPublicKey)))
366+@Callable(ay)
367+func initWithInitRatio (bI,bJ,aa,ab,bh) = {
368+ let bK = aL(aa)
369+ let bp = bK._1
370+ let bq = bK._2
371+ let br = bK._3
372+ let bL = aL(ab)
373+ let bt = bL._1
374+ let bu = bL._2
375+ let bv = bL._3
376+ if (!(containsElement([J, K, L, M], ay.callerPublicKey)))
391377 then throw("Only admin can call this function")
392378 else if (isDefined(getBoolean(this, c)))
393379 then throw("DApp is already active")
394- else if ((ae == af))
380+ else if ((aa == ab))
395381 then throw("Assets must be different")
396382 else {
397- let bA = ((("s" + take(bu, 7)) + "_") + take(by, 7))
398- let bB = ((((("ShareToken of SwopFi protocol for " + bu) + " and ") + by) + " at address ") + toString(this))
399- let bC = ((bv + bz) / 2)
400- let bG = 0
401- let bH = Issue(bA, bB, bG, bC, true)
402- let bI = calculateAssetId(bH)
403- let bL = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bt), StringEntry(e, bx), IntegerEntry(h, bM), IntegerEntry(i, bN), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, aq), IntegerEntry(m, as), bH, StringEntry(j, toBase58String(bI)), IntegerEntry(k, bG)]
404- if (bl)
405- then (bL ++ [BooleanEntry(o, bl), IntegerEntry(p, (aa + (ac * ab)))])
406- else bL
383+ let bw = ((("s" + take(bq, 7)) + "_") + take(bu, 7))
384+ let bx = ((((("ShareToken of SwopFi protocol for " + bq) + " and ") + bu) + " at address ") + toString(this))
385+ let by = ((br + bv) / 2)
386+ let bC = 0
387+ let bD = Issue(bw, bx, bC, by, true)
388+ let bE = calculateAssetId(bD)
389+ let bH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bp), StringEntry(e, bt), IntegerEntry(h, bI), IntegerEntry(i, bJ), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, getIntegerValue(D, "base_fee_cpmm")), bD, StringEntry(j, toBase58String(bE)), IntegerEntry(k, bC)]
390+ if (bh)
391+ then (bH ++ [BooleanEntry(n, bh), IntegerEntry(o, (W + (Y * X)))])
392+ else bH
407393 }
408394 }
409395
410396
411397
412-@Callable(aC)
413-func keepLimitForFirstHarvest (bQ) = valueOrElse(bk(), if (!(containsElement([J, K, L, N], aC.callerPublicKey)))
398+@Callable(ay)
399+func keepLimitForFirstHarvest (bM) = valueOrElse(bg(), if (!(containsElement([J, K, L, M], ay.callerPublicKey)))
414400 then throw("Only admin can call this function")
415- else [IntegerEntry(q, bQ)])
401+ else [IntegerEntry(p, bM)])
416402
417403
418404
419-@Callable(aC)
420-func replenishWithTwoTokens (bR) = valueOrElse(bk(), {
421- let bo = aC.payments[0].assetId
422- let br = aC.payments[1].assetId
423- let bn = aC.payments[0].amount
424- let bq = aC.payments[1].amount
425- let bS = aM(bo)
426- let bt = bS._1
427- let bu = bS._2
428- let bv = bS._3
429- let bT = aM(br)
430- let bx = bT._1
431- let by = bT._2
432- let bz = bT._3
433- let bU = if (if ((am == 0))
434- then (an == 0)
405+@Callable(ay)
406+func replenishWithTwoTokens (bN) = valueOrElse(bg(), {
407+ let bk = ay.payments[0].assetId
408+ let bn = ay.payments[1].assetId
409+ let bj = ay.payments[0].amount
410+ let bm = ay.payments[1].amount
411+ let bO = aI(bk)
412+ let bp = bO._1
413+ let bq = bO._2
414+ let br = bO._3
415+ let bP = aI(bn)
416+ let bt = bP._1
417+ let bu = bP._2
418+ let bv = bP._3
419+ let bQ = if (if ((ai == 0))
420+ then (aj == 0)
435421 else false)
436422 then true
437423 else false
438- let bV = if (bU)
439- then fraction(fraction(aF, au, bn), at, fraction(aG, au, bq))
440- else fraction(fraction(am, au, bn), at, fraction(an, au, bq))
441- let bC = ((bv + bz) / 2)
442- let bW = if (bU)
443- then fraction(pow(bn, bv, 5, 1, bv, DOWN), pow(bq, bz, 5, 1, bz, DOWN), pow(10, 0, bC, 0, 0, DOWN))
444- else fraction(min([fraction(bn, au, am), fraction(bq, au, an)]), ap, au)
445- if (if ((0 > bR))
424+ let bR = if (bQ)
425+ then fraction(fraction(aB, aq, bj), ap, fraction(aC, aq, bm))
426+ else fraction(fraction(ai, aq, bj), ap, fraction(aj, aq, bm))
427+ let by = ((br + bv) / 2)
428+ let bS = if (bQ)
429+ then fraction(pow(bj, br, 5, 1, br, DOWN), pow(bm, bv, 5, 1, bv, DOWN), pow(10, 0, by, 0, 0, DOWN))
430+ else fraction(min([fraction(bj, aq, ai), fraction(bm, aq, aj)]), al, aq)
431+ if (if ((0 > bN))
446432 then true
447- else (bR > av))
448- then throw(((("Slippage tolerance must be between 0 and " + toString(av)) + " inclusively. Actual: ") + toString(bR)))
449- else if ((size(aC.payments) != 2))
433+ else (bN > ar))
434+ then throw(((("Slippage tolerance must be between 0 and " + toString(ar)) + " inclusively. Actual: ") + toString(bN)))
435+ else if ((size(ay.payments) != 2))
450436 then throw("Two attached assets expected")
451- else if (if ((bo != ag))
437+ else if (if ((bk != ac))
452438 then true
453- else (br != ah))
454- then throw(((("Incorrect assets attached. Expected: " + ae) + " and ") + af))
455- else if (if ((((at * (av - bR)) / av) > bV))
439+ else (bn != ad))
440+ then throw(((("Incorrect assets attached. Expected: " + aa) + " and ") + ab))
441+ else if (if ((((ap * (ar - bN)) / ar) > bR))
456442 then true
457- else (bV > ((at * (av + bR)) / av)))
443+ else (bR > ((ap * (ar + bN)) / ar)))
458444 then throw("Incorrect assets amount: amounts must have the contract ratio")
459- else if ((bW == 0))
445+ else if ((bS == 0))
460446 then throw("Too small amount to replenish")
461- else if (!(aL))
462- then ([ScriptTransfer(aC.caller, bn, bo), ScriptTransfer(aC.caller, bq, br)] ++ bj())
447+ else if (!(aH))
448+ then ([ScriptTransfer(ay.caller, bj, bk), ScriptTransfer(ay.caller, bm, bn)] ++ bf())
463449 else {
464- let bJ = if (containsElement(U, bt))
465- then invoke(this, "stakeUnstake", [true, bn, bt], nil)
450+ let bF = if (containsElement(S, bp))
451+ then invoke(this, "stakeUnstake", [true, bj, bp], nil)
466452 else 0
467- if ((bJ == bJ))
453+ if ((bF == bF))
468454 then {
469- let bK = if (containsElement(U, bx))
470- then invoke(this, "stakeUnstake", [true, bq, bx], nil)
455+ let bG = if (containsElement(S, bt))
456+ then invoke(this, "stakeUnstake", [true, bm, bt], nil)
471457 else 0
472- if ((bK == bK))
473- then [Reissue(ao, bW, true), IntegerEntry(f, (am + bn)), IntegerEntry(g, (an + bq)), IntegerEntry(k, (ap + bW)), ScriptTransfer(aC.caller, bW, ao)]
458+ if ((bG == bG))
459+ then [Reissue(ak, bS, true), IntegerEntry(f, (ai + bj)), IntegerEntry(g, (aj + bm)), IntegerEntry(k, (al + bS)), ScriptTransfer(ay.caller, bS, ak)]
474460 else throw("Strict value is not equal to itself.")
475461 }
476462 else throw("Strict value is not equal to itself.")
479465
480466
481467
482-@Callable(aC)
483-func withdraw () = valueOrElse(bk(), {
484- let bX = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
485- let bc = bX._1
486- let bY = bX._2
487- let bZ = fraction(bc, am, ap)
488- let ca = fraction(bc, an, ap)
489- if ((size(aC.payments) != 1))
468+@Callable(ay)
469+func withdraw () = valueOrElse(bg(), {
470+ let bT = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
471+ let aY = bT._1
472+ let bU = bT._2
473+ let bV = fraction(aY, ai, al)
474+ let bW = fraction(aY, aj, al)
475+ if ((size(ay.payments) != 1))
490476 then throw("One attached payment expected")
491- else if ((bY != ao))
492- then throw(("Incorrect asset attached. Expected: " + toBase58String(ao)))
493- else if (!(aL))
494- then ([ScriptTransfer(aC.caller, bc, bY)] ++ bj())
477+ else if ((bU != ak))
478+ then throw(("Incorrect asset attached. Expected: " + toBase58String(ak)))
479+ else if (!(aH))
480+ then ([ScriptTransfer(ay.caller, aY, bU)] ++ bf())
495481 else {
496- let bJ = if (containsElement(U, ae))
497- then invoke(this, "stakeUnstake", [false, bZ, ae], nil)
482+ let bF = if (containsElement(S, aa))
483+ then invoke(this, "stakeUnstake", [false, bV, aa], nil)
498484 else 0
499- if ((bJ == bJ))
485+ if ((bF == bF))
500486 then {
501- let bK = if (containsElement(U, af))
502- then invoke(this, "stakeUnstake", [false, ca, af], nil)
487+ let bG = if (containsElement(S, ab))
488+ then invoke(this, "stakeUnstake", [false, bW, ab], nil)
503489 else 0
504- if ((bK == bK))
505- then [IntegerEntry(f, (am - bZ)), IntegerEntry(g, (an - ca)), IntegerEntry(k, (ap - bc)), Burn(ao, bc), ScriptTransfer(aC.caller, bZ, ag), ScriptTransfer(aC.caller, ca, ah)]
490+ if ((bG == bG))
491+ then [IntegerEntry(f, (ai - bV)), IntegerEntry(g, (aj - bW)), IntegerEntry(k, (al - aY)), Burn(ak, aY), ScriptTransfer(ay.caller, bV, ac), ScriptTransfer(ay.caller, bW, ad)]
506492 else throw("Strict value is not equal to itself.")
507493 }
508494 else throw("Strict value is not equal to itself.")
511497
512498
513499
514-@Callable(aC)
515-func exchange (bd) = valueOrElse(bk(), {
516- let cb = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
517- let bc = cb._1
518- let bY = cb._2
519- if (if ((am == 0))
500+@Callable(ay)
501+func exchange (aZ) = valueOrElse(bg(), {
502+ let bX = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
503+ let aY = bX._1
504+ let bU = bX._2
505+ if (if ((ai == 0))
520506 then true
521- else (an == 0))
507+ else (aj == 0))
522508 then throw("Can't exchange with zero balance")
523- else if ((0 >= bd))
524- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bd)))
525- else if ((size(aC.payments) != 1))
509+ else if ((0 >= aZ))
510+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(aZ)))
511+ else if ((size(ay.payments) != 1))
526512 then throw("One attached payment expected")
527- else if (!(aL))
528- then ([ScriptTransfer(aC.caller, bc, bY)] ++ bj())
529- else if ((bY == ag))
513+ else if (!(aH))
514+ then ([ScriptTransfer(ay.caller, aY, bU)] ++ bf())
515+ else if ((bU == ac))
530516 then {
531- let cc = ah
532- let cd = bb(bc, bd, am, an)
533- let bg = cd._1
534- let bh = cd._2
535- let bi = cd._3
536- let ce = (am + bc)
537- let cf = ((an - bh) - bi)
538- let bJ = if (containsElement(U, ae))
539- then invoke(this, "stakeUnstake", [true, bc, ae], nil)
517+ let bY = ad
518+ let bZ = aX(aY, aZ, ai, aj)
519+ let bc = bZ._1
520+ let bd = bZ._2
521+ let be = bZ._3
522+ let ca = (ai + aY)
523+ let cb = ((aj - bd) - be)
524+ let bF = if (containsElement(S, aa))
525+ then invoke(this, "stakeUnstake", [true, aY, aa], nil)
540526 else 0
541- if ((bJ == bJ))
527+ if ((bF == bF))
542528 then {
543- let bK = if (containsElement(U, af))
544- then invoke(this, "stakeUnstake", [false, (bh + bi), af], nil)
529+ let bG = if (containsElement(S, ab))
530+ then invoke(this, "stakeUnstake", [false, (bd + be), ab], nil)
545531 else 0
546- if ((bK == bK))
547- then [IntegerEntry(f, ce), IntegerEntry(g, cf), ScriptTransfer(aC.caller, bh, cc), ScriptTransfer(O, bi, cc)]
532+ if ((bG == bG))
533+ then $Tuple2([IntegerEntry(f, ca), IntegerEntry(g, cb), ScriptTransfer(ay.caller, bd, bY), ScriptTransfer(N, be, bY)], $Tuple2(bd, bY))
548534 else throw("Strict value is not equal to itself.")
549535 }
550536 else throw("Strict value is not equal to itself.")
551537 }
552- else if ((bY == ah))
538+ else if ((bU == ad))
553539 then {
554- let cc = ag
555- let cg = bb(bc, bd, an, am)
556- let bg = cg._1
557- let bh = cg._2
558- let bi = cg._3
559- let ce = ((am - bh) - bi)
560- let cf = (an + bc)
561- let bJ = if (containsElement(U, ae))
562- then invoke(this, "stakeUnstake", [false, (bh + bi), ae], nil)
540+ let bY = ac
541+ let cc = aX(aY, aZ, aj, ai)
542+ let bc = cc._1
543+ let bd = cc._2
544+ let be = cc._3
545+ let ca = ((ai - bd) - be)
546+ let cb = (aj + aY)
547+ let bF = if (containsElement(S, aa))
548+ then invoke(this, "stakeUnstake", [false, (bd + be), aa], nil)
563549 else 0
564- if ((bJ == bJ))
550+ if ((bF == bF))
565551 then {
566- let bK = if (containsElement(U, af))
567- then invoke(this, "stakeUnstake", [true, bc, af], nil)
552+ let bG = if (containsElement(S, ab))
553+ then invoke(this, "stakeUnstake", [true, aY, ab], nil)
568554 else 0
569- if ((bK == bK))
570- then [IntegerEntry(f, ce), IntegerEntry(g, cf), ScriptTransfer(aC.caller, bh, cc), ScriptTransfer(O, bi, cc)]
555+ if ((bG == bG))
556+ then $Tuple2([IntegerEntry(f, ca), IntegerEntry(g, cb), ScriptTransfer(ay.caller, bd, bY), ScriptTransfer(N, be, bY)], $Tuple2(bd, bY))
571557 else throw("Strict value is not equal to itself.")
572558 }
573559 else throw("Strict value is not equal to itself.")
574560 }
575- else throw(((("Incorrect asset attached. Expected: " + ae) + " or ") + af))
561+ else throw(((("Incorrect asset attached. Expected: " + aa) + " or ") + ab))
576562 })
577563
578564
579565
580-@Callable(aC)
581-func shutdown () = if (!(ad))
582- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
583- else if (!(containsElement([J, K, L, M], aC.callerPublicKey)))
566+@Callable(ay)
567+func shutdown () = if (!(Z))
568+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
569+ else if (!(containsElement([J, K, L], ay.callerPublicKey)))
584570 then throw("Only admin can call this function")
585- else aR("Paused by admin")
571+ else aN("Paused by admin")
586572
587573
588574
589-@Callable(aC)
590-func activate () = if (ad)
575+@Callable(ay)
576+func activate () = if (Z)
591577 then throw("DApp is already active")
592- else if (!(containsElement([J, K, L, M], aC.callerPublicKey)))
578+ else if (!(containsElement([J, K, L], ay.callerPublicKey)))
593579 then throw("Only admin can call this function")
594- else [BooleanEntry(c, true), DeleteEntry(n)]
580+ else [BooleanEntry(c, true), DeleteEntry(m)]
595581
596582
597583
598-@Callable(aC)
599-func takeIntoAccountExtraFunds () = valueOrElse(bk(), {
600- let ch = (aJ - am)
601- let ci = (aK - an)
602- if ((aC.caller != O))
584+@Callable(ay)
585+func takeIntoAccountExtraFunds () = valueOrElse(bg(), {
586+ let cd = (aF - ai)
587+ let ce = (aG - aj)
588+ if ((ay.caller != N))
603589 then throw("Only the wallet can call this function")
604- else if (if ((0 > ch))
590+ else if (if ((0 > cd))
605591 then true
606- else (0 > ci))
607- then aR("Enroll amount negative")
608- else if (if ((ch == 0))
609- then (ci == 0)
592+ else (0 > ce))
593+ then aN("Enroll amount negative")
594+ else if (if ((cd == 0))
595+ then (ce == 0)
610596 else false)
611597 then throw("No money to take")
612598 else {
613- let bJ = if (containsElement(U, ae))
614- then invoke(this, "stakeUnstake", [true, ch, ae], nil)
599+ let bF = if (containsElement(S, aa))
600+ then invoke(this, "stakeUnstake", [true, cd, aa], nil)
615601 else 0
616- if ((bJ == bJ))
602+ if ((bF == bF))
617603 then {
618- let bK = if (containsElement(U, af))
619- then invoke(this, "stakeUnstake", [true, ci, af], nil)
604+ let bG = if (containsElement(S, ab))
605+ then invoke(this, "stakeUnstake", [true, ce, ab], nil)
620606 else 0
621- if ((bK == bK))
622- then [IntegerEntry(f, (am + ch)), IntegerEntry(g, (an + ci)), IntegerEntry(("last_income_" + ae), ch), IntegerEntry(("last_income_" + af), ci)]
607+ if ((bG == bG))
608+ then [IntegerEntry(f, (ai + cd)), IntegerEntry(g, (aj + ce)), IntegerEntry(("last_income_" + aa), cd), IntegerEntry(("last_income_" + ab), ce)]
623609 else throw("Strict value is not equal to itself.")
624610 }
625611 else throw("Strict value is not equal to itself.")
628614
629615
630616
631-@Callable(aC)
632-func stakeUnstake (aU,aW,cj) = if ((aC.caller != this))
617+@Callable(ay)
618+func stakeUnstake (aQ,aS,cf) = if ((ay.caller != this))
633619 then throw("Only contract itself can invoke this function")
634- else if ((cj == "WAVES"))
620+ else if ((cf == "WAVES"))
635621 then {
636- let ck = addressFromStringValue(valueOrErrorMessage(getString(D, x), "No leasing pool in oracle"))
637- let cl = getBinary(this, z)
638- let cm = valueOrElse(getInteger(this, y), 0)
639- let cn = if (aU)
640- then (cm + aW)
641- else (cm - aW)
642- let co = Lease(ck, cn)
643- let cp = calculateLeaseId(co)
644- let cq = [co, BinaryEntry(z, cp), IntegerEntry(y, cn)]
645- let G = cl
622+ let cg = addressFromStringValue(valueOrErrorMessage(getString(D, v), "No leasing pool in oracle"))
623+ let ch = getBinary(this, x)
624+ let ci = valueOrElse(getInteger(this, w), 0)
625+ let cj = if (aQ)
626+ then (ci + aS)
627+ else (ci - aS)
628+ let ck = Lease(cg, cj)
629+ let cl = calculateLeaseId(ck)
630+ let cm = [ck, BinaryEntry(x, cl), IntegerEntry(w, cj)]
631+ let G = ch
646632 if ($isInstanceOf(G, "ByteVector"))
647633 then {
648- let cr = G
649- ([LeaseCancel(cr)] ++ cq)
634+ let cn = G
635+ ([LeaseCancel(cn)] ++ cm)
650636 }
651- else cq
637+ else cm
652638 }
653639 else {
654- let cs = aV(aU, aW, fromBase58String(cj))
655- let aY = cs._1
656- let ct = cs._2
657- let cu = cs._3
658- let cv = cs._4
659- let cw = invoke(ct, aY, cu, cv)
660- if ((cw == cw))
640+ let co = aR(aQ, aS, fromBase58String(cf))
641+ let aU = co._1
642+ let cp = co._2
643+ let cq = co._3
644+ let cr = co._4
645+ let cs = invoke(cp, aU, cq, cr)
646+ if ((cs == cs))
661647 then nil
662648 else throw("Strict value is not equal to itself.")
663649 }
664650
665651
666652
667-@Callable(aC)
668-func stakeAll () = valueOrElse(bk(), if (!(containsElement([J, K, L, M], aC.callerPublicKey)))
653+@Callable(ay)
654+func stakeAll () = valueOrElse(bg(), if (!(containsElement([J, K, L], ay.callerPublicKey)))
669655 then throw("Only admin can call this function")
670656 else {
671- let bJ = if (containsElement(U, ae))
657+ let bF = if (containsElement(S, aa))
672658 then {
673- let cx = (am - aD)
674- if ((cx > 0))
675- then invoke(this, "stakeUnstake", [true, cx, ae], nil)
659+ let ct = (ai - az)
660+ if ((ct > 0))
661+ then invoke(this, "stakeUnstake", [true, ct, aa], nil)
676662 else 0
677663 }
678664 else 0
679- if ((bJ == bJ))
665+ if ((bF == bF))
680666 then {
681- let bK = if (containsElement(U, af))
667+ let bG = if (containsElement(S, ab))
682668 then {
683- let cy = (an - aE)
684- if ((cy > 0))
685- then invoke(this, "stakeUnstake", [true, cy, af], nil)
669+ let cu = (aj - aA)
670+ if ((cu > 0))
671+ then invoke(this, "stakeUnstake", [true, cu, ab], nil)
686672 else 0
687673 }
688674 else 0
689- if ((bK == bK))
675+ if ((bG == bG))
690676 then nil
691677 else throw("Strict value is not equal to itself.")
692678 }
694680 })
695681
696682
697-@Verifier(cz)
698-func cA () = {
699- let cB = {
700- let cC = if (sigVerify(cz.bodyBytes, cz.proofs[0], J))
683+@Verifier(cv)
684+func cw () = {
685+ let cx = {
686+ let cy = if (sigVerify(cv.bodyBytes, cv.proofs[0], J))
701687 then 1
702688 else 0
703- let cD = if (sigVerify(cz.bodyBytes, cz.proofs[1], K))
689+ let cz = if (sigVerify(cv.bodyBytes, cv.proofs[1], K))
704690 then 1
705691 else 0
706- let cE = if (sigVerify(cz.bodyBytes, cz.proofs[2], L))
692+ let cA = if (sigVerify(cv.bodyBytes, cv.proofs[2], L))
707693 then 1
708694 else 0
709- (((cC + cD) + cE) >= 2)
695+ (((cy + cz) + cA) >= 2)
710696 }
711- let G = cz
697+ let G = cv
712698 if ($isInstanceOf(G, "InvokeScriptTransaction"))
713699 then {
714- let cw = G
715- let cF = if ((cw.dApp == this))
716- then (cw.function == "takeIntoAccountExtraFunds")
700+ let cs = G
701+ let cB = if ((cs.dApp == this))
702+ then (cs.function == "takeIntoAccountExtraFunds")
717703 else false
718- let cG = if (if (if ((cw.dApp == X))
719- then (cw.function == "exchange")
720- else false)
721- then (ag == Q)
704+ let cC = if (if (if (sigVerify(cv.bodyBytes, cv.proofs[0], J))
705+ then true
706+ else sigVerify(cv.bodyBytes, cv.proofs[0], K))
707+ then true
708+ else sigVerify(cv.bodyBytes, cv.proofs[0], L))
709+ then true
710+ else sigVerify(cv.bodyBytes, cv.proofs[0], M)
711+ if (if (cB)
712+ then cC
722713 else false)
723714 then true
724- else if (if ((ah == Q))
725- then (size(cw.payments) == 1)
726- else false)
727- then (cw.payments[0].assetId == Q)
728- else false
729- let cH = if (if (if ((cw.dApp == Y))
730- then (cw.function == "exchange")
731- else false)
732- then (ag == R)
733- else false)
734- then true
735- else if (if ((ah == R))
736- then (size(cw.payments) == 1)
737- else false)
738- then (cw.payments[0].assetId == Q)
739- else false
740- let cI = if (if (if (sigVerify(cz.bodyBytes, cz.proofs[0], J))
741- then true
742- else sigVerify(cz.bodyBytes, cz.proofs[0], K))
743- then true
744- else sigVerify(cz.bodyBytes, cz.proofs[0], L))
745- then true
746- else sigVerify(cz.bodyBytes, cz.proofs[0], N)
747- if (if (if (if (cF)
748- then true
749- else cG)
750- then true
751- else cH)
752- then cI
753- else false)
754- then true
755- else cB
715+ else cx
756716 }
757- else cB
717+ else cx
758718 }
759719
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
28-let m = "commission_scale_delimiter"
28+let m = "shutdown_cause"
2929
30-let n = "shutdown_cause"
30+let n = "first_harvest"
3131
32-let o = "first_harvest"
32+let o = "first_harvest_height"
3333
34-let p = "first_harvest_height"
34+let p = "share_limit_on_first_harvest"
3535
36-let q = "share_limit_on_first_harvest"
36+let q = "base_period"
3737
38-let r = "base_period"
38+let r = "period_length"
3939
40-let s = "period_length"
40+let s = "start_height"
4141
42-let t = "start_height"
42+let t = "staking_usdnnsbt_address"
4343
44-let u = "first_harvest_height"
44+let u = "staking_eurn_address"
4545
46-let v = "staking_usdnnsbt_address"
46+let v = "leasing_address"
4747
48-let w = "staking_eurn_address"
48+let w = "leasing_amount"
4949
50-let x = "leasing_address"
50+let x = "leasing_id"
5151
52-let y = "leasing_amount"
52+let y = "admin_pub_1"
5353
54-let z = "leasing_id"
54+let z = "admin_pub_2"
5555
56-let A = "admin_pub_1"
56+let A = "admin_pub_3"
5757
58-let B = "admin_pub_2"
58+let B = "admin_invoke_pub"
5959
60-let C = "admin_pub_3"
60+let C = "money_box_address"
6161
6262 let D = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
6363
6464 func E (F) = {
6565 let G = getString(D, F)
6666 if ($isInstanceOf(G, "String"))
6767 then {
6868 let H = G
6969 fromBase58String(H)
7070 }
7171 else {
7272 let I = G
73- throw("Admin public key is empty")
73+ throw((F + "is empty"))
7474 }
7575 }
7676
7777
78-let J = E(A)
78+let J = E(y)
7979
80-let K = E(B)
80+let K = E(z)
8181
82-let L = E(C)
82+let L = E(A)
8383
84-let M = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
84+let M = E(B)
8585
86-let N = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
86+let N = Address(E(C))
8787
88-let O = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
88+let O = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8989
90-let P = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
90+let P = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9191
92-let Q = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
92+let Q = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
9393
94-let R = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
94+let R = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
9595
96-let S = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
96+let S = ["WAVES", toBase58String(P), toBase58String(R)]
9797
98-let T = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
98+let T = Address(E(t))
9999
100-let U = ["WAVES", toBase58String(Q), toBase58String(R), toBase58String(T)]
100+let U = Address(E(u))
101101
102-let V = Address(fromBase58String(valueOrErrorMessage(getString(D, v), "no usdn staking address")))
102+let V = valueOrErrorMessage(getInteger(O, q), "Empty kBasePeriod")
103103
104-let W = Address(fromBase58String(valueOrErrorMessage(getString(D, w), "no eurn staking address")))
104+let W = valueOrErrorMessage(getInteger(O, s), "Empty kStartHeight")
105105
106-let X = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
106+let X = valueOrErrorMessage(getInteger(O, r), "Empty kPeriodLength")
107107
108-let Y = Address(base58'3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m')
108+let Y = ((V + ((height - W) / X)) + 3)
109109
110-let Z = valueOrErrorMessage(getInteger(P, r), "Empty kBasePeriod")
110+let Z = getBooleanValue(this, c)
111111
112-let aa = valueOrErrorMessage(getInteger(P, t), "Empty kStartHeight")
112+let aa = getStringValue(this, d)
113113
114-let ab = valueOrErrorMessage(getInteger(P, s), "Empty kPeriodLength")
114+let ab = getStringValue(this, e)
115115
116-let ac = ((Z + ((height - aa) / ab)) + 3)
116+let ac = if ((aa == "WAVES"))
117+ then unit
118+ else fromBase58String(aa)
117119
118-let ad = getBooleanValue(this, c)
120+let ad = if ((ab == "WAVES"))
121+ then unit
122+ else fromBase58String(ab)
119123
120-let ae = getStringValue(this, d)
121-
122-let af = getStringValue(this, e)
123-
124-let ag = if ((ae == "WAVES"))
125- then unit
126- else fromBase58String(ae)
127-
128-let ah = if ((af == "WAVES"))
129- then unit
130- else fromBase58String(af)
131-
132-let ai = {
133- let G = ag
124+let ae = {
125+ let G = ac
134126 if ($isInstanceOf(G, "ByteVector"))
135127 then {
136- let aj = G
137- value(assetInfo(aj)).name
128+ let af = G
129+ value(assetInfo(af)).name
138130 }
139131 else if ($isInstanceOf(G, "Unit"))
140132 then {
141- let ak = G
133+ let ag = G
142134 "WAVES"
143135 }
144136 else throw("Match error")
145137 }
146138
147-let al = {
148- let G = ah
139+let ah = {
140+ let G = ad
149141 if ($isInstanceOf(G, "ByteVector"))
150142 then {
151- let aj = G
152- value(assetInfo(aj)).name
143+ let af = G
144+ value(assetInfo(af)).name
153145 }
154146 else if ($isInstanceOf(G, "Unit"))
155147 then {
156- let ak = G
148+ let ag = G
157149 "WAVES"
158150 }
159151 else throw("Match error")
160152 }
161153
162-let am = getIntegerValue(this, f)
154+let ai = getIntegerValue(this, f)
163155
164-let an = getIntegerValue(this, g)
156+let aj = getIntegerValue(this, g)
165157
166-let ao = fromBase58String(getStringValue(this, j))
158+let ak = fromBase58String(getStringValue(this, j))
167159
168-let ap = getIntegerValue(this, k)
160+let al = getIntegerValue(this, k)
169161
170-let aq = 3000
162+let am = getIntegerValue(this, l)
171163
172-let ar = 1200
164+let an = fraction(am, 40, 100)
173165
174-let as = 1000000
166+let ao = 1000000
175167
176-let at = 1000
168+let ap = 1000
177169
178-let au = 100000000
170+let aq = 100000000
179171
180-let av = 1000
172+let ar = 1000
181173
182-let aw = 8
174+let as = 8
183175
184-func ax (ay) = {
185- let G = ay
176+func at (au) = {
177+ let G = au
186178 if ($isInstanceOf(G, "ByteVector"))
187179 then {
188- let aj = G
189- assetBalance(this, aj)
180+ let af = G
181+ assetBalance(this, af)
190182 }
191183 else if ($isInstanceOf(G, "Unit"))
192184 then {
193- let ak = G
185+ let ag = G
194186 wavesBalance(this).available
195187 }
196188 else throw("Match error")
197189 }
198190
199191
200-func az (ay) = {
201- let aA = {
202- let G = ay
192+func av (au) = {
193+ let aw = {
194+ let G = au
203195 if ($isInstanceOf(G, "ByteVector"))
204196 then {
205- let aB = G
206- if (if ((aB == Q))
207- then true
208- else (aB == R))
209- then getInteger(V, ((("rpd_balance_" + toBase58String(aB)) + "_") + toString(this)))
210- else if ((aB == T))
211- then getInteger(W, ((("%s%s%s__stakingBalance__" + toBase58String(aB)) + "__") + toString(this)))
197+ let ax = G
198+ if ((ax == P))
199+ then getInteger(T, ((("rpd_balance_" + toBase58String(ax)) + "_") + toString(this)))
200+ else if ((ax == R))
201+ then getInteger(U, ((("%s%s%s__stakingBalance__" + toBase58String(ax)) + "__") + toString(this)))
212202 else 0
213203 }
214204 else if ($isInstanceOf(G, "Unit"))
215- then valueOrElse(getInteger(this, y), 0)
205+ then valueOrElse(getInteger(this, w), 0)
216206 else throw("Match error")
217207 }
218- let G = aA
208+ let G = aw
219209 if ($isInstanceOf(G, "Int"))
220210 then {
221- let aC = G
222- aC
211+ let ay = G
212+ ay
223213 }
224214 else 0
225215 }
226216
227217
228-let aD = az(ag)
218+let az = av(ac)
229219
230-let aE = az(ah)
220+let aA = av(ad)
231221
232-let aF = getIntegerValue(this, h)
222+let aB = getIntegerValue(this, h)
233223
234-let aG = getIntegerValue(this, i)
224+let aC = getIntegerValue(this, i)
235225
236-let aH = (am - aD)
226+let aD = (ai - az)
237227
238-let aI = (an - aE)
228+let aE = (aj - aA)
239229
240-let aJ = (ax(ag) + aD)
230+let aF = (at(ac) + az)
241231
242-let aK = (ax(ah) + aE)
232+let aG = (at(ad) + aA)
243233
244-let aL = if ((aJ >= am))
245- then (aK >= an)
234+let aH = if ((aF >= ai))
235+ then (aG >= aj)
246236 else false
247237
248-func aM (ay) = {
249- let G = ay
238+func aI (au) = {
239+ let G = au
250240 if ($isInstanceOf(G, "ByteVector"))
251241 then {
252- let aj = G
253- let aN = toBase58String(aj)
254- let aO = valueOrErrorMessage(assetInfo(aj), (("Asset " + aN) + " doesn't exist"))
255- $Tuple3(aN, aO.name, aO.decimals)
242+ let af = G
243+ let aJ = toBase58String(af)
244+ let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
245+ $Tuple3(aJ, aK.name, aK.decimals)
256246 }
257247 else if ($isInstanceOf(G, "Unit"))
258248 then {
259- let ak = G
249+ let ag = G
260250 $Tuple3("WAVES", "WAVES", 8)
261251 }
262252 else throw("Match error")
263253 }
264254
265255
266-func aP (aQ) = if ((aQ == "WAVES"))
256+func aL (aM) = if ((aM == "WAVES"))
267257 then $Tuple3("WAVES", "WAVES", 8)
268258 else {
269- let aN = aQ
270- let aj = fromBase58String(aQ)
271- let aO = valueOrErrorMessage(assetInfo(aj), (("Asset " + aN) + " doesn't exist"))
272- $Tuple3(aN, aO.name, aO.decimals)
259+ let aJ = aM
260+ let af = fromBase58String(aM)
261+ let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
262+ $Tuple3(aJ, aK.name, aK.decimals)
273263 }
274264
275265
276-func aR (aS) = [BooleanEntry(c, false), StringEntry(n, aS)]
266+func aN (aO) = [BooleanEntry(c, false), StringEntry(m, aO)]
277267
278268
279-func aT (aU,ay) = if (aU)
280- then if ((ay == Q))
281- then $Tuple2("lockNeutrino", V)
282- else if ((ay == R))
283- then $Tuple2("lockNsbt", V)
284- else $Tuple2("startStaking", W)
285- else if ((ay == Q))
286- then $Tuple2("unlockNeutrino", V)
287- else if ((ay == R))
288- then $Tuple2("unlockNsbt", V)
289- else $Tuple2("stopStaking", W)
269+func aP (aQ,au) = if (aQ)
270+ then if ((au == P))
271+ then $Tuple2("lockNeutrino", T)
272+ else $Tuple2("startStaking", U)
273+ else if ((au == P))
274+ then $Tuple2("unlockNeutrino", T)
275+ else $Tuple2("stopStaking", U)
290276
291277
292-func aV (aU,aW,ay) = if (aU)
278+func aR (aQ,aS,au) = if (aQ)
293279 then {
294- let aX = aT(aU, ay)
295- let aY = aX._1
296- let aZ = aX._2
297- $Tuple4(aY, aZ, nil, [AttachedPayment(ay, aW)])
280+ let aT = aP(aQ, au)
281+ let aU = aT._1
282+ let aV = aT._2
283+ $Tuple4(aU, aV, nil, [AttachedPayment(au, aS)])
298284 }
299285 else {
300- let ba = aT(aU, ay)
301- let aY = ba._1
302- let aZ = ba._2
303- $Tuple4(aY, aZ, [aW, toBase58String(ay)], nil)
286+ let aW = aP(aQ, au)
287+ let aU = aW._1
288+ let aV = aW._2
289+ $Tuple4(aU, aV, [aS, toBase58String(au)], nil)
304290 }
305291
306292
307-func bb (bc,bd,be,bf) = {
308- let bg = fraction(bf, bc, (bc + be))
309- let bh = fraction(bg, (as - aq), as)
310- let bi = fraction(bg, ar, as)
311- if ((bd > bh))
312- then throw(((("Calculated amount to receive " + toString(bh)) + " is less than specified minimum ") + toString(bd)))
313- else $Tuple3(bg, bh, bi)
293+func aX (aY,aZ,ba,bb) = {
294+ let bc = fraction(bb, aY, (aY + ba))
295+ let bd = fraction(bc, (ao - am), ao)
296+ let be = fraction(bc, an, ao)
297+ if ((aZ > bd))
298+ then throw(((("Calculated amount to receive " + toString(bd)) + " is less than specified minimum ") + toString(aZ)))
299+ else $Tuple3(bc, bd, be)
314300 }
315301
316302
317-func bj () = aR(((((((((((((((("Suspicious state. Actual balances: " + toString(aJ)) + " ") + ai) + ", ") + toString(aK)) + " ") + al) + ". State: ") + toString(am)) + " ") + ai) + ", ") + toString(an)) + " ") + al))
303+func bf () = aN(((((((((((((((("Suspicious state. Actual balances: " + toString(aF)) + " ") + ae) + ", ") + toString(aG)) + " ") + ah) + ". State: ") + toString(ai)) + " ") + ae) + ", ") + toString(aj)) + " ") + ah))
318304
319305
320-func bk () = if (ad)
306+func bg () = if (Z)
321307 then unit
322308 else throw("DApp is inactive at this moment")
323309
324310
325-@Callable(aC)
326-func init (bl) = {
327- let bm = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
328- let bn = bm._1
329- let bo = bm._2
330- let bp = $Tuple2(aC.payments[1].amount, aC.payments[1].assetId)
331- let bq = bp._1
332- let br = bp._2
333- let bs = aM(bo)
311+@Callable(ay)
312+func init (bh) = {
313+ let bi = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
314+ let bj = bi._1
315+ let bk = bi._2
316+ let bl = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
317+ let bm = bl._1
318+ let bn = bl._2
319+ let bo = aI(bk)
320+ let bp = bo._1
321+ let bq = bo._2
322+ let br = bo._3
323+ let bs = aI(bn)
334324 let bt = bs._1
335325 let bu = bs._2
336326 let bv = bs._3
337- let bw = aM(br)
338- let bx = bw._1
339- let by = bw._2
340- let bz = bw._3
341- if (!(containsElement([J, K, L, N], aC.callerPublicKey)))
327+ if (!(containsElement([J, K, L, M], ay.callerPublicKey)))
342328 then throw("Only admin can call this function")
343329 else if (isDefined(getBoolean(this, c)))
344330 then throw("DApp is already active")
345- else if ((bo == br))
331+ else if ((bk == bn))
346332 then throw("Assets must be different")
347333 else {
348- let bA = ((("s" + take(bu, 7)) + "_") + take(by, 7))
349- let bB = ((((("ShareToken of SwopFi protocol for " + bu) + " and ") + by) + " at address ") + toString(this))
350- let bC = ((bv + bz) / 2)
351- let bD = pow(bn, bv, 5, 1, bv, DOWN)
352- let bE = pow(bq, bz, 5, 1, bz, DOWN)
353- let bF = pow(10, 0, bC, 0, 0, DOWN)
354- let bG = fraction(bD, bE, bF)
355- let bH = Issue(bA, bB, bG, bC, true)
356- let bI = calculateAssetId(bH)
357- let bJ = if (containsElement(U, bt))
358- then invoke(this, "stakeUnstake", [true, bn, bt], nil)
334+ let bw = ((("s" + take(bq, 7)) + "_") + take(bu, 7))
335+ let bx = ((((("ShareToken of SwopFi protocol for " + bq) + " and ") + bu) + " at address ") + toString(this))
336+ let by = ((br + bv) / 2)
337+ let bz = pow(bj, br, 5, 1, br, DOWN)
338+ let bA = pow(bm, bv, 5, 1, bv, DOWN)
339+ let bB = pow(10, 0, by, 0, 0, DOWN)
340+ let bC = fraction(bz, bA, bB)
341+ let bD = Issue(bw, bx, bC, by, true)
342+ let bE = calculateAssetId(bD)
343+ let bF = if (containsElement(S, bp))
344+ then invoke(this, "stakeUnstake", [true, bj, bp], nil)
359345 else 0
360- if ((bJ == bJ))
346+ if ((bF == bF))
361347 then {
362- let bK = if (containsElement(U, bx))
363- then invoke(this, "stakeUnstake", [true, bq, bx], nil)
348+ let bG = if (containsElement(S, bt))
349+ then invoke(this, "stakeUnstake", [true, bm, bt], nil)
364350 else 0
365- if ((bK == bK))
351+ if ((bG == bG))
366352 then {
367- let bL = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bt), StringEntry(e, bx), IntegerEntry(f, bn), IntegerEntry(g, bq), IntegerEntry(l, aq), IntegerEntry(m, as), bH, StringEntry(j, toBase58String(bI)), IntegerEntry(k, bG), ScriptTransfer(aC.caller, bG, bI)]
368- if (bl)
369- then (bL ++ [BooleanEntry(o, bl), IntegerEntry(p, (aa + (ac * ab)))])
370- else bL
353+ let bH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bp), StringEntry(e, bt), IntegerEntry(f, bj), IntegerEntry(g, bm), IntegerEntry(l, getIntegerValue(D, "base_fee_cpmm")), bD, StringEntry(j, toBase58String(bE)), IntegerEntry(k, bC), ScriptTransfer(ay.caller, bC, bE)]
354+ if (bh)
355+ then (bH ++ [BooleanEntry(n, bh), IntegerEntry(o, (W + (Y * X)))])
356+ else bH
371357 }
372358 else throw("Strict value is not equal to itself.")
373359 }
374360 else throw("Strict value is not equal to itself.")
375361 }
376362 }
377363
378364
379365
380-@Callable(aC)
381-func initWithInitRatio (bM,bN,ae,af,bl) = {
382- let bO = aP(ae)
383- let bt = bO._1
384- let bu = bO._2
385- let bv = bO._3
386- let bP = aP(af)
387- let bx = bP._1
388- let by = bP._2
389- let bz = bP._3
390- if (!(containsElement([J, K, L, N], aC.callerPublicKey)))
366+@Callable(ay)
367+func initWithInitRatio (bI,bJ,aa,ab,bh) = {
368+ let bK = aL(aa)
369+ let bp = bK._1
370+ let bq = bK._2
371+ let br = bK._3
372+ let bL = aL(ab)
373+ let bt = bL._1
374+ let bu = bL._2
375+ let bv = bL._3
376+ if (!(containsElement([J, K, L, M], ay.callerPublicKey)))
391377 then throw("Only admin can call this function")
392378 else if (isDefined(getBoolean(this, c)))
393379 then throw("DApp is already active")
394- else if ((ae == af))
380+ else if ((aa == ab))
395381 then throw("Assets must be different")
396382 else {
397- let bA = ((("s" + take(bu, 7)) + "_") + take(by, 7))
398- let bB = ((((("ShareToken of SwopFi protocol for " + bu) + " and ") + by) + " at address ") + toString(this))
399- let bC = ((bv + bz) / 2)
400- let bG = 0
401- let bH = Issue(bA, bB, bG, bC, true)
402- let bI = calculateAssetId(bH)
403- let bL = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bt), StringEntry(e, bx), IntegerEntry(h, bM), IntegerEntry(i, bN), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, aq), IntegerEntry(m, as), bH, StringEntry(j, toBase58String(bI)), IntegerEntry(k, bG)]
404- if (bl)
405- then (bL ++ [BooleanEntry(o, bl), IntegerEntry(p, (aa + (ac * ab)))])
406- else bL
383+ let bw = ((("s" + take(bq, 7)) + "_") + take(bu, 7))
384+ let bx = ((((("ShareToken of SwopFi protocol for " + bq) + " and ") + bu) + " at address ") + toString(this))
385+ let by = ((br + bv) / 2)
386+ let bC = 0
387+ let bD = Issue(bw, bx, bC, by, true)
388+ let bE = calculateAssetId(bD)
389+ let bH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bp), StringEntry(e, bt), IntegerEntry(h, bI), IntegerEntry(i, bJ), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, getIntegerValue(D, "base_fee_cpmm")), bD, StringEntry(j, toBase58String(bE)), IntegerEntry(k, bC)]
390+ if (bh)
391+ then (bH ++ [BooleanEntry(n, bh), IntegerEntry(o, (W + (Y * X)))])
392+ else bH
407393 }
408394 }
409395
410396
411397
412-@Callable(aC)
413-func keepLimitForFirstHarvest (bQ) = valueOrElse(bk(), if (!(containsElement([J, K, L, N], aC.callerPublicKey)))
398+@Callable(ay)
399+func keepLimitForFirstHarvest (bM) = valueOrElse(bg(), if (!(containsElement([J, K, L, M], ay.callerPublicKey)))
414400 then throw("Only admin can call this function")
415- else [IntegerEntry(q, bQ)])
401+ else [IntegerEntry(p, bM)])
416402
417403
418404
419-@Callable(aC)
420-func replenishWithTwoTokens (bR) = valueOrElse(bk(), {
421- let bo = aC.payments[0].assetId
422- let br = aC.payments[1].assetId
423- let bn = aC.payments[0].amount
424- let bq = aC.payments[1].amount
425- let bS = aM(bo)
426- let bt = bS._1
427- let bu = bS._2
428- let bv = bS._3
429- let bT = aM(br)
430- let bx = bT._1
431- let by = bT._2
432- let bz = bT._3
433- let bU = if (if ((am == 0))
434- then (an == 0)
405+@Callable(ay)
406+func replenishWithTwoTokens (bN) = valueOrElse(bg(), {
407+ let bk = ay.payments[0].assetId
408+ let bn = ay.payments[1].assetId
409+ let bj = ay.payments[0].amount
410+ let bm = ay.payments[1].amount
411+ let bO = aI(bk)
412+ let bp = bO._1
413+ let bq = bO._2
414+ let br = bO._3
415+ let bP = aI(bn)
416+ let bt = bP._1
417+ let bu = bP._2
418+ let bv = bP._3
419+ let bQ = if (if ((ai == 0))
420+ then (aj == 0)
435421 else false)
436422 then true
437423 else false
438- let bV = if (bU)
439- then fraction(fraction(aF, au, bn), at, fraction(aG, au, bq))
440- else fraction(fraction(am, au, bn), at, fraction(an, au, bq))
441- let bC = ((bv + bz) / 2)
442- let bW = if (bU)
443- then fraction(pow(bn, bv, 5, 1, bv, DOWN), pow(bq, bz, 5, 1, bz, DOWN), pow(10, 0, bC, 0, 0, DOWN))
444- else fraction(min([fraction(bn, au, am), fraction(bq, au, an)]), ap, au)
445- if (if ((0 > bR))
424+ let bR = if (bQ)
425+ then fraction(fraction(aB, aq, bj), ap, fraction(aC, aq, bm))
426+ else fraction(fraction(ai, aq, bj), ap, fraction(aj, aq, bm))
427+ let by = ((br + bv) / 2)
428+ let bS = if (bQ)
429+ then fraction(pow(bj, br, 5, 1, br, DOWN), pow(bm, bv, 5, 1, bv, DOWN), pow(10, 0, by, 0, 0, DOWN))
430+ else fraction(min([fraction(bj, aq, ai), fraction(bm, aq, aj)]), al, aq)
431+ if (if ((0 > bN))
446432 then true
447- else (bR > av))
448- then throw(((("Slippage tolerance must be between 0 and " + toString(av)) + " inclusively. Actual: ") + toString(bR)))
449- else if ((size(aC.payments) != 2))
433+ else (bN > ar))
434+ then throw(((("Slippage tolerance must be between 0 and " + toString(ar)) + " inclusively. Actual: ") + toString(bN)))
435+ else if ((size(ay.payments) != 2))
450436 then throw("Two attached assets expected")
451- else if (if ((bo != ag))
437+ else if (if ((bk != ac))
452438 then true
453- else (br != ah))
454- then throw(((("Incorrect assets attached. Expected: " + ae) + " and ") + af))
455- else if (if ((((at * (av - bR)) / av) > bV))
439+ else (bn != ad))
440+ then throw(((("Incorrect assets attached. Expected: " + aa) + " and ") + ab))
441+ else if (if ((((ap * (ar - bN)) / ar) > bR))
456442 then true
457- else (bV > ((at * (av + bR)) / av)))
443+ else (bR > ((ap * (ar + bN)) / ar)))
458444 then throw("Incorrect assets amount: amounts must have the contract ratio")
459- else if ((bW == 0))
445+ else if ((bS == 0))
460446 then throw("Too small amount to replenish")
461- else if (!(aL))
462- then ([ScriptTransfer(aC.caller, bn, bo), ScriptTransfer(aC.caller, bq, br)] ++ bj())
447+ else if (!(aH))
448+ then ([ScriptTransfer(ay.caller, bj, bk), ScriptTransfer(ay.caller, bm, bn)] ++ bf())
463449 else {
464- let bJ = if (containsElement(U, bt))
465- then invoke(this, "stakeUnstake", [true, bn, bt], nil)
450+ let bF = if (containsElement(S, bp))
451+ then invoke(this, "stakeUnstake", [true, bj, bp], nil)
466452 else 0
467- if ((bJ == bJ))
453+ if ((bF == bF))
468454 then {
469- let bK = if (containsElement(U, bx))
470- then invoke(this, "stakeUnstake", [true, bq, bx], nil)
455+ let bG = if (containsElement(S, bt))
456+ then invoke(this, "stakeUnstake", [true, bm, bt], nil)
471457 else 0
472- if ((bK == bK))
473- then [Reissue(ao, bW, true), IntegerEntry(f, (am + bn)), IntegerEntry(g, (an + bq)), IntegerEntry(k, (ap + bW)), ScriptTransfer(aC.caller, bW, ao)]
458+ if ((bG == bG))
459+ then [Reissue(ak, bS, true), IntegerEntry(f, (ai + bj)), IntegerEntry(g, (aj + bm)), IntegerEntry(k, (al + bS)), ScriptTransfer(ay.caller, bS, ak)]
474460 else throw("Strict value is not equal to itself.")
475461 }
476462 else throw("Strict value is not equal to itself.")
477463 }
478464 })
479465
480466
481467
482-@Callable(aC)
483-func withdraw () = valueOrElse(bk(), {
484- let bX = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
485- let bc = bX._1
486- let bY = bX._2
487- let bZ = fraction(bc, am, ap)
488- let ca = fraction(bc, an, ap)
489- if ((size(aC.payments) != 1))
468+@Callable(ay)
469+func withdraw () = valueOrElse(bg(), {
470+ let bT = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
471+ let aY = bT._1
472+ let bU = bT._2
473+ let bV = fraction(aY, ai, al)
474+ let bW = fraction(aY, aj, al)
475+ if ((size(ay.payments) != 1))
490476 then throw("One attached payment expected")
491- else if ((bY != ao))
492- then throw(("Incorrect asset attached. Expected: " + toBase58String(ao)))
493- else if (!(aL))
494- then ([ScriptTransfer(aC.caller, bc, bY)] ++ bj())
477+ else if ((bU != ak))
478+ then throw(("Incorrect asset attached. Expected: " + toBase58String(ak)))
479+ else if (!(aH))
480+ then ([ScriptTransfer(ay.caller, aY, bU)] ++ bf())
495481 else {
496- let bJ = if (containsElement(U, ae))
497- then invoke(this, "stakeUnstake", [false, bZ, ae], nil)
482+ let bF = if (containsElement(S, aa))
483+ then invoke(this, "stakeUnstake", [false, bV, aa], nil)
498484 else 0
499- if ((bJ == bJ))
485+ if ((bF == bF))
500486 then {
501- let bK = if (containsElement(U, af))
502- then invoke(this, "stakeUnstake", [false, ca, af], nil)
487+ let bG = if (containsElement(S, ab))
488+ then invoke(this, "stakeUnstake", [false, bW, ab], nil)
503489 else 0
504- if ((bK == bK))
505- then [IntegerEntry(f, (am - bZ)), IntegerEntry(g, (an - ca)), IntegerEntry(k, (ap - bc)), Burn(ao, bc), ScriptTransfer(aC.caller, bZ, ag), ScriptTransfer(aC.caller, ca, ah)]
490+ if ((bG == bG))
491+ then [IntegerEntry(f, (ai - bV)), IntegerEntry(g, (aj - bW)), IntegerEntry(k, (al - aY)), Burn(ak, aY), ScriptTransfer(ay.caller, bV, ac), ScriptTransfer(ay.caller, bW, ad)]
506492 else throw("Strict value is not equal to itself.")
507493 }
508494 else throw("Strict value is not equal to itself.")
509495 }
510496 })
511497
512498
513499
514-@Callable(aC)
515-func exchange (bd) = valueOrElse(bk(), {
516- let cb = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
517- let bc = cb._1
518- let bY = cb._2
519- if (if ((am == 0))
500+@Callable(ay)
501+func exchange (aZ) = valueOrElse(bg(), {
502+ let bX = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
503+ let aY = bX._1
504+ let bU = bX._2
505+ if (if ((ai == 0))
520506 then true
521- else (an == 0))
507+ else (aj == 0))
522508 then throw("Can't exchange with zero balance")
523- else if ((0 >= bd))
524- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bd)))
525- else if ((size(aC.payments) != 1))
509+ else if ((0 >= aZ))
510+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(aZ)))
511+ else if ((size(ay.payments) != 1))
526512 then throw("One attached payment expected")
527- else if (!(aL))
528- then ([ScriptTransfer(aC.caller, bc, bY)] ++ bj())
529- else if ((bY == ag))
513+ else if (!(aH))
514+ then ([ScriptTransfer(ay.caller, aY, bU)] ++ bf())
515+ else if ((bU == ac))
530516 then {
531- let cc = ah
532- let cd = bb(bc, bd, am, an)
533- let bg = cd._1
534- let bh = cd._2
535- let bi = cd._3
536- let ce = (am + bc)
537- let cf = ((an - bh) - bi)
538- let bJ = if (containsElement(U, ae))
539- then invoke(this, "stakeUnstake", [true, bc, ae], nil)
517+ let bY = ad
518+ let bZ = aX(aY, aZ, ai, aj)
519+ let bc = bZ._1
520+ let bd = bZ._2
521+ let be = bZ._3
522+ let ca = (ai + aY)
523+ let cb = ((aj - bd) - be)
524+ let bF = if (containsElement(S, aa))
525+ then invoke(this, "stakeUnstake", [true, aY, aa], nil)
540526 else 0
541- if ((bJ == bJ))
527+ if ((bF == bF))
542528 then {
543- let bK = if (containsElement(U, af))
544- then invoke(this, "stakeUnstake", [false, (bh + bi), af], nil)
529+ let bG = if (containsElement(S, ab))
530+ then invoke(this, "stakeUnstake", [false, (bd + be), ab], nil)
545531 else 0
546- if ((bK == bK))
547- then [IntegerEntry(f, ce), IntegerEntry(g, cf), ScriptTransfer(aC.caller, bh, cc), ScriptTransfer(O, bi, cc)]
532+ if ((bG == bG))
533+ then $Tuple2([IntegerEntry(f, ca), IntegerEntry(g, cb), ScriptTransfer(ay.caller, bd, bY), ScriptTransfer(N, be, bY)], $Tuple2(bd, bY))
548534 else throw("Strict value is not equal to itself.")
549535 }
550536 else throw("Strict value is not equal to itself.")
551537 }
552- else if ((bY == ah))
538+ else if ((bU == ad))
553539 then {
554- let cc = ag
555- let cg = bb(bc, bd, an, am)
556- let bg = cg._1
557- let bh = cg._2
558- let bi = cg._3
559- let ce = ((am - bh) - bi)
560- let cf = (an + bc)
561- let bJ = if (containsElement(U, ae))
562- then invoke(this, "stakeUnstake", [false, (bh + bi), ae], nil)
540+ let bY = ac
541+ let cc = aX(aY, aZ, aj, ai)
542+ let bc = cc._1
543+ let bd = cc._2
544+ let be = cc._3
545+ let ca = ((ai - bd) - be)
546+ let cb = (aj + aY)
547+ let bF = if (containsElement(S, aa))
548+ then invoke(this, "stakeUnstake", [false, (bd + be), aa], nil)
563549 else 0
564- if ((bJ == bJ))
550+ if ((bF == bF))
565551 then {
566- let bK = if (containsElement(U, af))
567- then invoke(this, "stakeUnstake", [true, bc, af], nil)
552+ let bG = if (containsElement(S, ab))
553+ then invoke(this, "stakeUnstake", [true, aY, ab], nil)
568554 else 0
569- if ((bK == bK))
570- then [IntegerEntry(f, ce), IntegerEntry(g, cf), ScriptTransfer(aC.caller, bh, cc), ScriptTransfer(O, bi, cc)]
555+ if ((bG == bG))
556+ then $Tuple2([IntegerEntry(f, ca), IntegerEntry(g, cb), ScriptTransfer(ay.caller, bd, bY), ScriptTransfer(N, be, bY)], $Tuple2(bd, bY))
571557 else throw("Strict value is not equal to itself.")
572558 }
573559 else throw("Strict value is not equal to itself.")
574560 }
575- else throw(((("Incorrect asset attached. Expected: " + ae) + " or ") + af))
561+ else throw(((("Incorrect asset attached. Expected: " + aa) + " or ") + ab))
576562 })
577563
578564
579565
580-@Callable(aC)
581-func shutdown () = if (!(ad))
582- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
583- else if (!(containsElement([J, K, L, M], aC.callerPublicKey)))
566+@Callable(ay)
567+func shutdown () = if (!(Z))
568+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
569+ else if (!(containsElement([J, K, L], ay.callerPublicKey)))
584570 then throw("Only admin can call this function")
585- else aR("Paused by admin")
571+ else aN("Paused by admin")
586572
587573
588574
589-@Callable(aC)
590-func activate () = if (ad)
575+@Callable(ay)
576+func activate () = if (Z)
591577 then throw("DApp is already active")
592- else if (!(containsElement([J, K, L, M], aC.callerPublicKey)))
578+ else if (!(containsElement([J, K, L], ay.callerPublicKey)))
593579 then throw("Only admin can call this function")
594- else [BooleanEntry(c, true), DeleteEntry(n)]
580+ else [BooleanEntry(c, true), DeleteEntry(m)]
595581
596582
597583
598-@Callable(aC)
599-func takeIntoAccountExtraFunds () = valueOrElse(bk(), {
600- let ch = (aJ - am)
601- let ci = (aK - an)
602- if ((aC.caller != O))
584+@Callable(ay)
585+func takeIntoAccountExtraFunds () = valueOrElse(bg(), {
586+ let cd = (aF - ai)
587+ let ce = (aG - aj)
588+ if ((ay.caller != N))
603589 then throw("Only the wallet can call this function")
604- else if (if ((0 > ch))
590+ else if (if ((0 > cd))
605591 then true
606- else (0 > ci))
607- then aR("Enroll amount negative")
608- else if (if ((ch == 0))
609- then (ci == 0)
592+ else (0 > ce))
593+ then aN("Enroll amount negative")
594+ else if (if ((cd == 0))
595+ then (ce == 0)
610596 else false)
611597 then throw("No money to take")
612598 else {
613- let bJ = if (containsElement(U, ae))
614- then invoke(this, "stakeUnstake", [true, ch, ae], nil)
599+ let bF = if (containsElement(S, aa))
600+ then invoke(this, "stakeUnstake", [true, cd, aa], nil)
615601 else 0
616- if ((bJ == bJ))
602+ if ((bF == bF))
617603 then {
618- let bK = if (containsElement(U, af))
619- then invoke(this, "stakeUnstake", [true, ci, af], nil)
604+ let bG = if (containsElement(S, ab))
605+ then invoke(this, "stakeUnstake", [true, ce, ab], nil)
620606 else 0
621- if ((bK == bK))
622- then [IntegerEntry(f, (am + ch)), IntegerEntry(g, (an + ci)), IntegerEntry(("last_income_" + ae), ch), IntegerEntry(("last_income_" + af), ci)]
607+ if ((bG == bG))
608+ then [IntegerEntry(f, (ai + cd)), IntegerEntry(g, (aj + ce)), IntegerEntry(("last_income_" + aa), cd), IntegerEntry(("last_income_" + ab), ce)]
623609 else throw("Strict value is not equal to itself.")
624610 }
625611 else throw("Strict value is not equal to itself.")
626612 }
627613 })
628614
629615
630616
631-@Callable(aC)
632-func stakeUnstake (aU,aW,cj) = if ((aC.caller != this))
617+@Callable(ay)
618+func stakeUnstake (aQ,aS,cf) = if ((ay.caller != this))
633619 then throw("Only contract itself can invoke this function")
634- else if ((cj == "WAVES"))
620+ else if ((cf == "WAVES"))
635621 then {
636- let ck = addressFromStringValue(valueOrErrorMessage(getString(D, x), "No leasing pool in oracle"))
637- let cl = getBinary(this, z)
638- let cm = valueOrElse(getInteger(this, y), 0)
639- let cn = if (aU)
640- then (cm + aW)
641- else (cm - aW)
642- let co = Lease(ck, cn)
643- let cp = calculateLeaseId(co)
644- let cq = [co, BinaryEntry(z, cp), IntegerEntry(y, cn)]
645- let G = cl
622+ let cg = addressFromStringValue(valueOrErrorMessage(getString(D, v), "No leasing pool in oracle"))
623+ let ch = getBinary(this, x)
624+ let ci = valueOrElse(getInteger(this, w), 0)
625+ let cj = if (aQ)
626+ then (ci + aS)
627+ else (ci - aS)
628+ let ck = Lease(cg, cj)
629+ let cl = calculateLeaseId(ck)
630+ let cm = [ck, BinaryEntry(x, cl), IntegerEntry(w, cj)]
631+ let G = ch
646632 if ($isInstanceOf(G, "ByteVector"))
647633 then {
648- let cr = G
649- ([LeaseCancel(cr)] ++ cq)
634+ let cn = G
635+ ([LeaseCancel(cn)] ++ cm)
650636 }
651- else cq
637+ else cm
652638 }
653639 else {
654- let cs = aV(aU, aW, fromBase58String(cj))
655- let aY = cs._1
656- let ct = cs._2
657- let cu = cs._3
658- let cv = cs._4
659- let cw = invoke(ct, aY, cu, cv)
660- if ((cw == cw))
640+ let co = aR(aQ, aS, fromBase58String(cf))
641+ let aU = co._1
642+ let cp = co._2
643+ let cq = co._3
644+ let cr = co._4
645+ let cs = invoke(cp, aU, cq, cr)
646+ if ((cs == cs))
661647 then nil
662648 else throw("Strict value is not equal to itself.")
663649 }
664650
665651
666652
667-@Callable(aC)
668-func stakeAll () = valueOrElse(bk(), if (!(containsElement([J, K, L, M], aC.callerPublicKey)))
653+@Callable(ay)
654+func stakeAll () = valueOrElse(bg(), if (!(containsElement([J, K, L], ay.callerPublicKey)))
669655 then throw("Only admin can call this function")
670656 else {
671- let bJ = if (containsElement(U, ae))
657+ let bF = if (containsElement(S, aa))
672658 then {
673- let cx = (am - aD)
674- if ((cx > 0))
675- then invoke(this, "stakeUnstake", [true, cx, ae], nil)
659+ let ct = (ai - az)
660+ if ((ct > 0))
661+ then invoke(this, "stakeUnstake", [true, ct, aa], nil)
676662 else 0
677663 }
678664 else 0
679- if ((bJ == bJ))
665+ if ((bF == bF))
680666 then {
681- let bK = if (containsElement(U, af))
667+ let bG = if (containsElement(S, ab))
682668 then {
683- let cy = (an - aE)
684- if ((cy > 0))
685- then invoke(this, "stakeUnstake", [true, cy, af], nil)
669+ let cu = (aj - aA)
670+ if ((cu > 0))
671+ then invoke(this, "stakeUnstake", [true, cu, ab], nil)
686672 else 0
687673 }
688674 else 0
689- if ((bK == bK))
675+ if ((bG == bG))
690676 then nil
691677 else throw("Strict value is not equal to itself.")
692678 }
693679 else throw("Strict value is not equal to itself.")
694680 })
695681
696682
697-@Verifier(cz)
698-func cA () = {
699- let cB = {
700- let cC = if (sigVerify(cz.bodyBytes, cz.proofs[0], J))
683+@Verifier(cv)
684+func cw () = {
685+ let cx = {
686+ let cy = if (sigVerify(cv.bodyBytes, cv.proofs[0], J))
701687 then 1
702688 else 0
703- let cD = if (sigVerify(cz.bodyBytes, cz.proofs[1], K))
689+ let cz = if (sigVerify(cv.bodyBytes, cv.proofs[1], K))
704690 then 1
705691 else 0
706- let cE = if (sigVerify(cz.bodyBytes, cz.proofs[2], L))
692+ let cA = if (sigVerify(cv.bodyBytes, cv.proofs[2], L))
707693 then 1
708694 else 0
709- (((cC + cD) + cE) >= 2)
695+ (((cy + cz) + cA) >= 2)
710696 }
711- let G = cz
697+ let G = cv
712698 if ($isInstanceOf(G, "InvokeScriptTransaction"))
713699 then {
714- let cw = G
715- let cF = if ((cw.dApp == this))
716- then (cw.function == "takeIntoAccountExtraFunds")
700+ let cs = G
701+ let cB = if ((cs.dApp == this))
702+ then (cs.function == "takeIntoAccountExtraFunds")
717703 else false
718- let cG = if (if (if ((cw.dApp == X))
719- then (cw.function == "exchange")
720- else false)
721- then (ag == Q)
704+ let cC = if (if (if (sigVerify(cv.bodyBytes, cv.proofs[0], J))
705+ then true
706+ else sigVerify(cv.bodyBytes, cv.proofs[0], K))
707+ then true
708+ else sigVerify(cv.bodyBytes, cv.proofs[0], L))
709+ then true
710+ else sigVerify(cv.bodyBytes, cv.proofs[0], M)
711+ if (if (cB)
712+ then cC
722713 else false)
723714 then true
724- else if (if ((ah == Q))
725- then (size(cw.payments) == 1)
726- else false)
727- then (cw.payments[0].assetId == Q)
728- else false
729- let cH = if (if (if ((cw.dApp == Y))
730- then (cw.function == "exchange")
731- else false)
732- then (ag == R)
733- else false)
734- then true
735- else if (if ((ah == R))
736- then (size(cw.payments) == 1)
737- else false)
738- then (cw.payments[0].assetId == Q)
739- else false
740- let cI = if (if (if (sigVerify(cz.bodyBytes, cz.proofs[0], J))
741- then true
742- else sigVerify(cz.bodyBytes, cz.proofs[0], K))
743- then true
744- else sigVerify(cz.bodyBytes, cz.proofs[0], L))
745- then true
746- else sigVerify(cz.bodyBytes, cz.proofs[0], N)
747- if (if (if (if (cF)
748- then true
749- else cG)
750- then true
751- else cH)
752- then cI
753- else false)
754- then true
755- else cB
715+ else cx
756716 }
757- else cB
717+ else cx
758718 }
759719

github/deemru/w8io/6500d08 
231.40 ms