2020.12.31 14:47 [2396615] smart account 3PK7Xe5BiedRyxHLuMQx5ey9riUQqvUths2 > SELF 0.00000000 Waves

{ "type": 13, "id": "5StfCta79YjcBkdq5D1ziJVXHuWjCVrnkDVrqQzbzAUV", "fee": 1400000, "feeAssetId": null, "timestamp": 1609414456088, "version": 2, "chainId": 87, "sender": "3PK7Xe5BiedRyxHLuMQx5ey9riUQqvUths2", "senderPublicKey": "7hEH4UN8YsnvBCS3YmjieqS332S69yTNjxNp83SmtDrQ", "proofs": [ "", "rQNWHe8Tt457Xxkdwf7Jv5oz3ZanHgNZTTgByvwpcBT9BLjGTpo13hC6UfB3oZPhC4cE1xbkGBycPko5MqsZzFr", "2juqEaGTjQgzQYbyW2x9gMdMoneUEKh1oSx9g4r9UQDKcQkpXwcnVMBkwSSkxwp8QS7NucPStM1yHFYjma3UGLkS" ], "script": "base64:AAIEAAAAAAAAABkIAhIAEgMKAQESABIDCgEBEgASABIDCgEBAAAAOQAAAAAHdmVyc2lvbgIAAAAFMS4wLjAAAAAACmtleVZlcnNpb24CAAAAB3ZlcnNpb24AAAAACWtleUFjdGl2ZQIAAAAGYWN0aXZlAAAAAAtrZXlBc3NldElkQQIAAAAKQV9hc3NldF9pZAAAAAALa2V5QXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAAC2tleUJhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAC2tleUJhbGFuY2VCAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAD2tleVNoYXJlQXNzZXRJZAIAAAAOc2hhcmVfYXNzZXRfaWQAAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAANa2V5Q29tbWlzc2lvbgIAAAAKY29tbWlzc2lvbgAAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAIa2V5Q2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAAxhZG1pblB1YktleTEBAAAAILoJ1zuJWaTRXaD/8bsz0KrhOWkPy+K9kdY77k9eqOATAAAAAAxhZG1pblB1YktleTIBAAAAIMKRRJmz0rC0DSKlkVi9iLyhN7sIy//djOaU71sWDn5AAAAAAAxhZG1pblB1YktleTMBAAAAII4eFy54sQc79EhOejMoYHYod/yZ5ZIwoyDCz6ir6Q5VAAAAABRhZG1pblB1YktleVN0YXJ0U3RvcAEAAAAgzlkO3OqzXqOuG/1XXufreRE1KXRGMps8FV88BRsoYXsAAAAAEmFkbWluUHViS2V5U3Rha2luZwEAAAAgsj2fHYY3mleF5iNR9OE3eyOPalgB3T7oDWjAjnR7WCgAAAAAEWdvdmVybmFuY2VBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXL+RfIKEOTQrQNLGvHqzZMvvNxH1THwzxAAAAABlzdGFraW5nQWRkcmVzc1VzZG5BbmROc2J0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFX5A6nNk+SC9eXz6QdPzUbz0Nq66o883GdAAAAABJzdGFraW5nQWRkcmVzc0RlRm8JAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeXDrAqzhWKwz4M71V5aJSROcWGLpQPkkoAAAAABFVTRE4BAAAAILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAAAAAAROU0JUAQAAACBV7sO+qgvwUOhxyBuqbnCepLHI/kouucHxzMVrD3iXSwAAAAAERVVSTgEAAAAguWeTRgNuJ8WFGxFz3a62S2OEsYukkwerCcPMhMCzLnUAAAAADXN0YWtpbmdBc3NldHMJAARMAAAAAgUAAAAEVVNETgkABEwAAAACBQAAAAROU0JUCQAETAAAAAIFAAAABEVVUk4FAAAAA25pbAAAAAAIaXNBY3RpdmUJAQAAABFAZXh0ck5hdGl2ZSgxMDUxKQAAAAIFAAAABHRoaXMFAAAACWtleUFjdGl2ZQAAAAALc3RyQXNzZXRJZEEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAAC2tleUFzc2V0SWRBAAAAAAtzdHJBc3NldElkQgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAALa2V5QXNzZXRJZEIAAAAACGFzc2V0SWRBAwkAAAAAAAACBQAAAAtzdHJBc3NldElkQQIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAALc3RyQXNzZXRJZEEAAAAACGFzc2V0SWRCAwkAAAAAAAACBQAAAAtzdHJBc3NldElkQgIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAALc3RyQXNzZXRJZEIAAAAACmFzc2V0TmFtZUEEAAAAByRtYXRjaDAFAAAACGFzc2V0SWRBAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAACaWQAAAAEbmFtZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFd2F2ZXMFAAAAByRtYXRjaDACAAAABVdBVkVTCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAAAAphc3NldE5hbWVCBAAAAAckbWF0Y2gwBQAAAAhhc3NldElkQgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAAmlkAAAABG5hbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwAgAAAAVXQVZFUwkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgAAAAAIYmFsYW5jZUEJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAC2tleUJhbGFuY2VBAAAAAAhiYWxhbmNlQgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAALa2V5QmFsYW5jZUIAAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAA9rZXlTaGFyZUFzc2V0SWQAAAAAEHNoYXJlQXNzZXRTdXBwbHkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkAAAAACmNvbW1pc3Npb24AAAAAAAAAC7gAAAAAFGNvbW1pc3Npb25Hb3Zlcm5hbmNlAAAAAAAAAASwAAAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIAAAAAAAAPQkAAAAAAC3NjYWxlVmFsdWUzAAAAAAAAAAPoAAAAAAtzY2FsZVZhbHVlOAAAAAAABfXhAAAAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIAAAAAAAAAA+gAAAAAEXNjYWxlVmFsdWU4RGlnaXRzAAAAAAAAAAAIAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAJAAPwAAAAAgUAAAAEdGhpcwUAAAACaWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAMc3Rha2VkQW1vdW50AAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAQAAAANc3Rha2luZ0Ftb3VudAMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAABFVTRE4JAARMAAAAAgUAAAAETlNCVAUAAAADbmlsBQAAAAJpZAkABBoAAAACBQAAABlzdGFraW5nQWRkcmVzc1VzZG5BbmROc2J0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxycGRfYmFsYW5jZV8JAAJYAAAAAQUAAAACaWQCAAAAAV8JAAQlAAAAAQUAAAAEdGhpcwkABBoAAAACBQAAABJzdGFraW5nQWRkcmVzc0RlRm8JAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGCVzJXMlc19fc3Rha2luZ0JhbGFuY2VfXwkAAlgAAAABBQAAAAJpZAIAAAACX18JAAQlAAAAAQUAAAAEdGhpcwQAAAAHJG1hdGNoMQUAAAANc3Rha2luZ0Ftb3VudAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAADSW50BAAAAAZzdGFrZWQFAAAAByRtYXRjaDEFAAAABnN0YWtlZAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAAEVW5pdAQAAAAHbm90aGluZwUAAAAHJG1hdGNoMQAAAAAAAAAAAAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgQAAAAFd2F2ZXMFAAAAByRtYXRjaDAEAAAACGJhbGFuY2VzCQAD7wAAAAEFAAAABHRoaXMJAABlAAAAAggFAAAACGJhbGFuY2VzAAAAB3JlZ3VsYXIIBQAAAAhiYWxhbmNlcwAAAAlhdmFpbGFibGUAAAAADXN0YWtlZEFtb3VudEEJAQAAAAxzdGFrZWRBbW91bnQAAAABBQAAAAhhc3NldElkQQAAAAANc3Rha2VkQW1vdW50QgkBAAAADHN0YWtlZEFtb3VudAAAAAEFAAAACGFzc2V0SWRCAAAAABFhdmFpbGFibGVCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANc3Rha2VkQW1vdW50QQAAAAARYXZhaWxhYmxlQmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADXN0YWtlZEFtb3VudEIAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEEFAAAADXN0YWtlZEFtb3VudEEAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEIFAAAADXN0YWtlZEFtb3VudEIAAAAAEGhhc0Vub3VnaEJhbGFuY2UDCQAAZwAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFAAAACGJhbGFuY2VBCQAAZwAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFAAAACGJhbGFuY2VCBwEAAAAMZ2V0QXNzZXRJbmZvAAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAQAAAAIc3RyaW5nSWQJAAJYAAAAAQUAAAACaWQEAAAABGluZm8JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAAJpZAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAAIc3RyaW5nSWQCAAAADiBkb2Vzbid0IGV4aXN0CQAFFQAAAAMFAAAACHN0cmluZ0lkCAUAAAAEaW5mbwAAAARuYW1lCAUAAAAEaW5mbwAAAAhkZWNpbWFscwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFd2F2ZXMFAAAAByRtYXRjaDAJAAUVAAAAAwIAAAAFV0FWRVMCAAAABVdBVkVTAAAAAAAAAAAICQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAdzdXNwZW5kAAAAAQAAAAVjYXVzZQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0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CQAEOAAAAAEFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAKa2V5VmVyc2lvbgUAAAAHdmVyc2lvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALa2V5QXNzZXRJZEIFAAAADnBtdFN0ckFzc2V0SWRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAAKcG10QW1vdW50QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtleUNvbW1pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyCQAETAAAAAIFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAPa2V5U2hhcmVBc3NldElkCQACWAAAAAEFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUlzc3VlSWQFAAAAA25pbAAAAAFpAQAAABZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAAAAQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG10QXNzZXRJZEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0SWRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAAskdDA4MTYyODM3MAkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAQAAAAKcG10QW1vdW50QQgFAAAACyR0MDgxNjI4MzcwAAAAAl8xBAAAAApwbXRBbW91bnRCCAUAAAALJHQwODE2MjgzNzAAAAACXzIEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAhiYWxhbmNlQQUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWUzCQAAawAAAAMFAAAACGJhbGFuY2VCBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QgQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAKcG10QW1vdW50QgUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAtzY2FsZVZhbHVlOAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAUgYW5kIAUAAAALc3RyQXNzZXRJZEIDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMJAAAAAAAAAgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAAAAAAAAAACQAAAgAA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ZXlCYWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAMYW1vdW50VG9QYXlCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZQAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlBBQAAAAhhc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QgUAAAAIYXNzZXRJZEIFAAAAA25pbAAAAAFpAQAAAAhleGNoYW5nZQAAAAEAAAASbWluQW1vdW50VG9SZWNlaXZlBAAAAA0kdDAxMjIwNDEyMjc5CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTIyMDQxMjI3OQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDEyMjA0MTIyNzkAAAACXzIKAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgAAAAl0b2tlbkZyb20AAAAHdG9rZW5UbwQAAAAQYW1vdW50V2l0aG91dEZlZQkAAGsAAAADBQAAAAd0b2tlblRvBQAAAAlwbXRBbW91bnQJAABkAAAAAgUAAAAJcG10QW1vdW50BQAAAAl0b2tlbkZyb20EAAAADWFtb3VudFdpdGhGZWUJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAABRjb21taXNzaW9uR292ZXJuYW5jZQUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAwkAAGYAAAACBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAADWFtb3VudFdpdGhGZWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdQ2FsY3VsYXRlZCBhbW91bnQgdG8gcmVjZWl2ZSAJAAGkAAAAAQUAAAANYW1vdW50V2l0aEZlZQIAAAAgIGlzIGxlc3MgdGhhbiBzcGVjaWZpZWQgbWluaW11bSAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAFFQAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkAAAIAAAABCQABLAAAAAICAAAANE1pbmltYWwgYW1vdW50IHRvIHJlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZS4gQWN0dWFsOiAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAAAdzdXNwZW5kAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAjU3VzcGljaW91cyBzdGF0ZS4gQWN0dWFsIGJhbGFuY2VzOiAJAAGkAAAAAQUAAAAIYmFsYW5jZUECAAAAASAFAAAACmFzc2V0TmFtZUECAAAAAiwgCQABpAAAAAEFAAAACGJhbGFuY2VCAgAAAAEgBQAAAAphc3NldE5hbWVCAgAAAAkuIFN0YXRlOiAJAAGkAAAAAQkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEECAAAAASAFAAAACmFzc2V0TmFtZUECAAAAAiwgCQABpAAAAAEJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRCAgAAAAEgBQAAAAphc3NldE5hbWVCAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRCBAAAAA0kdDAxMzcxNzEzODA4CQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VBBQAAAAhiYWxhbmNlQgQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDEzNzE3MTM4MDgAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxMzcxNzEzODA4AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTM3MTcxMzgwOAAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAQAAAALbmV3QmFsYW5jZUIJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VCBQAAAAphc3NldE5hbWVCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQgQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRBBAAAAA0kdDAxNDYzMTE0NzIyCQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDE0NjMxMTQ3MjIAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxNDYzMTE0NzIyAAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTQ2MzExNDcyMgAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAALbmV3QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBQAAAAphc3NldE5hbWVBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABCBvciAFAAAAC3N0ckFzc2V0SWRCAAAAAWkBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACGtleUNhdXNlAgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkBAAAAB3N1c3BlbmQAAAABAgAAAA9QYXVzZWQgYnkgYWRtaW4AAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAhrZXlDYXVzZQUAAAADbmlsAAAAAWkBAAAAGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMAAAABAAAAC2Ftb3VudExlYXZlBAAAABh1bmNvdW50YWJsZUFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEEAAAAGHVuY291bnRhYmxlQW1vdW50RW5yb2xsQgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAACBQAAABh1bmNvdW50YWJsZUFtb3VudEVucm9sbEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROBQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAABh1bmNvdW50YWJsZUFtb3VudEVucm9sbEIDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAARVU0ROBQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAAB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", "height": 2396615, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AeKVhv4br1DFkKC2jKELr8q2qc1fVobKfCv24Sp6Fw5C Next: AxJdnPHcmdxufdRSxzPvfBMtt1tKRpxLsiBpjEP3xMNg Diff:
OldNewDifferences
192192
193193
194194 @Callable(i)
195-func init (shareTokenName) = {
196- let $t060386115 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
197- let pmtAmountA = $t060386115._1
198- let pmtAssetIdA = $t060386115._2
199- let $t061206197 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
200- let pmtAmountB = $t061206197._1
201- let pmtAssetIdB = $t061206197._2
202- let $t062026279 = getAssetInfo(pmtAssetIdA)
203- let pmtStrAssetIdA = $t062026279._1
204- let pmtAssetNameA = $t062026279._2
205- let pmtDecimalsA = $t062026279._3
206- let $t062846361 = getAssetInfo(pmtAssetIdB)
207- let pmtStrAssetIdB = $t062846361._1
208- let pmtAssetNameB = $t062846361._2
209- let pmtDecimalsB = $t062846361._3
195+func init () = {
196+ let $t060166093 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
197+ let pmtAmountA = $t060166093._1
198+ let pmtAssetIdA = $t060166093._2
199+ let $t060986175 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
200+ let pmtAmountB = $t060986175._1
201+ let pmtAssetIdB = $t060986175._2
202+ let $t061806257 = getAssetInfo(pmtAssetIdA)
203+ let pmtStrAssetIdA = $t061806257._1
204+ let pmtAssetNameA = $t061806257._2
205+ let pmtDecimalsA = $t061806257._3
206+ let $t062626339 = getAssetInfo(pmtAssetIdB)
207+ let pmtStrAssetIdB = $t062626339._1
208+ let pmtAssetNameB = $t062626339._2
209+ let pmtDecimalsB = $t062626339._3
210210 if (isDefined(getBoolean(this, keyActive)))
211211 then throw("DApp is already active")
212212 else if ((pmtAssetIdA == pmtAssetIdB))
213213 then throw("Assets must be different")
214214 else {
215+ let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
215216 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
216217 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
217218 let shareInitialSupply = fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, HALFDOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, HALFDOWN), pow(10, 0, shareDecimals, 0, 0, HALFDOWN))
218- let shareIssue = Issue(shareTokenName, shareDescription, shareInitialSupply, shareDecimals, true)
219+ let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
219220 let shareIssueId = calculateAssetId(shareIssue)
220221 [StringEntry(keyVersion, version), BooleanEntry(keyActive, true), StringEntry(keyAssetIdA, pmtStrAssetIdA), StringEntry(keyAssetIdB, pmtStrAssetIdB), IntegerEntry(keyBalanceA, pmtAmountA), IntegerEntry(keyBalanceB, pmtAmountB), IntegerEntry(keyCommission, commission), IntegerEntry(keyCommissionScaleDelimiter, commissionScaleDelimiter), shareIssue, StringEntry(keyShareAssetId, toBase58String(shareIssueId)), IntegerEntry(keyShareAssetSupply, shareInitialSupply), ScriptTransfer(i.caller, shareInitialSupply, shareIssueId)]
221222 }
227228 func replenishWithTwoTokens (slippageTolerance) = {
228229 let pmtAssetIdA = i.payments[0].assetId
229230 let pmtAssetIdB = i.payments[1].assetId
230- let $t081078315 = deductStakingFee(i.payments[0].amount, i.payments[1].amount)
231- let pmtAmountA = $t081078315._1
232- let pmtAmountB = $t081078315._2
231+ let $t081628370 = deductStakingFee(i.payments[0].amount, i.payments[1].amount)
232+ let pmtAmountA = $t081628370._1
233+ let pmtAmountB = $t081628370._2
233234 let tokenRatio = fraction(fraction(balanceA, scaleValue8, pmtAmountA), scaleValue3, fraction(balanceB, scaleValue8, pmtAmountB))
234235 let ratioShareTokensInA = fraction(pmtAmountA, scaleValue8, balanceA)
235236 let ratioShareTokensInB = fraction(pmtAmountB, scaleValue8, balanceB)
261262
262263 @Callable(i)
263264 func withdraw () = {
264- let $t01057210722 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
265- let pmtAmount = $t01057210722._1
266- let pmtAssetId = $t01057210722._2
267- let $t01072710874 = deductStakingFee(fraction(pmtAmount, balanceA, shareAssetSupply), fraction(pmtAmount, balanceB, shareAssetSupply))
268- let amountToPayA = $t01072710874._1
269- let amountToPayB = $t01072710874._2
265+ let $t01062710777 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
266+ let pmtAmount = $t01062710777._1
267+ let pmtAssetId = $t01062710777._2
268+ let $t01078210929 = deductStakingFee(fraction(pmtAmount, balanceA, shareAssetSupply), fraction(pmtAmount, balanceB, shareAssetSupply))
269+ let amountToPayA = $t01078210929._1
270+ let amountToPayB = $t01078210929._2
270271 if (!(isActive))
271272 then throw("DApp is inactive at this moment")
272273 else if ((size(i.payments) != 1))
286287
287288 @Callable(i)
288289 func exchange (minAmountToReceive) = {
289- let $t01214912224 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
290- let pmtAmount = $t01214912224._1
291- let pmtAssetId = $t01214912224._2
290+ let $t01220412279 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
291+ let pmtAmount = $t01220412279._1
292+ let pmtAssetId = $t01220412279._2
292293 func calculateFees (tokenFrom,tokenTo) = {
293294 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
294295 let amountWithFee = fraction(amountWithoutFee, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
309310 else if ((pmtAssetId == assetIdA))
310311 then {
311312 let assetIdSend = assetIdB
312- let $t01366213753 = calculateFees(balanceA, balanceB)
313- let amountWithoutFee = $t01366213753._1
314- let amountWithFee = $t01366213753._2
315- let governanceReward = $t01366213753._3
313+ let $t01371713808 = calculateFees(balanceA, balanceB)
314+ let amountWithoutFee = $t01371713808._1
315+ let amountWithFee = $t01371713808._2
316+ let governanceReward = $t01371713808._3
316317 let newBalanceA = (balanceA + pmtAmount)
317318 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
318319 if (if ((stakedAmountA >= newBalanceA))
324325 else if ((pmtAssetId == assetIdB))
325326 then {
326327 let assetIdSend = assetIdA
327- let $t01457614667 = calculateFees(balanceB, balanceA)
328- let amountWithoutFee = $t01457614667._1
329- let amountWithFee = $t01457614667._2
330- let governanceReward = $t01457614667._3
328+ let $t01463114722 = calculateFees(balanceB, balanceA)
329+ let amountWithoutFee = $t01463114722._1
330+ let amountWithFee = $t01463114722._2
331+ let governanceReward = $t01463114722._3
331332 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
332333 let newBalanceB = (balanceB + pmtAmount)
333334 if (if ((stakedAmountA >= newBalanceA))
361362
362363 @Callable(i)
363364 func takeIntoAccountExtraFunds (amountLeave) = {
364- let uncountableAmountEnrollAssetA = (accountBalanceWithStakedA - balanceA)
365- let uncountableAmountEnrollAssetB = (accountBalanceWithStakedB - balanceB)
366- let amountEnrollA = (uncountableAmountEnrollAssetA - (if ((assetIdA == EURN))
365+ let uncountableAmountEnrollA = (accountBalanceWithStakedA - balanceA)
366+ let uncountableAmountEnrollB = (accountBalanceWithStakedB - balanceB)
367+ let amountEnrollA = (uncountableAmountEnrollA - (if ((assetIdA == USDN))
367368 then amountLeave
368369 else 0))
369- let amountEnrollB = (uncountableAmountEnrollAssetB - (if ((assetIdB == EURN))
370+ let amountEnrollB = (uncountableAmountEnrollB - (if ((assetIdB == USDN))
370371 then amountLeave
371372 else 0))
372373 if (!(isActive))
375376 then throw("Only the DApp itself can call this function")
376377 else if ((0 > amountLeave))
377378 then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(amountLeave)))
378- else if (if ((0 > uncountableAmountEnrollAssetA))
379+ else if (if ((0 > uncountableAmountEnrollA))
379380 then true
380- else (0 > uncountableAmountEnrollAssetB))
381+ else (0 > uncountableAmountEnrollB))
381382 then suspend("Enroll amount negative")
382383 else if (if ((0 > amountEnrollA))
383384 then true
384385 else (0 > amountEnrollB))
385386 then throw("Too large amountLeave")
386- else [IntegerEntry(keyBalanceA, (balanceA + amountEnrollA)), IntegerEntry(keyBalanceB, (balanceB + amountEnrollB))]
387+ else [IntegerEntry(keyBalanceA, (balanceA + amountEnrollA)), IntegerEntry(keyBalanceB, (balanceB + amountEnrollB)), IntegerEntry(("last_income_" + strAssetIdA), amountEnrollA), IntegerEntry(("last_income_" + strAssetIdB), amountEnrollB)]
387388 }
388389
389390
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = "1.0.0"
55
66 let keyVersion = "version"
77
88 let keyActive = "active"
99
1010 let keyAssetIdA = "A_asset_id"
1111
1212 let keyAssetIdB = "B_asset_id"
1313
1414 let keyBalanceA = "A_asset_balance"
1515
1616 let keyBalanceB = "B_asset_balance"
1717
1818 let keyShareAssetId = "share_asset_id"
1919
2020 let keyShareAssetSupply = "share_asset_supply"
2121
2222 let keyCommission = "commission"
2323
2424 let keyCommissionScaleDelimiter = "commission_scale_delimiter"
2525
2626 let keyCause = "shutdown_cause"
2727
2828 let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
2929
3030 let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
3131
3232 let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
3333
3434 let adminPubKeyStartStop = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
3535
3636 let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
3737
3838 let governanceAddress = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
3939
4040 let stakingAddressUsdnAndNsbt = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
4141
4242 let stakingAddressDeFo = Address(base58'3PFhcMmEZoQTQ6ohA844c7C9M8ZJ18P8dDj')
4343
4444 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
4545
4646 let NSBT = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
4747
4848 let EURN = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
4949
5050 let stakingAssets = [USDN, NSBT, EURN]
5151
5252 let isActive = getBooleanValue(this, keyActive)
5353
5454 let strAssetIdA = getStringValue(this, keyAssetIdA)
5555
5656 let strAssetIdB = getStringValue(this, keyAssetIdB)
5757
5858 let assetIdA = if ((strAssetIdA == "WAVES"))
5959 then unit
6060 else fromBase58String(strAssetIdA)
6161
6262 let assetIdB = if ((strAssetIdB == "WAVES"))
6363 then unit
6464 else fromBase58String(strAssetIdB)
6565
6666 let assetNameA = match assetIdA {
6767 case id: ByteVector =>
6868 value(assetInfo(id)).name
6969 case waves: Unit =>
7070 "WAVES"
7171 case _ =>
7272 throw("Match error")
7373 }
7474
7575 let assetNameB = match assetIdB {
7676 case id: ByteVector =>
7777 value(assetInfo(id)).name
7878 case waves: Unit =>
7979 "WAVES"
8080 case _ =>
8181 throw("Match error")
8282 }
8383
8484 let balanceA = getIntegerValue(this, keyBalanceA)
8585
8686 let balanceB = getIntegerValue(this, keyBalanceB)
8787
8888 let shareAssetId = fromBase58String(getStringValue(this, keyShareAssetId))
8989
9090 let shareAssetSupply = getIntegerValue(this, keyShareAssetSupply)
9191
9292 let commission = 3000
9393
9494 let commissionGovernance = 1200
9595
9696 let commissionScaleDelimiter = 1000000
9797
9898 let scaleValue3 = 1000
9999
100100 let scaleValue8 = 100000000
101101
102102 let slippageToleranceDelimiter = 1000
103103
104104 let scaleValue8Digits = 8
105105
106106 func accountBalance (assetId) = match assetId {
107107 case id: ByteVector =>
108108 assetBalance(this, id)
109109 case waves: Unit =>
110110 wavesBalance(this).available
111111 case _ =>
112112 throw("Match error")
113113 }
114114
115115
116116 func stakedAmount (assetId) = match assetId {
117117 case id: ByteVector =>
118118 let stakingAmount = if (containsElement([USDN, NSBT], id))
119119 then getInteger(stakingAddressUsdnAndNsbt, ((("rpd_balance_" + toBase58String(id)) + "_") + toString(this)))
120120 else getInteger(stakingAddressDeFo, ((("%s%s%s__stakingBalance__" + toBase58String(id)) + "__") + toString(this)))
121121 match stakingAmount {
122122 case staked: Int =>
123123 staked
124124 case nothing: Unit =>
125125 0
126126 case _ =>
127127 throw("Match error")
128128 }
129129 case waves =>
130130 let balances = wavesBalance(this)
131131 (balances.regular - balances.available)
132132 }
133133
134134
135135 let stakedAmountA = stakedAmount(assetIdA)
136136
137137 let stakedAmountB = stakedAmount(assetIdB)
138138
139139 let availableBalanceA = (balanceA - stakedAmountA)
140140
141141 let availableBalanceB = (balanceB - stakedAmountB)
142142
143143 let accountBalanceWithStakedA = (accountBalance(assetIdA) + stakedAmountA)
144144
145145 let accountBalanceWithStakedB = (accountBalance(assetIdB) + stakedAmountB)
146146
147147 let hasEnoughBalance = if ((accountBalanceWithStakedA >= balanceA))
148148 then (accountBalanceWithStakedB >= balanceB)
149149 else false
150150
151151 func getAssetInfo (assetId) = match assetId {
152152 case id: ByteVector =>
153153 let stringId = toBase58String(id)
154154 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
155155 $Tuple3(stringId, info.name, info.decimals)
156156 case waves: Unit =>
157157 $Tuple3("WAVES", "WAVES", 8)
158158 case _ =>
159159 throw("Match error")
160160 }
161161
162162
163163 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
164164
165165
166166 func stakingFee (assetId) = (9 * value(value(assetInfo(assetId)).minSponsoredFee))
167167
168168
169169 func deductStakingFee (amtA,amtB) = if (containsElement(stakingAssets, assetIdB))
170170 then {
171171 let deduct = stakingFee(value(assetIdB))
172172 let resB = (amtB - deduct)
173173 if ((0 >= resB))
174174 then throw(((((("Insufficient amount " + toString(amtB)) + " ") + assetNameB) + " to deduct staking fee ") + toString(deduct)))
175175 else $Tuple2(amtA, resB)
176176 }
177177 else if (containsElement(stakingAssets, assetIdA))
178178 then {
179179 let deduct = stakingFee(value(assetIdA))
180180 let resA = (amtA - deduct)
181181 if ((0 >= resA))
182182 then throw(((((("Insufficient amount " + toString(amtA)) + " ") + assetNameA) + " to deduct staking fee ") + toString(deduct)))
183183 else $Tuple2(resA, amtB)
184184 }
185185 else $Tuple2(amtA, amtB)
186186
187187
188188 func throwInsufficientAvailableBalance (amount,available,assetName) = throw((((((((("Insufficient DApp balance to pay " + toString(amount)) + " ") + assetName) + " due to staking. Available: ") + toString(available)) + " ") + assetName) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
189189
190190
191191 func throwInsufficientAvailableBalances (amountA,amountB) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(amountA)) + " ") + assetNameA) + " and ") + toString(amountB)) + " ") + assetNameB) + " due to staking. Available: ") + toString(availableBalanceA)) + " ") + assetNameA) + " and ") + toString(availableBalanceB)) + " ") + assetNameB) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
192192
193193
194194 @Callable(i)
195-func init (shareTokenName) = {
196- let $t060386115 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
197- let pmtAmountA = $t060386115._1
198- let pmtAssetIdA = $t060386115._2
199- let $t061206197 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
200- let pmtAmountB = $t061206197._1
201- let pmtAssetIdB = $t061206197._2
202- let $t062026279 = getAssetInfo(pmtAssetIdA)
203- let pmtStrAssetIdA = $t062026279._1
204- let pmtAssetNameA = $t062026279._2
205- let pmtDecimalsA = $t062026279._3
206- let $t062846361 = getAssetInfo(pmtAssetIdB)
207- let pmtStrAssetIdB = $t062846361._1
208- let pmtAssetNameB = $t062846361._2
209- let pmtDecimalsB = $t062846361._3
195+func init () = {
196+ let $t060166093 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
197+ let pmtAmountA = $t060166093._1
198+ let pmtAssetIdA = $t060166093._2
199+ let $t060986175 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
200+ let pmtAmountB = $t060986175._1
201+ let pmtAssetIdB = $t060986175._2
202+ let $t061806257 = getAssetInfo(pmtAssetIdA)
203+ let pmtStrAssetIdA = $t061806257._1
204+ let pmtAssetNameA = $t061806257._2
205+ let pmtDecimalsA = $t061806257._3
206+ let $t062626339 = getAssetInfo(pmtAssetIdB)
207+ let pmtStrAssetIdB = $t062626339._1
208+ let pmtAssetNameB = $t062626339._2
209+ let pmtDecimalsB = $t062626339._3
210210 if (isDefined(getBoolean(this, keyActive)))
211211 then throw("DApp is already active")
212212 else if ((pmtAssetIdA == pmtAssetIdB))
213213 then throw("Assets must be different")
214214 else {
215+ let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
215216 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
216217 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
217218 let shareInitialSupply = fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, HALFDOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, HALFDOWN), pow(10, 0, shareDecimals, 0, 0, HALFDOWN))
218- let shareIssue = Issue(shareTokenName, shareDescription, shareInitialSupply, shareDecimals, true)
219+ let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
219220 let shareIssueId = calculateAssetId(shareIssue)
220221 [StringEntry(keyVersion, version), BooleanEntry(keyActive, true), StringEntry(keyAssetIdA, pmtStrAssetIdA), StringEntry(keyAssetIdB, pmtStrAssetIdB), IntegerEntry(keyBalanceA, pmtAmountA), IntegerEntry(keyBalanceB, pmtAmountB), IntegerEntry(keyCommission, commission), IntegerEntry(keyCommissionScaleDelimiter, commissionScaleDelimiter), shareIssue, StringEntry(keyShareAssetId, toBase58String(shareIssueId)), IntegerEntry(keyShareAssetSupply, shareInitialSupply), ScriptTransfer(i.caller, shareInitialSupply, shareIssueId)]
221222 }
222223 }
223224
224225
225226
226227 @Callable(i)
227228 func replenishWithTwoTokens (slippageTolerance) = {
228229 let pmtAssetIdA = i.payments[0].assetId
229230 let pmtAssetIdB = i.payments[1].assetId
230- let $t081078315 = deductStakingFee(i.payments[0].amount, i.payments[1].amount)
231- let pmtAmountA = $t081078315._1
232- let pmtAmountB = $t081078315._2
231+ let $t081628370 = deductStakingFee(i.payments[0].amount, i.payments[1].amount)
232+ let pmtAmountA = $t081628370._1
233+ let pmtAmountB = $t081628370._2
233234 let tokenRatio = fraction(fraction(balanceA, scaleValue8, pmtAmountA), scaleValue3, fraction(balanceB, scaleValue8, pmtAmountB))
234235 let ratioShareTokensInA = fraction(pmtAmountA, scaleValue8, balanceA)
235236 let ratioShareTokensInB = fraction(pmtAmountB, scaleValue8, balanceB)
236237 let shareTokenToPayAmount = fraction(min([ratioShareTokensInA, ratioShareTokensInB]), shareAssetSupply, scaleValue8)
237238 if (!(isActive))
238239 then throw("DApp is inactive at this moment")
239240 else if (if ((0 > slippageTolerance))
240241 then true
241242 else (slippageTolerance > slippageToleranceDelimiter))
242243 then throw(((("Slippage tolerance must be between 0 and " + toString(slippageToleranceDelimiter)) + " inclusively. Actual: ") + toString(slippageTolerance)))
243244 else if ((size(i.payments) != 2))
244245 then throw("Two attached assets expected")
245246 else if (if ((pmtAssetIdA != assetIdA))
246247 then true
247248 else (pmtAssetIdB != assetIdB))
248249 then throw(((("Incorrect assets attached. Expected: " + strAssetIdA) + " and ") + strAssetIdB))
249250 else if (if ((((scaleValue3 * (slippageToleranceDelimiter - slippageTolerance)) / slippageToleranceDelimiter) > tokenRatio))
250251 then true
251252 else (tokenRatio > ((scaleValue3 * (slippageToleranceDelimiter + slippageTolerance)) / slippageToleranceDelimiter)))
252253 then throw("Incorrect assets amount: amounts must have the contract ratio")
253254 else if ((shareTokenToPayAmount == 0))
254255 then throw("Too small amount to replenish")
255256 else if (!(hasEnoughBalance))
256257 then ([ScriptTransfer(i.caller, pmtAmountA, pmtAssetIdA), ScriptTransfer(i.caller, pmtAmountB, pmtAssetIdB)] ++ suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(balanceA)) + " ") + assetNameA) + ", ") + toString(balanceB)) + " ") + assetNameB) + ". State: ") + toString(accountBalance(assetIdA))) + " ") + assetNameA) + ", ") + toString(accountBalance(assetIdB))) + " ") + assetNameB)))
257258 else [IntegerEntry(keyBalanceA, (balanceA + pmtAmountA)), IntegerEntry(keyBalanceB, (balanceB + pmtAmountB)), IntegerEntry(keyShareAssetSupply, (shareAssetSupply + shareTokenToPayAmount)), Reissue(shareAssetId, shareTokenToPayAmount, true), ScriptTransfer(i.caller, shareTokenToPayAmount, shareAssetId)]
258259 }
259260
260261
261262
262263 @Callable(i)
263264 func withdraw () = {
264- let $t01057210722 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
265- let pmtAmount = $t01057210722._1
266- let pmtAssetId = $t01057210722._2
267- let $t01072710874 = deductStakingFee(fraction(pmtAmount, balanceA, shareAssetSupply), fraction(pmtAmount, balanceB, shareAssetSupply))
268- let amountToPayA = $t01072710874._1
269- let amountToPayB = $t01072710874._2
265+ let $t01062710777 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
266+ let pmtAmount = $t01062710777._1
267+ let pmtAssetId = $t01062710777._2
268+ let $t01078210929 = deductStakingFee(fraction(pmtAmount, balanceA, shareAssetSupply), fraction(pmtAmount, balanceB, shareAssetSupply))
269+ let amountToPayA = $t01078210929._1
270+ let amountToPayB = $t01078210929._2
270271 if (!(isActive))
271272 then throw("DApp is inactive at this moment")
272273 else if ((size(i.payments) != 1))
273274 then throw("One attached payment expected")
274275 else if ((pmtAssetId != shareAssetId))
275276 then throw(("Incorrect asset attached. Expected: " + toBase58String(shareAssetId)))
276277 else if (!(hasEnoughBalance))
277278 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(balanceA)) + " ") + assetNameA) + ", ") + toString(balanceB)) + " ") + assetNameB) + ". State: ") + toString(accountBalance(assetIdA))) + " ") + assetNameA) + ", ") + toString(accountBalance(assetIdB))) + " ") + assetNameB)))
278279 else if (if ((amountToPayA > availableBalanceA))
279280 then true
280281 else (amountToPayB > availableBalanceB))
281282 then throwInsufficientAvailableBalances(amountToPayA, amountToPayB)
282283 else [IntegerEntry(keyBalanceA, (balanceA - amountToPayA)), IntegerEntry(keyBalanceB, (balanceB - amountToPayB)), IntegerEntry(keyShareAssetSupply, (shareAssetSupply - pmtAmount)), Burn(shareAssetId, pmtAmount), ScriptTransfer(i.caller, amountToPayA, assetIdA), ScriptTransfer(i.caller, amountToPayB, assetIdB)]
283284 }
284285
285286
286287
287288 @Callable(i)
288289 func exchange (minAmountToReceive) = {
289- let $t01214912224 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
290- let pmtAmount = $t01214912224._1
291- let pmtAssetId = $t01214912224._2
290+ let $t01220412279 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
291+ let pmtAmount = $t01220412279._1
292+ let pmtAssetId = $t01220412279._2
292293 func calculateFees (tokenFrom,tokenTo) = {
293294 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
294295 let amountWithFee = fraction(amountWithoutFee, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
295296 let governanceReward = fraction(amountWithoutFee, commissionGovernance, commissionScaleDelimiter)
296297 if ((minAmountToReceive > amountWithFee))
297298 then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive)))
298299 else $Tuple3(amountWithoutFee, amountWithFee, governanceReward)
299300 }
300301
301302 if (!(isActive))
302303 then throw("DApp is inactive at this moment")
303304 else if ((0 >= minAmountToReceive))
304305 then throw(("Minimal amount to receive must be positive. Actual: " + toString(minAmountToReceive)))
305306 else if ((size(i.payments) != 1))
306307 then throw("One attached payment expected")
307308 else if (!(hasEnoughBalance))
308309 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(balanceA)) + " ") + assetNameA) + ", ") + toString(balanceB)) + " ") + assetNameB) + ". State: ") + toString(accountBalance(assetIdA))) + " ") + assetNameA) + ", ") + toString(accountBalance(assetIdB))) + " ") + assetNameB)))
309310 else if ((pmtAssetId == assetIdA))
310311 then {
311312 let assetIdSend = assetIdB
312- let $t01366213753 = calculateFees(balanceA, balanceB)
313- let amountWithoutFee = $t01366213753._1
314- let amountWithFee = $t01366213753._2
315- let governanceReward = $t01366213753._3
313+ let $t01371713808 = calculateFees(balanceA, balanceB)
314+ let amountWithoutFee = $t01371713808._1
315+ let amountWithFee = $t01371713808._2
316+ let governanceReward = $t01371713808._3
316317 let newBalanceA = (balanceA + pmtAmount)
317318 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
318319 if (if ((stakedAmountA >= newBalanceA))
319320 then true
320321 else (stakedAmountB >= newBalanceB))
321322 then throwInsufficientAvailableBalance(amountWithFee, availableBalanceB, assetNameB)
322323 else [IntegerEntry(keyBalanceA, newBalanceA), IntegerEntry(keyBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(governanceAddress, governanceReward, assetIdSend)]
323324 }
324325 else if ((pmtAssetId == assetIdB))
325326 then {
326327 let assetIdSend = assetIdA
327- let $t01457614667 = calculateFees(balanceB, balanceA)
328- let amountWithoutFee = $t01457614667._1
329- let amountWithFee = $t01457614667._2
330- let governanceReward = $t01457614667._3
328+ let $t01463114722 = calculateFees(balanceB, balanceA)
329+ let amountWithoutFee = $t01463114722._1
330+ let amountWithFee = $t01463114722._2
331+ let governanceReward = $t01463114722._3
331332 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
332333 let newBalanceB = (balanceB + pmtAmount)
333334 if (if ((stakedAmountA >= newBalanceA))
334335 then true
335336 else (stakedAmountB >= newBalanceB))
336337 then throwInsufficientAvailableBalance(amountWithFee, availableBalanceA, assetNameA)
337338 else [IntegerEntry(keyBalanceA, newBalanceA), IntegerEntry(keyBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(governanceAddress, governanceReward, assetIdSend)]
338339 }
339340 else throw(((("Incorrect asset attached. Expected: " + strAssetIdA) + " or ") + strAssetIdB))
340341 }
341342
342343
343344
344345 @Callable(i)
345346 func shutdown () = if (!(isActive))
346347 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
347348 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
348349 then throw("Only admin can call this function")
349350 else suspend("Paused by admin")
350351
351352
352353
353354 @Callable(i)
354355 func activate () = if (isActive)
355356 then throw("DApp is already active")
356357 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
357358 then throw("Only admin can call this function")
358359 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
359360
360361
361362
362363 @Callable(i)
363364 func takeIntoAccountExtraFunds (amountLeave) = {
364- let uncountableAmountEnrollAssetA = (accountBalanceWithStakedA - balanceA)
365- let uncountableAmountEnrollAssetB = (accountBalanceWithStakedB - balanceB)
366- let amountEnrollA = (uncountableAmountEnrollAssetA - (if ((assetIdA == EURN))
365+ let uncountableAmountEnrollA = (accountBalanceWithStakedA - balanceA)
366+ let uncountableAmountEnrollB = (accountBalanceWithStakedB - balanceB)
367+ let amountEnrollA = (uncountableAmountEnrollA - (if ((assetIdA == USDN))
367368 then amountLeave
368369 else 0))
369- let amountEnrollB = (uncountableAmountEnrollAssetB - (if ((assetIdB == EURN))
370+ let amountEnrollB = (uncountableAmountEnrollB - (if ((assetIdB == USDN))
370371 then amountLeave
371372 else 0))
372373 if (!(isActive))
373374 then throw("DApp is inactive at this moment")
374375 else if ((i.caller != this))
375376 then throw("Only the DApp itself can call this function")
376377 else if ((0 > amountLeave))
377378 then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(amountLeave)))
378- else if (if ((0 > uncountableAmountEnrollAssetA))
379+ else if (if ((0 > uncountableAmountEnrollA))
379380 then true
380- else (0 > uncountableAmountEnrollAssetB))
381+ else (0 > uncountableAmountEnrollB))
381382 then suspend("Enroll amount negative")
382383 else if (if ((0 > amountEnrollA))
383384 then true
384385 else (0 > amountEnrollB))
385386 then throw("Too large amountLeave")
386- else [IntegerEntry(keyBalanceA, (balanceA + amountEnrollA)), IntegerEntry(keyBalanceB, (balanceB + amountEnrollB))]
387+ else [IntegerEntry(keyBalanceA, (balanceA + amountEnrollA)), IntegerEntry(keyBalanceB, (balanceB + amountEnrollB)), IntegerEntry(("last_income_" + strAssetIdA), amountEnrollA), IntegerEntry(("last_income_" + strAssetIdB), amountEnrollB)]
387388 }
388389
389390
390391 @Verifier(tx)
391392 func verify () = match tx {
392393 case invoke: InvokeScriptTransaction =>
393394 let callTakeIntoAccount = if ((invoke.dApp == this))
394395 then (invoke.function == "takeIntoAccountExtraFunds")
395396 else false
396397 let callStakingUsdnOrNsbt = if ((invoke.dApp == stakingAddressUsdnAndNsbt))
397398 then if (if (containsElement(["lockNeutrino", "lockNsbt"], invoke.function))
398399 then (size(invoke.payments) == 1)
399400 else false)
400401 then true
401402 else if (containsElement(["unlockNeutrino", "unlockNsbt"], invoke.function))
402403 then (size(invoke.payments) == 0)
403404 else false
404405 else false
405406 let callStakingDeFo = if ((invoke.dApp == stakingAddressDeFo))
406407 then if (if ((invoke.function == "startStaking"))
407408 then (size(invoke.payments) == 1)
408409 else false)
409410 then true
410411 else if ((invoke.function == "stopStaking"))
411412 then (size(invoke.payments) == 0)
412413 else false
413414 else false
414415 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
415416 then true
416417 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
417418 then true
418419 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
419420 then true
420421 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
421422 if (if (if (callTakeIntoAccount)
422423 then true
423424 else callStakingUsdnOrNsbt)
424425 then true
425426 else callStakingDeFo)
426427 then signedByAdmin
427428 else false
428429 case _ =>
429430 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
430431 then 1
431432 else 0
432433 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
433434 then 1
434435 else 0
435436 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
436437 then 1
437438 else 0
438439 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
439440 }
440441

github/deemru/w8io/786bc32 
100.39 ms