2022.06.02 16:26 [3144296] smart account 3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ > SELF 0.00000000 Waves

{ "type": 13, "id": "24HgyqEXAAD23ank1mHmiNuhMo5757pWxtAG7yX38iZg", "fee": 1400000, "feeAssetId": null, "timestamp": 1654171531005, "version": 2, "chainId": 87, "sender": "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ", "senderPublicKey": "4DPL6q4zXX76yLqAjsQwFsruX4hUF8eKzqRdTkfprQgu", "proofs": [ "", "3hAt2yZTByqNUpCk29VEQaGYtSLXP53XxWjBRHnCrBxpPhxwCEjEySHSCo8VTxeAPYT1YSctVb6fEZoYhuLWRa36", "3b7WU2k3YWbJHuhzeHTjrU96coj1nESYzep49n7Jow6MLzbao79gURQqTac6LVCefDePdR42CL5KUsGJkXRep3qw" ], "script": "base64:AAIFAAAAAAAAADAIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgASBQoDBAEIEgAAAABaAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAIa1ZlcnNpb24CAAAAB3ZlcnNpb24AAAAAB2tBY3RpdmUCAAAABmFjdGl2ZQAAAAAJa0Fzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAlrQXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAACWtCYWxhbmNlQQIAAAAPQV9hc3NldF9iYWxhbmNlAAAAAAlrQmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAANa0JhbGFuY2VJbml0QQIAAAAMQV9hc3NldF9pbml0AAAAAA1rQmFsYW5jZUluaXRCAgAAAAxCX2Fzc2V0X2luaXQAAAAADWtTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABFrU2hhcmVBc3NldFN1cHBseQIAAAASc2hhcmVfYXNzZXRfc3VwcGx5AAAAAARrRmVlAgAAAApjb21taXNzaW9uAAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAA1rRmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAALa1NoYXJlTGltaXQCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAC2tCYXNlUGVyaW9kAgAAAAtiYXNlX3BlcmlvZAAAAAANa1BlcmlvZExlbmd0aAIAAAANcGVyaW9kX2xlbmd0aAAAAAAMa1N0YXJ0SGVpZ2h0AgAAAAxzdGFydF9oZWlnaHQAAAAADGtVU0ROQWRkcmVzcwIAAAAYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAAAAAxrRVVSTkFkZHJlc3MCAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAAxrTGVhc2luZ1Bvb2wCAAAAD2xlYXNpbmdfYWRkcmVzcwAAAAAOa0xlYXNpbmdBbW91bnQCAAAADmxlYXNpbmdfYW1vdW50AAAAAAprTGVhc2luZ0lkAgAAAApsZWFzaW5nX2lkAAAAAAprRGlzY291bnRzAgAAAAlkaXNjb3VudHMAAAAAD2tEaXNjb3VudFZhbHVlcwIAAAAPZGlzY291bnRfdmFsdWVzAAAAAA5rVXNlclN3b3BJbkdvdgIAAAAMX1NXT1BfYW1vdW50AAAAAA1rQWRtaW5QdWJLZXkxAgAAAAthZG1pbl9wdWJfMQAAAAANa0FkbWluUHViS2V5MgIAAAALYWRtaW5fcHViXzIAAAAADWtBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAABJrQWRtaW5JbnZva2VQdWJLZXkCAAAAEGFkbWluX2ludm9rZV9wdWIAAAAAEGtNb25leUJveEFkZHJlc3MCAAAAEW1vbmV5X2JveF9hZGRyZXNzAAAAAAtrR292QWRkcmVzcwIAAAASZ292ZXJuYW5jZV9hZGRyZXNzAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAZvcmFjbGUFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZzdHJpbmcFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAAGc3RyaW5nBAAAAAdub3RoaW5nBQAAAAckbWF0Y2gwCQAAAgAAAAEJAAEsAAAAAgUAAAADa2V5AgAAAAhpcyBlbXB0eQAAAAAMYWRtaW5QdWJLZXkxCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADWtBZG1pblB1YktleTEAAAAADGFkbWluUHViS2V5MgkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAA1rQWRtaW5QdWJLZXkyAAAAAAxhZG1pblB1YktleTMJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAANa0FkbWluUHViS2V5MwAAAAARYWRtaW5JbnZva2VQdWJLZXkJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAASa0FkbWluSW52b2tlUHViS2V5AAAAAA9tb25leUJveEFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkB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YWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANc3Rha2VkQW1vdW50QgAAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQkAAGQAAAACCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQQUAAAANc3Rha2VkQW1vdW50QQAAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgkAAGQAAAACCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgUAAAANc3Rha2VkQW1vdW50QgAAAAAQaGFzRW5vdWdoQmFsYW5jZQMJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIHAQAAAAxnZXRBc3NldEluZm8AAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwBAAAAAhzdHJpbmdJZAkAAlgAAAABBQAAAAJpZAQAAAAEaW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAAAmlkCQABLAAAAAIJAAEsAAAAAgIAAAAGQXNzZXQgBQAAAAhzdHJpbmdJZAIAAAAOIGRvZXNuJ3QgZXhpc3QJAAUVAAAAAwUAAAAIc3RyaW5nSWQIBQAAAARpbmZvAAAABG5hbWUIBQAAAARpbmZvAAAACGRlY2ltYWxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAkABRUAAAADAgAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAAAAAAAgJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABAAAACGFzc2V0U3RyAwkAAAAAAAACBQAAAAhhc3NldFN0cgIAAAAFV0FWRVMJAAUVAAAAAwIAAAAFV0FWRVMCAAAABVdBVkVTAAAAAAAAAAAIBAAAAAhzdHJpbmdJZAUAAAAIYXNzZXRTdHIEAAAAAmlkCQACWQAAAAEFAAAACGFzc2V0U3RyBAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACaWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAACHN0cmluZ0lkAgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAhzdHJpbmdJZAgFAAAABGluZm8AAAAEbmFtZQgFAAAABGluZm8AAAAIZGVjaW1hbHMBAAAAB3N1c3BlbmQAAAABAAAABWNhdXNlCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAdrQWN0aXZlBwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAZrQ2F1c2UFAAAABWNhdXNlBQAAAANuaWwBAAAAGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwAAAAIAAAAFc3Rha2UAAAAHYXNzZXRJZAMFAAAABXN0YWtlAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAARVU0ROCQAFFAAAAAICAAAADGxvY2tOZXV0cmlubwUAAAASc3Rha2luZ1VTRE5BZGRyZXNzCQAFFAAAAAICAAAADHN0YXJ0U3Rha2luZwUAAAASc3Rha2luZ0VVUk5BZGRyZXNzAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAARVU0ROCQAFFAAAAAICAAAADnVubG9ja05ldXRyaW5vBQAAABJzdGFraW5nVVNETkFkZHJlc3MJAAUUAAAAAgIAAAALc3RvcFN0YWtpbmcFAAAAEnN0YWtpbmdFVVJOQWRkcmVzcwEAAAARY2FsY1N0YWtpbmdQYXJhbXMAAAADAAAABXN0YWtlAAAABmFtb3VudAAAAAdhc3NldElkAwUAAAAFc3Rha2UEAAAACyR0MDYyOTA2MzU2CQEAAAAYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAAAAAgUAAAAFc3Rha2UFAAAAB2Fzc2V0SWQEAAAABGNhbGwIBQAAAAskdDA2MjkwNjM1NgAAAAJfMQQAAAALc3Rha2luZ0FkZHIIBQAAAAskdDA2MjkwNjM1NgAAAAJfMgkABRYAAAAEBQAAAARjYWxsBQAAAAtzdGFr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Y3VsYXRlRmVlcwAAAAUAAAAJcG10QW1vdW50AAAAEm1pbkFtb3VudFRvUmVjZWl2ZQAAAAl0b2tlbkZyb20AAAAHdG9rZW5UbwAAAAZjYWxsZXIEAAAAEGFtb3VudFdpdGhvdXRGZWUJAABrAAAAAwUAAAAHdG9rZW5UbwUAAAAJcG10QW1vdW50CQAAZAAAAAIFAAAACXBtdEFtb3VudAUAAAAJdG9rZW5Gcm9tBAAAAAtmZWVEaXNjb3VudAkBAAAAFGNhbGN1bGF0ZUZlZURpc2NvdW50AAAAAQUAAAAGY2FsbGVyBAAAAA1hbW91bnRXaXRoRmVlCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUJAABlAAAAAgUAAAAJZmVlU2NhbGU2CQEAAAAIZnJhY3Rpb24AAAAEBQAAAANmZWUFAAAAC2ZlZURpc2NvdW50BQAAAAlmZWVTY2FsZTYFAAAAB0NFSUxJTkcFAAAACWZlZVNjYWxlNgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlCQEAAAAIZnJhY3Rpb24AAAAEBQAAAA1mZWVHb3Zlcm5hbmNlBQAAAAtmZWVEaXNjb3VudAUAAAAJZmVlU2NhbGU2BQAAAAdDRUlMSU5HBQAAAAlmZWVTY2FsZTYDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkAAaQAAAABBQAAAA1hbW91bnRXaXRoRmVlAgAAACAgaXMgbGVzcyB0aGFuIHNwZWNpZmllZCBtaW5pbXVtIAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAUVAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAACQEAAAAHc3VzcGVuZAAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAA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cnZlc3QJAAROAAAAAgUAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA1rRmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tGaXJzdEhhcnZlc3RIZWlnaHQJAABkAAAAAgUAAAALc3RhcnRIZWlnaHQJAABoAAAAAgUAAAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQAAAAxwZXJpb2RMZW5ndGgFAAAAA25pbAUAAAAJYmFzZUVudHJ5CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAARaW5pdFdpdGhJbml0UmF0aW8AAAAFAAAACWFtdEFzc2V0QQAAAAlhbXRBc3NldEIAAAALc3RyQXNzZXRJZEEAAAALc3RyQXNzZXRJZEIAAAAMZmlyc3RIYXJ2ZXN0BAAAAA0kdDAxMTY2MzExNzUwCQEAAAAWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwAAAAEFAAAAC3N0ckFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDExNjYzMTE3NTAAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMTY2MzExNzUwAAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMTY2MzExNzUwAAAAAl8zBAAAAA0kdDAxMTc1NTExODQyCQEAAAAWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwAAAAEFAAAAC3N0ckFzc2V0SWRCBAAAAA5wbXRTdHJBc3NldElkQggFAAAADSR0MDExNzU1MTE4NDIAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAA0kdDAxMTc1NTExODQyAAAAAl8yBAAAAAxwbXREZWNpbWFsc0IIBQAAAA0kdDAxMTc1NTExODQyAAAAAl8zAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABFhZG1pbkludm9rZVB1YktleQUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQbAAAAAgUAAAAEdGhpcwUAAAAHa0FjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkAAAAAAAACBQAAAAtzdHJBc3NldElkQQUAAAALc3RyQXNzZXRJZEIJAAACAAAAAQIAAAAYQXNzZXRzIG11c3QgYmUgZGlmZmVyZW50BAAAAAlzaGFyZU5hbWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAXMJAAEvAAAAAgUAAAANcG10QXNzZXROYW1lQQAAAAAAAAAABwIAAAABXwkAAS8AAAACBQAAAA1wbXRBc3NldE5hbWVCAAAAAAAAAAAHBAAAABBzaGFyZURlc2NyaXB0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUAAAANcG10QXNzZXROYW1lQQIAAAAFIGFuZCAFAAAADXBtdEFzc2V0TmFtZUICAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAR0aGlzBAAAAA1zaGFyZURlY2ltYWxzCQAAaQAAAAIJAABkAAAAAgUAAAAMcG10RGVjaW1hbHNBBQAAAAxwbXREZWNpbWFsc0IAAAAAAAAAAAIEAAAAEnNoYXJlSW5pdGlhbFN1cHBseQAAAAAAAAAAAAQAAAAKc2hhcmVJc3N1ZQkABEIAAAAFBQAAAAlzaGFyZU5hbWUFAAAAEHNoYXJlRGVzY3JpcHRpb24FAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAANc2hhcmVEZWNpbWFscwYEAAAADHNoYXJlSXNzdWVJZAkABDgAAAABBQAAAApzaGFyZUlzc3VlBAAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAIa1ZlcnNpb24FAAAAB3ZlcnNpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAB2tBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJa0Fzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa0JhbGFuY2VJbml0QQUAAAAJYW10QXNzZXRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rQmFsYW5jZUluaXRCBQAAAAlhbXRBc3NldEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAARrRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAZvcmFjbGUCAAAADWJhc2VfZmVlX2NwbW0JAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rU2hhcmVBc3NldElkCQACWAAAAAEFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAANa0ZpcnN0SGFydmVzdAUAAAAMZmlyc3RIYXJ2ZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQAAZAAAAAIFAAAAC3N0YXJ0SGVpZ2h0CQAAaAAAAAIFAAAAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUAAAAMcGVyaW9kTGVuZ3RoBQAAAANuaWwFAAAACWJhc2VFbnRyeQAAAAFpAQAAABhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QAAAABAAAACnNoYXJlTGltaXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAADCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEWFkbWluSW52b2tlUHViS2V5BQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tTaGFyZUxpbWl0BQAAAApzaGFyZUxpbWl0BQAAAANuaWwAAAABaQEAAAAWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwAAAAEAAAARc2xpcHBhZ2VUb2xlcmFuY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAAC3BtdEFzc2V0SWRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAtwbXRBc3NldElkQggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAHYXNzZXRJZAQAAAAKcG10QW1vdW50QQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAAApwbXRBbW91bnRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQEAAAADSR0MDE0MjIxMTQyOTgJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtwbXRBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAA0kdDAxNDIyMTE0Mjk4AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVBCAUAAAANJHQwMTQyMjExNDI5OAAAAAJfMgQAAAAMcG10RGVjaW1hbHNBCAUAAAANJHQwMTQyMjExNDI5OAAAAAJfMwQAAAANJHQwMTQzMDMxNDM4MAkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRCBAAAAA5wbXRTdHJBc3NldElkQggFAAAADSR0MDE0MzAzMTQzODAAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAA0kdDAxNDMwMzE0MzgwAAAAAl8yBAAAAAxwbXREZWNpbWFsc0IIBQAAAA0kdDAxNDMwMzE0MzgwAAAAAl8zBAAAAAZpbml0YWwDAwkAAAAAAAACBQAAAAhiYWxhbmNlQQAAAAAAAAAAAAkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAcGBwQAAAAKdG9rZW5SYXRpbwMFAAAABmluaXRhbAkAAGsAAAADCQAAawAAAAMFAAAACmFzc2V0SW5pdEEFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlMwkAAGsAAAADBQAAAAphc3NldEluaXRCBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QgkAAGsAAAADCQAAawAAAAMFAAAACGJhbGFuY2VBBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTMJAABrAAAAAwUAAAAIYmFsYW5jZUIFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRCBAAAAA1zaGFyZURlY2ltYWxzCQAAaQAAAAIJAABkAAAAAgUAAAAMcG10RGVjaW1hbHNBBQAAAAxwbXREZWNpbWFsc0IAAAAAAAAAAAIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAMFAAAABmluaXRhbAkAAGsAAAADCQAAbAAAAAYFAAAACnBtdEFtb3VudEEFAAAADHBtdERlY2ltYWxzQQAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNBBQAAAARET1dOCQAAbAAAAAYFAAAACnBtdEFtb3VudEIFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNCBQAAAARET1dOCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAADXNoYXJlRGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04JAABrAAAAAwkAAZcAAAABCQAETAAAAAIJAABrAAAAAwUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VBCQAETAAAAAIJAABrAAAAAwUAAAAKcG10QW1vdW50QgUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VCBQAAAANuaWwFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAC3NjYWxlVmFsdWU4AwMJAABmAAAAAgAAAAAAAAAAAAUAAAARc2xpcHBhZ2VUb2xlcmFuY2UGCQAAZgAAAAIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClTbGlwcGFnZSB0b2xlcmFuY2UgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIAkAAaQAAAABBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgIAAAAWIGluY2x1c2l2ZWx5LiBBY3R1YWw6IAkAAaQAAAABBQAAABFzbGlwcGFnZVRvbGVyYW5jZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAAAcVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZAMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABSBhbmQgBQAAAAtzdHJBc3NldElkQgMDCQAAZgAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGUAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAAAp0b2tlblJhdGlvBgkAAGYAAAACBQAAAAp0b2tlblJhdGlvCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABkAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABAgAAAD1JbmNvcnJlY3QgYXNzZXRzIGFtb3VudDogYW1vdW50cyBtdXN0IGhhdmUgdGhlIGNvbnRyYWN0IHJhdGlvAwkAAAAAAAACBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEEFAAAAC3BtdEFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QgUAAAALcG10QXNzZXRJZEIFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADnBtdFN0ckFzc2V0SWRBCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAApwbXRBbW91bnRBCQAETAAAAAIFAAAADnBtdFN0ckFzc2V0SWRBBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UxBQAAAAZzdGFrZTEEAAAABnN0YWtlMgMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5n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c2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDE4NTU0MTg2MjkAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxODU1NDE4NjI5AAAAAl8yAwMJAAAAAAAAAgUAAAAIYmFsYW5jZUEAAAAAAAAAAAAGCQAAAAAAAAIFAAAACGJhbGFuY2VCAAAAAAAAAAAACQAAAgAAAAECAAAAIENhbid0IGV4Y2hhbmdlIHdpdGggemVybyBiYWxhbmNlAwkAAGcAAAACAAAAAAAAAAAABQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACAgAAADRNaW5pbWFsIGFtb3VudCB0byByZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAAAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRCBAAAAA0kdDAxOTE4MDE5MzE4CQEAAAANY2FsY3VsYXRlRmVlcwAAAAUFAAAACXBtdEFtb3VudAUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDE5MTgwMTkzMTgAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxOTE4MDE5MzE4AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTkxODAxOTMxOAAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAQAAAALbmV3QmFsYW5jZUIJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRBCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAAlwbXRBbW91bnQJAARMAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRCCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBwkABEwAAAACCQAAZAAAAAIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAARMAAAAAgUAAAALc3RyQXNzZXRJZEIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEFAAAAC25ld0JhbGFuY2VBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPbW9uZXlCb3hBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQAFFAAAAAIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEEEAAAADSR0MDIwMzEwMjA0NDgJAQAAAA1jYWxjdWxhdGVGZWVzAAAABQUAAAAJcG10QW1vdW50BQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMjAzMTAyMDQ0OAAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDIwMzEwMjA0NDgAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAyMDMxMDIwNDQ4AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkBAAAAAtuZXdCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIJAABkAAAAAgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVt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bmNvbWVfBQAAAAtzdHJBc3NldElkQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAAxsYXN0X2luY29tZV8FAAAAC3N0ckFzc2V0SWRCBQAAAA1hbW91bnRFbnJvbGxCBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAxzdGFrZVVuc3Rha2UAAAADAAAABXN0YWtlAAAABmFtb3VudAAAAA1hc3NldElkU3RyaW5nAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAALU9ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbgMJAAAAAAAAAgUAAAANYXNzZXRJZFN0cmluZwIAAAAFV0FWRVMEAAAABHBvb2wJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUFAAAADGtMZWFzaW5nUG9vbAIAAAAZTm8gbGVhc2luZyBwb29sIGluIG9yYWNsZQQAAAAJbGVhc2luZ0lkCQAEHAAAAAIFAAAABHRoaXMFAAAACmtMZWFzaW5nSWQEAAAADWxlYXNpbmdBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAOa0xlYXNpbmdBbW91bnQAAAAAAAAAAAAEAAAADm5ld0xlYXNlQW1vdW50AwUAAAAFc3Rha2UJAABkAAAAAgUAAAANbGVhc2luZ0Ftb3VudAUAAAAGYW1vdW50CQAAZQAAAAIFAAAADWxlYXNpbmdBbW91bnQFAAAABmFtb3VudAQAAAAIbmV3TGVhc2UJAAREAAAAAgUAAAAEcG9vbAUAAAAObmV3TGVhc2VBbW91bnQEAAAACm5ld0xlYXNlSWQJAAQ5AAAAAQUAAAAIbmV3TGVhc2UEAAAACGJhc2VFdHJ5CQAETAAA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", "height": 3144296, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4Xp4HeHyaB5Arcxx2EUG9y7jRmwERGqmYDakT5D73q5f Next: BLhXxQJA1VnKYzDqHfKpYX69S6xNxSV75EtbSxbe8bYt Diff:
OldNewDifferences
4949
5050 let kLeasingId = "leasing_id"
5151
52+let kDiscounts = "discounts"
53+
54+let kDiscountValues = "discount_values"
55+
56+let kUserSwopInGov = "_SWOP_amount"
57+
5258 let kAdminPubKey1 = "admin_pub_1"
5359
5460 let kAdminPubKey2 = "admin_pub_2"
5864 let kAdminInvokePubKey = "admin_invoke_pub"
5965
6066 let kMoneyBoxAddress = "money_box_address"
67+
68+let kGovAddress = "governance_address"
6169
6270 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
6371
7886 let adminInvokePubKey = getBase58FromOracle(kAdminInvokePubKey)
7987
8088 let moneyBoxAddress = Address(getBase58FromOracle(kMoneyBoxAddress))
89+
90+let govAddress = Address(getBase58FromOracle(kGovAddress))
8191
8292 let votingAddress = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8393
243253
244254 func calcStakingParams (stake,amount,assetId) = if (stake)
245255 then {
246- let $t060896155 = calcStakingFuncAndAddres(stake, assetId)
247- let call = $t060896155._1
248- let stakingAddr = $t060896155._2
256+ let $t062906356 = calcStakingFuncAndAddres(stake, assetId)
257+ let call = $t062906356._1
258+ let stakingAddr = $t062906356._2
249259 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
250260 }
251261 else {
252- let $t062416307 = calcStakingFuncAndAddres(stake, assetId)
253- let call = $t062416307._1
254- let stakingAddr = $t062416307._2
262+ let $t064426508 = calcStakingFuncAndAddres(stake, assetId)
263+ let call = $t064426508._1
264+ let stakingAddr = $t064426508._2
255265 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
256266 }
257267
258268
259-func calculateFees (pmtAmount,minAmountToReceive,tokenFrom,tokenTo) = {
269+func calculateFeeDiscount (userAddr) = {
270+ let swopAmount = valueOrElse(getInteger(govAddress, (toString(userAddr) + kUserSwopInGov)), 0)
271+ let discountValues = split(getStringValue(oracle, kDiscountValues), ",")
272+ let discounts = split(getStringValue(oracle, kDiscounts), ",")
273+ if (if ((swopAmount >= parseIntValue(discountValues[0])))
274+ then (parseIntValue(discountValues[1]) > swopAmount)
275+ else false)
276+ then (feeScale6 - parseIntValue(discounts[0]))
277+ else if (if ((swopAmount >= parseIntValue(discountValues[1])))
278+ then (parseIntValue(discountValues[2]) > swopAmount)
279+ else false)
280+ then (feeScale6 - parseIntValue(discounts[1]))
281+ else if (if ((swopAmount >= parseIntValue(discountValues[2])))
282+ then (parseIntValue(discountValues[3]) > swopAmount)
283+ else false)
284+ then (feeScale6 - parseIntValue(discounts[2]))
285+ else if (if ((swopAmount >= parseIntValue(discountValues[3])))
286+ then (parseIntValue(discountValues[4]) > swopAmount)
287+ else false)
288+ then (feeScale6 - parseIntValue(discounts[3]))
289+ else if ((swopAmount >= parseIntValue(discountValues[4])))
290+ then (feeScale6 - parseIntValue(discounts[4]))
291+ else feeScale6
292+ }
293+
294+
295+func calculateFees (pmtAmount,minAmountToReceive,tokenFrom,tokenTo,caller) = {
260296 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
261- let amountWithFee = fraction(amountWithoutFee, (feeScale6 - fee), feeScale6)
262- let governanceReward = fraction(amountWithoutFee, feeGovernance, feeScale6)
297+ let feeDiscount = calculateFeeDiscount(caller)
298+ let amountWithFee = fraction(amountWithoutFee, (feeScale6 - fraction(fee, feeDiscount, feeScale6, CEILING)), feeScale6)
299+ let governanceReward = fraction(amountWithoutFee, fraction(feeGovernance, feeDiscount, feeScale6, CEILING), feeScale6)
263300 if ((minAmountToReceive > amountWithFee))
264301 then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive)))
265302 else $Tuple3(amountWithoutFee, amountWithFee, governanceReward)
276313
277314 @Callable(i)
278315 func init (firstHarvest) = {
279- let $t074187495 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
280- let pmtAmountA = $t074187495._1
281- let pmtAssetIdA = $t074187495._2
282- let $t075007577 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
283- let pmtAmountB = $t075007577._1
284- let pmtAssetIdB = $t075007577._2
285- let $t075827659 = getAssetInfo(pmtAssetIdA)
286- let pmtStrAssetIdA = $t075827659._1
287- let pmtAssetNameA = $t075827659._2
288- let pmtDecimalsA = $t075827659._3
289- let $t076647741 = getAssetInfo(pmtAssetIdB)
290- let pmtStrAssetIdB = $t076647741._1
291- let pmtAssetNameB = $t076647741._2
292- let pmtDecimalsB = $t076647741._3
316+ let $t088358912 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
317+ let pmtAmountA = $t088358912._1
318+ let pmtAssetIdA = $t088358912._2
319+ let $t089178994 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
320+ let pmtAmountB = $t089178994._1
321+ let pmtAssetIdB = $t089178994._2
322+ let $t089999076 = getAssetInfo(pmtAssetIdA)
323+ let pmtStrAssetIdA = $t089999076._1
324+ let pmtAssetNameA = $t089999076._2
325+ let pmtDecimalsA = $t089999076._3
326+ let $t090819158 = getAssetInfo(pmtAssetIdB)
327+ let pmtStrAssetIdB = $t090819158._1
328+ let pmtAssetNameB = $t090819158._2
329+ let pmtDecimalsB = $t090819158._3
293330 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.callerPublicKey)))
294331 then throw("Only admin can call this function")
295332 else if (isDefined(getBoolean(this, kActive)))
331368
332369 @Callable(i)
333370 func initWithInitRatio (amtAssetA,amtAssetB,strAssetIdA,strAssetIdB,firstHarvest) = {
334- let $t01024610333 = getAssetInfoFromString(strAssetIdA)
335- let pmtStrAssetIdA = $t01024610333._1
336- let pmtAssetNameA = $t01024610333._2
337- let pmtDecimalsA = $t01024610333._3
338- let $t01033810425 = getAssetInfoFromString(strAssetIdB)
339- let pmtStrAssetIdB = $t01033810425._1
340- let pmtAssetNameB = $t01033810425._2
341- let pmtDecimalsB = $t01033810425._3
371+ let $t01166311750 = getAssetInfoFromString(strAssetIdA)
372+ let pmtStrAssetIdA = $t01166311750._1
373+ let pmtAssetNameA = $t01166311750._2
374+ let pmtDecimalsA = $t01166311750._3
375+ let $t01175511842 = getAssetInfoFromString(strAssetIdB)
376+ let pmtStrAssetIdB = $t01175511842._1
377+ let pmtAssetNameB = $t01175511842._2
378+ let pmtDecimalsB = $t01175511842._3
342379 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.callerPublicKey)))
343380 then throw("Only admin can call this function")
344381 else if (isDefined(getBoolean(this, kActive)))
374411 let pmtAssetIdB = i.payments[1].assetId
375412 let pmtAmountA = i.payments[0].amount
376413 let pmtAmountB = i.payments[1].amount
377- let $t01280412881 = getAssetInfo(pmtAssetIdA)
378- let pmtStrAssetIdA = $t01280412881._1
379- let pmtAssetNameA = $t01280412881._2
380- let pmtDecimalsA = $t01280412881._3
381- let $t01288612963 = getAssetInfo(pmtAssetIdB)
382- let pmtStrAssetIdB = $t01288612963._1
383- let pmtAssetNameB = $t01288612963._2
384- let pmtDecimalsB = $t01288612963._3
414+ let $t01422114298 = getAssetInfo(pmtAssetIdA)
415+ let pmtStrAssetIdA = $t01422114298._1
416+ let pmtAssetNameA = $t01422114298._2
417+ let pmtDecimalsA = $t01422114298._3
418+ let $t01430314380 = getAssetInfo(pmtAssetIdB)
419+ let pmtStrAssetIdB = $t01430314380._1
420+ let pmtAssetNameB = $t01430314380._2
421+ let pmtDecimalsB = $t01430314380._3
385422 let inital = if (if ((balanceA == 0))
386423 then (balanceB == 0)
387424 else false)
433470
434471 @Callable(i)
435472 func withdraw () = valueOrElse(isActive(), {
436- let $t01576315838 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
437- let pmtAmount = $t01576315838._1
438- let pmtAssetId = $t01576315838._2
473+ let $t01718017255 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
474+ let pmtAmount = $t01718017255._1
475+ let pmtAssetId = $t01718017255._2
439476 let amountToPayA = fraction(pmtAmount, balanceA, shareAssetSupply)
440477 let amountToPayB = fraction(pmtAmount, balanceB, shareAssetSupply)
441478 if ((size(i.payments) != 1))
465502
466503 @Callable(i)
467504 func exchange (minAmountToReceive) = valueOrElse(isActive(), {
468- let $t01713717212 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
469- let pmtAmount = $t01713717212._1
470- let pmtAssetId = $t01713717212._2
505+ let $t01855418629 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
506+ let pmtAmount = $t01855418629._1
507+ let pmtAssetId = $t01855418629._2
471508 if (if ((balanceA == 0))
472509 then true
473510 else (balanceB == 0))
481518 else if ((pmtAssetId == assetIdA))
482519 then {
483520 let assetIdSend = assetIdB
484- let $t01776317885 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB)
485- let amountWithoutFee = $t01776317885._1
486- let amountWithFee = $t01776317885._2
487- let governanceReward = $t01776317885._3
521+ let $t01918019318 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB, i.originCaller)
522+ let amountWithoutFee = $t01918019318._1
523+ let amountWithFee = $t01918019318._2
524+ let governanceReward = $t01918019318._3
488525 let newBalanceA = (balanceA + pmtAmount)
489526 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
490527 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
504541 else if ((pmtAssetId == assetIdB))
505542 then {
506543 let assetIdSend = assetIdA
507- let $t01887718999 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA)
508- let amountWithoutFee = $t01887718999._1
509- let amountWithFee = $t01887718999._2
510- let governanceReward = $t01887718999._3
544+ let $t02031020448 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA, i.originCaller)
545+ let amountWithoutFee = $t02031020448._1
546+ let amountWithFee = $t02031020448._2
547+ let governanceReward = $t02031020448._3
511548 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
512549 let newBalanceB = (balanceB + pmtAmount)
513550 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
602639 }
603640 }
604641 else {
605- let $t02275322856 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
606- let call = $t02275322856._1
607- let addr = $t02275322856._2
608- let params = $t02275322856._3
609- let payments = $t02275322856._4
642+ let $t02420224305 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
643+ let call = $t02420224305._1
644+ let addr = $t02420224305._2
645+ let params = $t02420224305._3
646+ let payments = $t02420224305._4
610647 let inv = invoke(addr, call, params, payments)
611648 if ((inv == inv))
612649 then nil
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = "1.0.0"
55
66 let kVersion = "version"
77
88 let kActive = "active"
99
1010 let kAssetIdA = "A_asset_id"
1111
1212 let kAssetIdB = "B_asset_id"
1313
1414 let kBalanceA = "A_asset_balance"
1515
1616 let kBalanceB = "B_asset_balance"
1717
1818 let kBalanceInitA = "A_asset_init"
1919
2020 let kBalanceInitB = "B_asset_init"
2121
2222 let kShareAssetId = "share_asset_id"
2323
2424 let kShareAssetSupply = "share_asset_supply"
2525
2626 let kFee = "commission"
2727
2828 let kCause = "shutdown_cause"
2929
3030 let kFirstHarvest = "first_harvest"
3131
3232 let kFirstHarvestHeight = "first_harvest_height"
3333
3434 let kShareLimit = "share_limit_on_first_harvest"
3535
3636 let kBasePeriod = "base_period"
3737
3838 let kPeriodLength = "period_length"
3939
4040 let kStartHeight = "start_height"
4141
4242 let kUSDNAddress = "staking_usdnnsbt_address"
4343
4444 let kEURNAddress = "staking_eurn_address"
4545
4646 let kLeasingPool = "leasing_address"
4747
4848 let kLeasingAmount = "leasing_amount"
4949
5050 let kLeasingId = "leasing_id"
5151
52+let kDiscounts = "discounts"
53+
54+let kDiscountValues = "discount_values"
55+
56+let kUserSwopInGov = "_SWOP_amount"
57+
5258 let kAdminPubKey1 = "admin_pub_1"
5359
5460 let kAdminPubKey2 = "admin_pub_2"
5561
5662 let kAdminPubKey3 = "admin_pub_3"
5763
5864 let kAdminInvokePubKey = "admin_invoke_pub"
5965
6066 let kMoneyBoxAddress = "money_box_address"
67+
68+let kGovAddress = "governance_address"
6169
6270 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
6371
6472 func getBase58FromOracle (key) = match getString(oracle, key) {
6573 case string: String =>
6674 fromBase58String(string)
6775 case nothing =>
6876 throw((key + "is empty"))
6977 }
7078
7179
7280 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
7381
7482 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
7583
7684 let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
7785
7886 let adminInvokePubKey = getBase58FromOracle(kAdminInvokePubKey)
7987
8088 let moneyBoxAddress = Address(getBase58FromOracle(kMoneyBoxAddress))
89+
90+let govAddress = Address(getBase58FromOracle(kGovAddress))
8191
8292 let votingAddress = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8393
8494 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
8595
8696 let SWOP = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
8797
8898 let EURN = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
8999
90100 let stakingAssets = ["WAVES", toBase58String(USDN), toBase58String(EURN)]
91101
92102 let stakingUSDNAddress = Address(getBase58FromOracle(kUSDNAddress))
93103
94104 let stakingEURNAddress = Address(getBase58FromOracle(kEURNAddress))
95105
96106 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
97107
98108 let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
99109
100110 let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
101111
102112 let firstHarvestEndPeriod = ((basePeriod + ((height - startHeight) / periodLength)) + 3)
103113
104114 let active = getBooleanValue(this, kActive)
105115
106116 let strAssetIdA = getStringValue(this, kAssetIdA)
107117
108118 let strAssetIdB = getStringValue(this, kAssetIdB)
109119
110120 let assetIdA = if ((strAssetIdA == "WAVES"))
111121 then unit
112122 else fromBase58String(strAssetIdA)
113123
114124 let assetIdB = if ((strAssetIdB == "WAVES"))
115125 then unit
116126 else fromBase58String(strAssetIdB)
117127
118128 let assetNameA = match assetIdA {
119129 case id: ByteVector =>
120130 value(assetInfo(id)).name
121131 case waves: Unit =>
122132 "WAVES"
123133 case _ =>
124134 throw("Match error")
125135 }
126136
127137 let assetNameB = match assetIdB {
128138 case id: ByteVector =>
129139 value(assetInfo(id)).name
130140 case waves: Unit =>
131141 "WAVES"
132142 case _ =>
133143 throw("Match error")
134144 }
135145
136146 let balanceA = getIntegerValue(this, kBalanceA)
137147
138148 let balanceB = getIntegerValue(this, kBalanceB)
139149
140150 let shareAssetId = fromBase58String(getStringValue(this, kShareAssetId))
141151
142152 let shareAssetSupply = getIntegerValue(this, kShareAssetSupply)
143153
144154 let fee = getIntegerValue(this, kFee)
145155
146156 let feeGovernance = fraction(fee, 40, 100)
147157
148158 let feeScale6 = 1000000
149159
150160 let scaleValue3 = 1000
151161
152162 let scaleValue8 = 100000000
153163
154164 let slippageToleranceDelimiter = 1000
155165
156166 let scaleValue8Digits = 8
157167
158168 func accountBalance (assetId) = match assetId {
159169 case id: ByteVector =>
160170 assetBalance(this, id)
161171 case waves: Unit =>
162172 wavesBalance(this).available
163173 case _ =>
164174 throw("Match error")
165175 }
166176
167177
168178 func stakedAmount (assetId) = {
169179 let stakedAmountCalculated = match assetId {
170180 case aId: ByteVector =>
171181 if ((aId == USDN))
172182 then getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(aId)) + "_") + toString(this)))
173183 else if ((aId == EURN))
174184 then getInteger(stakingEURNAddress, ((("%s%s%s__stakingBalance__" + toBase58String(aId)) + "__") + toString(this)))
175185 else 0
176186 case _: Unit =>
177187 valueOrElse(getInteger(this, kLeasingAmount), 0)
178188 case _ =>
179189 throw("Match error")
180190 }
181191 match stakedAmountCalculated {
182192 case i: Int =>
183193 i
184194 case _ =>
185195 0
186196 }
187197 }
188198
189199
190200 let stakedAmountA = stakedAmount(assetIdA)
191201
192202 let stakedAmountB = stakedAmount(assetIdB)
193203
194204 let assetInitA = getIntegerValue(this, kBalanceInitA)
195205
196206 let assetInitB = getIntegerValue(this, kBalanceInitB)
197207
198208 let availableBalanceA = (balanceA - stakedAmountA)
199209
200210 let availableBalanceB = (balanceB - stakedAmountB)
201211
202212 let accountBalanceWithStakedA = (accountBalance(assetIdA) + stakedAmountA)
203213
204214 let accountBalanceWithStakedB = (accountBalance(assetIdB) + stakedAmountB)
205215
206216 let hasEnoughBalance = if ((accountBalanceWithStakedA >= balanceA))
207217 then (accountBalanceWithStakedB >= balanceB)
208218 else false
209219
210220 func getAssetInfo (assetId) = match assetId {
211221 case id: ByteVector =>
212222 let stringId = toBase58String(id)
213223 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
214224 $Tuple3(stringId, info.name, info.decimals)
215225 case waves: Unit =>
216226 $Tuple3("WAVES", "WAVES", 8)
217227 case _ =>
218228 throw("Match error")
219229 }
220230
221231
222232 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
223233 then $Tuple3("WAVES", "WAVES", 8)
224234 else {
225235 let stringId = assetStr
226236 let id = fromBase58String(assetStr)
227237 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
228238 $Tuple3(stringId, info.name, info.decimals)
229239 }
230240
231241
232242 func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
233243
234244
235245 func calcStakingFuncAndAddres (stake,assetId) = if (stake)
236246 then if ((assetId == USDN))
237247 then $Tuple2("lockNeutrino", stakingUSDNAddress)
238248 else $Tuple2("startStaking", stakingEURNAddress)
239249 else if ((assetId == USDN))
240250 then $Tuple2("unlockNeutrino", stakingUSDNAddress)
241251 else $Tuple2("stopStaking", stakingEURNAddress)
242252
243253
244254 func calcStakingParams (stake,amount,assetId) = if (stake)
245255 then {
246- let $t060896155 = calcStakingFuncAndAddres(stake, assetId)
247- let call = $t060896155._1
248- let stakingAddr = $t060896155._2
256+ let $t062906356 = calcStakingFuncAndAddres(stake, assetId)
257+ let call = $t062906356._1
258+ let stakingAddr = $t062906356._2
249259 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
250260 }
251261 else {
252- let $t062416307 = calcStakingFuncAndAddres(stake, assetId)
253- let call = $t062416307._1
254- let stakingAddr = $t062416307._2
262+ let $t064426508 = calcStakingFuncAndAddres(stake, assetId)
263+ let call = $t064426508._1
264+ let stakingAddr = $t064426508._2
255265 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
256266 }
257267
258268
259-func calculateFees (pmtAmount,minAmountToReceive,tokenFrom,tokenTo) = {
269+func calculateFeeDiscount (userAddr) = {
270+ let swopAmount = valueOrElse(getInteger(govAddress, (toString(userAddr) + kUserSwopInGov)), 0)
271+ let discountValues = split(getStringValue(oracle, kDiscountValues), ",")
272+ let discounts = split(getStringValue(oracle, kDiscounts), ",")
273+ if (if ((swopAmount >= parseIntValue(discountValues[0])))
274+ then (parseIntValue(discountValues[1]) > swopAmount)
275+ else false)
276+ then (feeScale6 - parseIntValue(discounts[0]))
277+ else if (if ((swopAmount >= parseIntValue(discountValues[1])))
278+ then (parseIntValue(discountValues[2]) > swopAmount)
279+ else false)
280+ then (feeScale6 - parseIntValue(discounts[1]))
281+ else if (if ((swopAmount >= parseIntValue(discountValues[2])))
282+ then (parseIntValue(discountValues[3]) > swopAmount)
283+ else false)
284+ then (feeScale6 - parseIntValue(discounts[2]))
285+ else if (if ((swopAmount >= parseIntValue(discountValues[3])))
286+ then (parseIntValue(discountValues[4]) > swopAmount)
287+ else false)
288+ then (feeScale6 - parseIntValue(discounts[3]))
289+ else if ((swopAmount >= parseIntValue(discountValues[4])))
290+ then (feeScale6 - parseIntValue(discounts[4]))
291+ else feeScale6
292+ }
293+
294+
295+func calculateFees (pmtAmount,minAmountToReceive,tokenFrom,tokenTo,caller) = {
260296 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
261- let amountWithFee = fraction(amountWithoutFee, (feeScale6 - fee), feeScale6)
262- let governanceReward = fraction(amountWithoutFee, feeGovernance, feeScale6)
297+ let feeDiscount = calculateFeeDiscount(caller)
298+ let amountWithFee = fraction(amountWithoutFee, (feeScale6 - fraction(fee, feeDiscount, feeScale6, CEILING)), feeScale6)
299+ let governanceReward = fraction(amountWithoutFee, fraction(feeGovernance, feeDiscount, feeScale6, CEILING), feeScale6)
263300 if ((minAmountToReceive > amountWithFee))
264301 then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive)))
265302 else $Tuple3(amountWithoutFee, amountWithFee, governanceReward)
266303 }
267304
268305
269306 func suspendSuspicious () = suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(accountBalanceWithStakedA)) + " ") + assetNameA) + ", ") + toString(accountBalanceWithStakedB)) + " ") + assetNameB) + ". State: ") + toString(balanceA)) + " ") + assetNameA) + ", ") + toString(balanceB)) + " ") + assetNameB))
270307
271308
272309 func isActive () = if (active)
273310 then unit
274311 else throw("DApp is inactive at this moment")
275312
276313
277314 @Callable(i)
278315 func init (firstHarvest) = {
279- let $t074187495 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
280- let pmtAmountA = $t074187495._1
281- let pmtAssetIdA = $t074187495._2
282- let $t075007577 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
283- let pmtAmountB = $t075007577._1
284- let pmtAssetIdB = $t075007577._2
285- let $t075827659 = getAssetInfo(pmtAssetIdA)
286- let pmtStrAssetIdA = $t075827659._1
287- let pmtAssetNameA = $t075827659._2
288- let pmtDecimalsA = $t075827659._3
289- let $t076647741 = getAssetInfo(pmtAssetIdB)
290- let pmtStrAssetIdB = $t076647741._1
291- let pmtAssetNameB = $t076647741._2
292- let pmtDecimalsB = $t076647741._3
316+ let $t088358912 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
317+ let pmtAmountA = $t088358912._1
318+ let pmtAssetIdA = $t088358912._2
319+ let $t089178994 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
320+ let pmtAmountB = $t089178994._1
321+ let pmtAssetIdB = $t089178994._2
322+ let $t089999076 = getAssetInfo(pmtAssetIdA)
323+ let pmtStrAssetIdA = $t089999076._1
324+ let pmtAssetNameA = $t089999076._2
325+ let pmtDecimalsA = $t089999076._3
326+ let $t090819158 = getAssetInfo(pmtAssetIdB)
327+ let pmtStrAssetIdB = $t090819158._1
328+ let pmtAssetNameB = $t090819158._2
329+ let pmtDecimalsB = $t090819158._3
293330 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.callerPublicKey)))
294331 then throw("Only admin can call this function")
295332 else if (isDefined(getBoolean(this, kActive)))
296333 then throw("DApp is already active")
297334 else if ((pmtAssetIdA == pmtAssetIdB))
298335 then throw("Assets must be different")
299336 else {
300337 let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
301338 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
302339 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
303340 let arg1 = pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN)
304341 let arg2 = pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN)
305342 let arg3 = pow(10, 0, shareDecimals, 0, 0, DOWN)
306343 let shareInitialSupply = fraction(arg1, arg2, arg3)
307344 let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
308345 let shareIssueId = calculateAssetId(shareIssue)
309346 let stake1 = if (containsElement(stakingAssets, pmtStrAssetIdA))
310347 then invoke(this, "stakeUnstake", [true, pmtAmountA, pmtStrAssetIdA], nil)
311348 else 0
312349 if ((stake1 == stake1))
313350 then {
314351 let stake2 = if (containsElement(stakingAssets, pmtStrAssetIdB))
315352 then invoke(this, "stakeUnstake", [true, pmtAmountB, pmtStrAssetIdB], nil)
316353 else 0
317354 if ((stake2 == stake2))
318355 then {
319356 let baseEntry = [StringEntry(kVersion, version), BooleanEntry(kActive, true), StringEntry(kAssetIdA, pmtStrAssetIdA), StringEntry(kAssetIdB, pmtStrAssetIdB), IntegerEntry(kBalanceA, pmtAmountA), IntegerEntry(kBalanceB, pmtAmountB), IntegerEntry(kFee, getIntegerValue(oracle, "base_fee_cpmm")), shareIssue, StringEntry(kShareAssetId, toBase58String(shareIssueId)), IntegerEntry(kShareAssetSupply, shareInitialSupply), ScriptTransfer(i.caller, shareInitialSupply, shareIssueId)]
320357 if (firstHarvest)
321358 then (baseEntry ++ [BooleanEntry(kFirstHarvest, firstHarvest), IntegerEntry(kFirstHarvestHeight, (startHeight + (firstHarvestEndPeriod * periodLength)))])
322359 else baseEntry
323360 }
324361 else throw("Strict value is not equal to itself.")
325362 }
326363 else throw("Strict value is not equal to itself.")
327364 }
328365 }
329366
330367
331368
332369 @Callable(i)
333370 func initWithInitRatio (amtAssetA,amtAssetB,strAssetIdA,strAssetIdB,firstHarvest) = {
334- let $t01024610333 = getAssetInfoFromString(strAssetIdA)
335- let pmtStrAssetIdA = $t01024610333._1
336- let pmtAssetNameA = $t01024610333._2
337- let pmtDecimalsA = $t01024610333._3
338- let $t01033810425 = getAssetInfoFromString(strAssetIdB)
339- let pmtStrAssetIdB = $t01033810425._1
340- let pmtAssetNameB = $t01033810425._2
341- let pmtDecimalsB = $t01033810425._3
371+ let $t01166311750 = getAssetInfoFromString(strAssetIdA)
372+ let pmtStrAssetIdA = $t01166311750._1
373+ let pmtAssetNameA = $t01166311750._2
374+ let pmtDecimalsA = $t01166311750._3
375+ let $t01175511842 = getAssetInfoFromString(strAssetIdB)
376+ let pmtStrAssetIdB = $t01175511842._1
377+ let pmtAssetNameB = $t01175511842._2
378+ let pmtDecimalsB = $t01175511842._3
342379 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.callerPublicKey)))
343380 then throw("Only admin can call this function")
344381 else if (isDefined(getBoolean(this, kActive)))
345382 then throw("DApp is already active")
346383 else if ((strAssetIdA == strAssetIdB))
347384 then throw("Assets must be different")
348385 else {
349386 let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
350387 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
351388 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
352389 let shareInitialSupply = 0
353390 let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
354391 let shareIssueId = calculateAssetId(shareIssue)
355392 let baseEntry = [StringEntry(kVersion, version), BooleanEntry(kActive, true), StringEntry(kAssetIdA, pmtStrAssetIdA), StringEntry(kAssetIdB, pmtStrAssetIdB), IntegerEntry(kBalanceInitA, amtAssetA), IntegerEntry(kBalanceInitB, amtAssetB), IntegerEntry(kBalanceA, 0), IntegerEntry(kBalanceB, 0), IntegerEntry(kFee, getIntegerValue(oracle, "base_fee_cpmm")), shareIssue, StringEntry(kShareAssetId, toBase58String(shareIssueId)), IntegerEntry(kShareAssetSupply, shareInitialSupply)]
356393 if (firstHarvest)
357394 then (baseEntry ++ [BooleanEntry(kFirstHarvest, firstHarvest), IntegerEntry(kFirstHarvestHeight, (startHeight + (firstHarvestEndPeriod * periodLength)))])
358395 else baseEntry
359396 }
360397 }
361398
362399
363400
364401 @Callable(i)
365402 func keepLimitForFirstHarvest (shareLimit) = valueOrElse(isActive(), if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.callerPublicKey)))
366403 then throw("Only admin can call this function")
367404 else [IntegerEntry(kShareLimit, shareLimit)])
368405
369406
370407
371408 @Callable(i)
372409 func replenishWithTwoTokens (slippageTolerance) = valueOrElse(isActive(), {
373410 let pmtAssetIdA = i.payments[0].assetId
374411 let pmtAssetIdB = i.payments[1].assetId
375412 let pmtAmountA = i.payments[0].amount
376413 let pmtAmountB = i.payments[1].amount
377- let $t01280412881 = getAssetInfo(pmtAssetIdA)
378- let pmtStrAssetIdA = $t01280412881._1
379- let pmtAssetNameA = $t01280412881._2
380- let pmtDecimalsA = $t01280412881._3
381- let $t01288612963 = getAssetInfo(pmtAssetIdB)
382- let pmtStrAssetIdB = $t01288612963._1
383- let pmtAssetNameB = $t01288612963._2
384- let pmtDecimalsB = $t01288612963._3
414+ let $t01422114298 = getAssetInfo(pmtAssetIdA)
415+ let pmtStrAssetIdA = $t01422114298._1
416+ let pmtAssetNameA = $t01422114298._2
417+ let pmtDecimalsA = $t01422114298._3
418+ let $t01430314380 = getAssetInfo(pmtAssetIdB)
419+ let pmtStrAssetIdB = $t01430314380._1
420+ let pmtAssetNameB = $t01430314380._2
421+ let pmtDecimalsB = $t01430314380._3
385422 let inital = if (if ((balanceA == 0))
386423 then (balanceB == 0)
387424 else false)
388425 then true
389426 else false
390427 let tokenRatio = if (inital)
391428 then fraction(fraction(assetInitA, scaleValue8, pmtAmountA), scaleValue3, fraction(assetInitB, scaleValue8, pmtAmountB))
392429 else fraction(fraction(balanceA, scaleValue8, pmtAmountA), scaleValue3, fraction(balanceB, scaleValue8, pmtAmountB))
393430 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
394431 let shareTokenToPayAmount = if (inital)
395432 then fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN), pow(10, 0, shareDecimals, 0, 0, DOWN))
396433 else fraction(min([fraction(pmtAmountA, scaleValue8, balanceA), fraction(pmtAmountB, scaleValue8, balanceB)]), shareAssetSupply, scaleValue8)
397434 if (if ((0 > slippageTolerance))
398435 then true
399436 else (slippageTolerance > slippageToleranceDelimiter))
400437 then throw(((("Slippage tolerance must be between 0 and " + toString(slippageToleranceDelimiter)) + " inclusively. Actual: ") + toString(slippageTolerance)))
401438 else if ((size(i.payments) != 2))
402439 then throw("Two attached assets expected")
403440 else if (if ((pmtAssetIdA != assetIdA))
404441 then true
405442 else (pmtAssetIdB != assetIdB))
406443 then throw(((("Incorrect assets attached. Expected: " + strAssetIdA) + " and ") + strAssetIdB))
407444 else if (if ((((scaleValue3 * (slippageToleranceDelimiter - slippageTolerance)) / slippageToleranceDelimiter) > tokenRatio))
408445 then true
409446 else (tokenRatio > ((scaleValue3 * (slippageToleranceDelimiter + slippageTolerance)) / slippageToleranceDelimiter)))
410447 then throw("Incorrect assets amount: amounts must have the contract ratio")
411448 else if ((shareTokenToPayAmount == 0))
412449 then throw("Too small amount to replenish")
413450 else if (!(hasEnoughBalance))
414451 then ([ScriptTransfer(i.caller, pmtAmountA, pmtAssetIdA), ScriptTransfer(i.caller, pmtAmountB, pmtAssetIdB)] ++ suspendSuspicious())
415452 else {
416453 let stake1 = if (containsElement(stakingAssets, pmtStrAssetIdA))
417454 then invoke(this, "stakeUnstake", [true, pmtAmountA, pmtStrAssetIdA], nil)
418455 else 0
419456 if ((stake1 == stake1))
420457 then {
421458 let stake2 = if (containsElement(stakingAssets, pmtStrAssetIdB))
422459 then invoke(this, "stakeUnstake", [true, pmtAmountB, pmtStrAssetIdB], nil)
423460 else 0
424461 if ((stake2 == stake2))
425462 then [Reissue(shareAssetId, shareTokenToPayAmount, true), IntegerEntry(kBalanceA, (balanceA + pmtAmountA)), IntegerEntry(kBalanceB, (balanceB + pmtAmountB)), IntegerEntry(kShareAssetSupply, (shareAssetSupply + shareTokenToPayAmount)), ScriptTransfer(i.caller, shareTokenToPayAmount, shareAssetId)]
426463 else throw("Strict value is not equal to itself.")
427464 }
428465 else throw("Strict value is not equal to itself.")
429466 }
430467 })
431468
432469
433470
434471 @Callable(i)
435472 func withdraw () = valueOrElse(isActive(), {
436- let $t01576315838 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
437- let pmtAmount = $t01576315838._1
438- let pmtAssetId = $t01576315838._2
473+ let $t01718017255 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
474+ let pmtAmount = $t01718017255._1
475+ let pmtAssetId = $t01718017255._2
439476 let amountToPayA = fraction(pmtAmount, balanceA, shareAssetSupply)
440477 let amountToPayB = fraction(pmtAmount, balanceB, shareAssetSupply)
441478 if ((size(i.payments) != 1))
442479 then throw("One attached payment expected")
443480 else if ((pmtAssetId != shareAssetId))
444481 then throw(("Incorrect asset attached. Expected: " + toBase58String(shareAssetId)))
445482 else if (!(hasEnoughBalance))
446483 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious())
447484 else {
448485 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
449486 then invoke(this, "stakeUnstake", [false, amountToPayA, strAssetIdA], nil)
450487 else 0
451488 if ((stake1 == stake1))
452489 then {
453490 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
454491 then invoke(this, "stakeUnstake", [false, amountToPayB, strAssetIdB], nil)
455492 else 0
456493 if ((stake2 == stake2))
457494 then [IntegerEntry(kBalanceA, (balanceA - amountToPayA)), IntegerEntry(kBalanceB, (balanceB - amountToPayB)), IntegerEntry(kShareAssetSupply, (shareAssetSupply - pmtAmount)), Burn(shareAssetId, pmtAmount), ScriptTransfer(i.caller, amountToPayA, assetIdA), ScriptTransfer(i.caller, amountToPayB, assetIdB)]
458495 else throw("Strict value is not equal to itself.")
459496 }
460497 else throw("Strict value is not equal to itself.")
461498 }
462499 })
463500
464501
465502
466503 @Callable(i)
467504 func exchange (minAmountToReceive) = valueOrElse(isActive(), {
468- let $t01713717212 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
469- let pmtAmount = $t01713717212._1
470- let pmtAssetId = $t01713717212._2
505+ let $t01855418629 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
506+ let pmtAmount = $t01855418629._1
507+ let pmtAssetId = $t01855418629._2
471508 if (if ((balanceA == 0))
472509 then true
473510 else (balanceB == 0))
474511 then throw("Can't exchange with zero balance")
475512 else if ((0 >= minAmountToReceive))
476513 then throw(("Minimal amount to receive must be positive. Actual: " + toString(minAmountToReceive)))
477514 else if ((size(i.payments) != 1))
478515 then throw("One attached payment expected")
479516 else if (!(hasEnoughBalance))
480517 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious())
481518 else if ((pmtAssetId == assetIdA))
482519 then {
483520 let assetIdSend = assetIdB
484- let $t01776317885 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB)
485- let amountWithoutFee = $t01776317885._1
486- let amountWithFee = $t01776317885._2
487- let governanceReward = $t01776317885._3
521+ let $t01918019318 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB, i.originCaller)
522+ let amountWithoutFee = $t01918019318._1
523+ let amountWithFee = $t01918019318._2
524+ let governanceReward = $t01918019318._3
488525 let newBalanceA = (balanceA + pmtAmount)
489526 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
490527 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
491528 then invoke(this, "stakeUnstake", [true, pmtAmount, strAssetIdA], nil)
492529 else 0
493530 if ((stake1 == stake1))
494531 then {
495532 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
496533 then invoke(this, "stakeUnstake", [false, (amountWithFee + governanceReward), strAssetIdB], nil)
497534 else 0
498535 if ((stake2 == stake2))
499536 then $Tuple2([IntegerEntry(kBalanceA, newBalanceA), IntegerEntry(kBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(moneyBoxAddress, governanceReward, assetIdSend)], $Tuple2(amountWithFee, assetIdSend))
500537 else throw("Strict value is not equal to itself.")
501538 }
502539 else throw("Strict value is not equal to itself.")
503540 }
504541 else if ((pmtAssetId == assetIdB))
505542 then {
506543 let assetIdSend = assetIdA
507- let $t01887718999 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA)
508- let amountWithoutFee = $t01887718999._1
509- let amountWithFee = $t01887718999._2
510- let governanceReward = $t01887718999._3
544+ let $t02031020448 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA, i.originCaller)
545+ let amountWithoutFee = $t02031020448._1
546+ let amountWithFee = $t02031020448._2
547+ let governanceReward = $t02031020448._3
511548 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
512549 let newBalanceB = (balanceB + pmtAmount)
513550 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
514551 then invoke(this, "stakeUnstake", [false, (amountWithFee + governanceReward), strAssetIdA], nil)
515552 else 0
516553 if ((stake1 == stake1))
517554 then {
518555 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
519556 then invoke(this, "stakeUnstake", [true, pmtAmount, strAssetIdB], nil)
520557 else 0
521558 if ((stake2 == stake2))
522559 then $Tuple2([IntegerEntry(kBalanceA, newBalanceA), IntegerEntry(kBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(moneyBoxAddress, governanceReward, assetIdSend)], $Tuple2(amountWithFee, assetIdSend))
523560 else throw("Strict value is not equal to itself.")
524561 }
525562 else throw("Strict value is not equal to itself.")
526563 }
527564 else throw(((("Incorrect asset attached. Expected: " + strAssetIdA) + " or ") + strAssetIdB))
528565 })
529566
530567
531568
532569 @Callable(i)
533570 func shutdown () = if (!(active))
534571 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, kCause), "the cause wasn't specified")))
535572 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
536573 then throw("Only admin can call this function")
537574 else suspend("Paused by admin")
538575
539576
540577
541578 @Callable(i)
542579 func activate () = if (active)
543580 then throw("DApp is already active")
544581 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
545582 then throw("Only admin can call this function")
546583 else [BooleanEntry(kActive, true), DeleteEntry(kCause)]
547584
548585
549586
550587 @Callable(i)
551588 func takeIntoAccountExtraFunds () = valueOrElse(isActive(), {
552589 let amountEnrollA = (accountBalanceWithStakedA - balanceA)
553590 let amountEnrollB = (accountBalanceWithStakedB - balanceB)
554591 if ((i.caller != moneyBoxAddress))
555592 then throw("Only the wallet can call this function")
556593 else if (if ((0 > amountEnrollA))
557594 then true
558595 else (0 > amountEnrollB))
559596 then suspend("Enroll amount negative")
560597 else if (if ((amountEnrollA == 0))
561598 then (amountEnrollB == 0)
562599 else false)
563600 then throw("No money to take")
564601 else {
565602 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
566603 then invoke(this, "stakeUnstake", [true, amountEnrollA, strAssetIdA], nil)
567604 else 0
568605 if ((stake1 == stake1))
569606 then {
570607 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
571608 then invoke(this, "stakeUnstake", [true, amountEnrollB, strAssetIdB], nil)
572609 else 0
573610 if ((stake2 == stake2))
574611 then [IntegerEntry(kBalanceA, (balanceA + amountEnrollA)), IntegerEntry(kBalanceB, (balanceB + amountEnrollB)), IntegerEntry(("last_income_" + strAssetIdA), amountEnrollA), IntegerEntry(("last_income_" + strAssetIdB), amountEnrollB)]
575612 else throw("Strict value is not equal to itself.")
576613 }
577614 else throw("Strict value is not equal to itself.")
578615 }
579616 })
580617
581618
582619
583620 @Callable(i)
584621 func stakeUnstake (stake,amount,assetIdString) = if ((i.caller != this))
585622 then throw("Only contract itself can invoke this function")
586623 else if ((assetIdString == "WAVES"))
587624 then {
588625 let pool = addressFromStringValue(valueOrErrorMessage(getString(oracle, kLeasingPool), "No leasing pool in oracle"))
589626 let leasingId = getBinary(this, kLeasingId)
590627 let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0)
591628 let newLeaseAmount = if (stake)
592629 then (leasingAmount + amount)
593630 else (leasingAmount - amount)
594631 let newLease = Lease(pool, newLeaseAmount)
595632 let newLeaseId = calculateLeaseId(newLease)
596633 let baseEtry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)]
597634 match leasingId {
598635 case lId: ByteVector =>
599636 ([LeaseCancel(lId)] ++ baseEtry)
600637 case _ =>
601638 baseEtry
602639 }
603640 }
604641 else {
605- let $t02275322856 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
606- let call = $t02275322856._1
607- let addr = $t02275322856._2
608- let params = $t02275322856._3
609- let payments = $t02275322856._4
642+ let $t02420224305 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
643+ let call = $t02420224305._1
644+ let addr = $t02420224305._2
645+ let params = $t02420224305._3
646+ let payments = $t02420224305._4
610647 let inv = invoke(addr, call, params, payments)
611648 if ((inv == inv))
612649 then nil
613650 else throw("Strict value is not equal to itself.")
614651 }
615652
616653
617654
618655 @Callable(i)
619656 func stakeAll () = valueOrElse(isActive(), if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
620657 then throw("Only admin can call this function")
621658 else {
622659 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
623660 then {
624661 let amountA = (balanceA - stakedAmountA)
625662 if ((amountA > 0))
626663 then invoke(this, "stakeUnstake", [true, amountA, strAssetIdA], nil)
627664 else 0
628665 }
629666 else 0
630667 if ((stake1 == stake1))
631668 then {
632669 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
633670 then {
634671 let amountB = (balanceB - stakedAmountB)
635672 if ((amountB > 0))
636673 then invoke(this, "stakeUnstake", [true, amountB, strAssetIdB], nil)
637674 else 0
638675 }
639676 else 0
640677 if ((stake2 == stake2))
641678 then nil
642679 else throw("Strict value is not equal to itself.")
643680 }
644681 else throw("Strict value is not equal to itself.")
645682 })
646683
647684
648685 @Verifier(tx)
649686 func verify () = {
650687 let multiSignedByAdmins = {
651688 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
652689 then 1
653690 else 0
654691 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
655692 then 1
656693 else 0
657694 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
658695 then 1
659696 else 0
660697 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
661698 }
662699 match tx {
663700 case inv: InvokeScriptTransaction =>
664701 let callTakeIntoAccount = if ((inv.dApp == this))
665702 then (inv.function == "takeIntoAccountExtraFunds")
666703 else false
667704 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
668705 then true
669706 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
670707 then true
671708 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
672709 then true
673710 else sigVerify(tx.bodyBytes, tx.proofs[0], adminInvokePubKey)
674711 if (if (callTakeIntoAccount)
675712 then signedByAdmin
676713 else false)
677714 then true
678715 else multiSignedByAdmins
679716 case _ =>
680717 multiSignedByAdmins
681718 }
682719 }
683720

github/deemru/w8io/786bc32 
101.52 ms