2022.03.25 18:06 [3044780] smart account 3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m > SELF 0.00000000 Waves

{ "type": 13, "id": "8Qeyc2HUJTbJzgGQQXPL6DMafhpPHVCDAThfvaxsQm1g", "fee": 1400000, "feeAssetId": null, "timestamp": 1648219965757, "version": 2, "chainId": 87, "sender": "3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m", "senderPublicKey": "2BPPD8Gxoasyd41VpVNDTJrhZEaAQBEjZ75ppZ7wMsrY", "proofs": [ "", "2m2DwMV9xKXtyZNnWcxbDSLzKoScx6TLWBAqr22Qy11gbW4CJNe2UTPS7EEkU8jgxd2RvR3YUvCBR2amA2zttwdz", "4uxqdiwkFsRDAn1UFpLpYwUw4CtCXnZ5sAiJvLPZ6VE3PGRuTH3HRXZQg2fupFKXXBtRts1mD8tjZUL9GXY1QyAa" ], "script": "base64:AAIFAAAAAAAAADAIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgASBQoDBAEIEgAAAABWAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAKa2V5VmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAAC2tleUFzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAtrZXlBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAALa2V5QmFsYW5jZUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAALa2V5QmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZUluaXRBAgAAAAxBX2Fzc2V0X2luaXQAAAAAD2tleUJhbGFuY2VJbml0QgIAAAAMQl9hc3NldF9pbml0AAAAAA9rZXlTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABNrZXlTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAPa2V5Rmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAtrU2hhcmVMaW1pdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAALa0Jhc2VQZXJpb2QCAAAAC2Jhc2VfcGVyaW9kAAAAAA1rUGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAAAxrU3RhcnRIZWlnaHQCAAAADHN0YXJ0X2hlaWdodAAAAAATa0ZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAEmtleVVTRE5OU0JUQWRkcmVzcwIAAAAYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAAAAA5rZXlFVVJOQWRkcmVzcwIAAAAUc3Rha2luZ19ldXJuX2FkZHJlc3MAAAAADmtleUxlYXNpbmdQb29sAgAAAA9sZWFzaW5nX2FkZHJlc3MAAAAAEGtleUxlYXNpbmdBbW91bnQCAAAADmxlYXNpbmdfYW1vdW50AAAAAAxrZXlMZWFzaW5nSWQCAAAACmxlYXNpbmdfaWQAAAAAD2tleUFkbWluUHViS2V5MQIAAAALYWRtaW5fcHViXzEAAAAAD2tleUFkbWluUHViS2V5MgIAAAALYWRtaW5fcHViXzIAAAAAD2tleUFkbWluUHViS2V5MwIAAAALYWRtaW5fcHViXzMAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBV4r/CGiaNbpAzWF08hI33qY38Po4zugeOAEAAAALZ2V0QWRtaW5QdWIAAAABAAAAC2tleUFkbWluUHViBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABm9yYWNsZQUAAAALa2V5QWRtaW5QdWIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAGc3RyaW5nBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAABnN0cmluZwQAAAAHbm90aGluZwUAAAAHJG1hdGNoMAkAAAIAAAABAgAAABlBZG1pbiBwdWJsaWMga2V5IGlzIGVtcHR5AAAAAAxhZG1pblB1YktleTEJAQAAAAtnZXRBZG1pblB1YgAAAAEFAAAAD2tleUFkbWluUHViS2V5MQAAAAAMYWRtaW5QdWJLZXkyCQEAAAALZ2V0QWRtaW5QdWIAAAABBQAAAA9rZXlBZG1pblB1YktleTIAAAAADGFkbWluUHViS2V5MwkBAAAAC2dldEFkbWluUHViAAAAAQUAAAAPa2V5QWRtaW5QdWJLZXkzAAAAABRhZG1pblB1YktleVN0YXJ0U3RvcAEAAAAgzlkO3OqzXqOuG/1XXufreRE1KXRGMps8FV88BRsoYXsAAAAAEmFkbWluUHViS2V5U3Rha2luZwEAAAAgsj2fHYY3mleF5iNR9OE3eyOPalgB3T7oDWjAjnR7WCgAAAAADXdhbGxldEFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVcv5F8goQ5NCtA0sa8erNky+83EfVMf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ZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADXN0YWtlZEFtb3VudEEAAAAAEWF2YWlsYWJsZUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1zdGFrZWRBbW91bnRCAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBBQAAAA1zdGFrZWRBbW91bnRBAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRCBQAAAA1zdGFrZWRBbW91bnRCAAAAABBoYXNFbm91Z2hCYWxhbmNlAwkAAGcAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQkAAGcAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgcBAAAADGdldEFzc2V0SW5mbwAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAEAAAACHN0cmluZ0lkCQACWAAAAAEFAAAAAmlkBAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACaWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAACHN0cmluZ0lkAgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAhzdHJpbmdJZAgFAAAABGluZm8AAAAEbmFtZQgFAAAABGluZm8AAAAIZGVjaW1hbHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCQAFFQAAAAMCAAAABVdBVkVTAgAAAAVXQVZFUwAAAAAAAAAACAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwAAAAEAAAAIYXNzZXRTdHIDCQAAAAAAAAIFAAAACGFzc2V0U3RyAgAAAAVXQVZFUwkABRUAAAADAgAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAAAAAAAgEAAAACHN0cmluZ0lkBQAAAAhhc3NldFN0cgQAAAACaWQJAAJZAAAAAQUAAAAIYXNzZXRTdHIEAAAABGluZm8JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAAJpZAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAAIc3RyaW5nSWQCAAAADiBkb2Vzbid0IGV4aXN0CQAFFQAAAAMFAAAACHN0cmluZ0lkCAUAAAAEaW5mbwAAAARuYW1lCAUAAAAEaW5mbwAAAAhkZWNpbWFscwEAAAAHc3VzcGVuZAAAAAEAAAAFY2F1c2UJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACWtleUFjdGl2ZQcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAIa2V5Q2F1c2UFAAAABWNhdXNlBQAAAANuaWwBAAAAGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwAAAAIAAAAFc3Rha2UAAAAHYXNzZXRJZAMFAAAABXN0YWtlAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAARVU0ROCQAFFAAAAAICAAAADGxvY2tOZXV0cmlubwUAAAASc3Rha2luZ1VTRE5BZGRyZXNzCQAFFAAAAAICAAAADHN0YXJ0U3Rha2luZwUAAAASc3Rha2luZ0VVUk5BZGRyZXNzAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAARVU0ROCQAFFAAAAAICAAAADnVubG9ja05ldXRyaW5vBQAAABJzdGFraW5nVVNETkFkZHJlc3MJAAUUAAAAAgIAAAALc3RvcFN0YWtpbmcFAAAAEnN0YWtpbmdFVVJOQWRkcmVzcwEAAAARY2FsY1N0YWtpbmdQYXJhbXMAAAADAAAABXN0YWtlAAAABmFtb3VudAAAAAdhc3NldElkAwUAAAAFc3Rha2UEAAAACyR0MDY1NzY2NjQyCQEAAAAYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAAAAAgUAAAAFc3Rha2UFAAAAB2Fzc2V0SWQEAAAABGNhbGwIBQAAAAskdDA2NTc2NjY0MgAAAAJfMQQAAAALc3Rha2luZ0FkZHIIBQAAAAskdDA2NTc2NjY0MgAAAAJfMgkABRYAAAAEBQAAAARjYWxsBQAAAAtzdGFraW5nQWRkcgUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAdhc3NldElkBQAAAAZhbW91bnQFAAAAA25pbAQAAAALJHQwNjcyODY3OTQJAQAAABhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMAAAACBQAAAAVzdGFrZQUAAAAHYXNzZXRJZAQAAAAEY2FsbAgFAAAACyR0MDY3Mjg2Nzk0AAAAAl8xBAAAAAtzdGFraW5nQWRkcggFAAAACyR0MDY3Mjg2Nzk0AAAAAl8yCQAFFgAAAAQFAAAABGNhbGwFAAAAC3N0YWtpbmdBZGRyCQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAUAAAADbmlsAQAAAA1jYWxjdWxhdGVGZWVzAAAABAAAAAlwbXRBbW91bnQAAAASbWluQW1vdW50VG9SZWNlaXZlAAAACXRva2VuRnJvbQAAAAd0b2tlblRvBAAAABBhbW91bnRXaXRob3V0RmVlCQAAawAAAAMFAAAAB3Rva2VuVG8FAAAACXBtdEFtb3VudAkAAGQAAAACBQAAAAlwbXRBbW91bnQFAAAACXRva2VuRnJvbQQAAAANYW1vdW50V2l0aEZlZQkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAAFGNvbW1pc3Npb25Hb3Zlcm5hbmNlBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkA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b21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVNoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAAMc2hhcmVJc3N1ZUlkBQAAAANuaWwDBQAAAAxmaXJzdEhhcnZlc3QJAAROAAAAAgUAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA9rZXlGaXJzdEhhcnZlc3QFAAAADGZpcnN0SGFydmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0CQAAZAAAAAIFAAAAC3N0YXJ0SGVpZ2h0CQAAaAAAAAIFAAAAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUAAAAMcGVyaW9kTGVuZ3RoBQAAAANuaWwFAAAACWJhc2VFbnRyeQkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEWluaXRXaXRoSW5pdFJhdGlvAAAABQAAAAlhbXRBc3NldEEAAAAJYW10QXNzZXRCAAAAC3N0ckFzc2V0SWRBAAAAC3N0ckFzc2V0SWRCAAAADGZpcnN0SGFydmVzdAQAAAANJHQwMTA4NzYxMDk2MwkBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABBQAAAAtzdHJBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAA0kdDAxMDg3NjEwOTYzAAAAAl8xBAAAAA1wbXRBc3NldE5hbWVBCAUAAAANJHQwMTA4NzYxMDk2MwAAAAJfMgQAAAAMcG10RGVjaW1hbHNBCAUAAAANJHQwMTA4NzYxMDk2MwAAAAJfMwQAAAANJHQwMTA5NjgxMTA1NQkBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABBQAAAAtzdHJBc3NldElkQgQAAAAOcG10U3RyQXNzZXRJZEIIBQAAAA0kdDAxMDk2ODExMDU1AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVCCAUAAAANJHQwMTA5NjgxMTA1NQAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAANJHQwMTA5NjgxMTA1NQAAAAJfMwMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAASYWRtaW5QdWJLZXlTdGFraW5nBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQEAAAAJaXNEZWZpbmVkAAAAAQkABBsAAAACBQAAAAR0aGlzBQAAAAlrZXlBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAAAAAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAC3N0ckFzc2V0SWRCCQAAAgAAAAECAAAAGEFzc2V0cyBtdXN0IGJlIGRpZmZlcmVudAQAAAAJc2hhcmVOYW1lCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAFzCQABLwAAAAIFAAAADXBtdEFzc2V0TmFtZUEAAAAAAAAAAAcCAAAAAV8JAAEvAAAAAgUAAAANcG10QXNzZXROYW1lQgAAAAAAAAAABwQAAAAQc2hhcmVEZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciAFAAAADXBtdEFzc2V0TmFtZUECAAAABSBhbmQgBQAAAA1wbXRBc3NldE5hbWVCAgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAEdGhpcwQAAAANc2hhcmVEZWNpbWFscwkAAGkAAAACCQAAZAAAAAIFAAAADHBtdERlY2ltYWxzQQUAAAAMcG10RGVjaW1hbHNCAAAAAAAAAAACBAAAABJzaGFyZUluaXRpYWxTdXBwbHkAAAAAAAAAAAAEAAAACnNoYXJlSXNzdWUJAARCAAAABQUAAAAJc2hhcmVOYW1lBQAAABBzaGFyZURlc2NyaXB0aW9uBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADXNoYXJlRGVjaW1hbHMGBAAAAAxzaGFyZUlzc3VlSWQJAAQ4AAAAAQUAAAAKc2hhcmVJc3N1ZQQAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACmtleVZlcnNpb24FAAAAB3ZlcnNpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACWtleUFjdGl2ZQYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALa2V5QXNzZXRJZEEFAAAADnBtdFN0ckFzc2V0SWRBCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa2V5QmFsYW5jZUluaXRBBQAAAAlhbXRBc3NldEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tleUJhbGFuY2VJbml0QgUAAAAJYW10QXNzZXRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtleUNvbW1pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyCQAETAAAAAIFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAPa2V5U2hhcmVBc3NldElkCQACWAAAAAEFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAANuaWwDBQAAAAxmaXJzdEhhcnZlc3QJAAROAAAAAgUAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA9rZXlGaXJzdEhhcnZlc3QFAAAADGZpcnN0SGFydmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0CQAAZAAAAAIFAAAAC3N0YXJ0SGVpZ2h0CQAAaAAAAAIFAAAAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUAAAAMcGVyaW9kTGVuZ3RoBQAAAANuaWwFAAAACWJhc2VFbnRyeQAAAAFpAQAAABhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QAAAABAAAACnNoYXJlTGltaXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAADCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEmFkbWluUHViS2V5U3Rha2luZwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrU2hhcmVMaW1pdAUAAAAKc2hhcmVMaW1pdAUAAAADbmlsAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tl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cmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAUgYW5kIAUAAAALc3RyQXNzZXRJZEIDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMJAAAAAAAAAgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRBBQAAAAtwbXRBc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEIFAAAAC3BtdEFzc2V0SWRCBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAEAAAABnN0YWtlMQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA5wbXRTdHJBc3NldElkQQkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAAKcG10QW1vdW50QQkABEwAAAACBQAAAA5wbXRTdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAAOcG10U3RyQXNzZXRJZEIJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACnBtdEFtb3VudEIJAARMAAAAAgUAAAAOcG10U3RyQXNzZXRJZEIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAh3aXRoZHJhdwAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAADSR0MDE2NDg4MTY1NjMJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNjQ4ODE2NTYzAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTY0ODgxNjU2MwAAAAJfMgQAAAAMYW1vdW50VG9QYXlBCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUEFAAAAEHNoYXJlQXNzZXRTdXBwbHkEAAAADGFtb3VudFRvUGF5QgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VCBQAAABBzaGFyZUFzc2V0U3VwcGx5AwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAABAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAADGFtb3VudFRvUGF5QQkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEIJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAADGFtb3VudFRvUGF5QgkABEwAAAACBQAAAAtzdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAAMYW1vdW50VG9QYXlBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAMYW1vdW50VG9QYXlCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZQAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlBBQAAAAhhc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QgUAAAAIYXNzZXRJZEIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACGV4Y2hhbmdlAAAAAQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAADSR0MDE3ODY4MTc5NDMJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNzg2ODE3OTQzAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTc4NjgxNzk0MwAAAAJfMgMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAABgkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAkAAAIAAAABAgAAACBDYW4ndCBleGNoYW5nZSB3aXRoIHplcm8gYmFsYW5jZQMJAABnAAAAAgAAAAAAAAAAAAUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgIAAAA0TWluaW1hbCBhbW91bnQgdG8gcmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQgQAAAANJHQwMTg0OTQxODYxNgkBAAAADWNhbGN1bGF0ZUZlZXMAAAAEBQAAAAlwbXRBbW91bnQFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMTg0OTQxODYxNgAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDE4NDk0MTg2MTYAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAxODQ5NDE4NjE2AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BAAAAAtuZXdCYWxhbmNlQgkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkBAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACXBtdEFtb3VudAkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEIJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIJAABkAAAAAgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABEwAAAACBQAAAAtzdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXdhbGxldEFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQQQAAAANJHQwMTk1NzExOTY5MwkBAAAADWNhbGN1bGF0ZUZlZXMAAAAEBQAAAAlwbXRBbW91bnQFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAIYmFsYW5jZUIFAAAACGJhbGFuY2VBBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMTk1NzExOTY5MwAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDE5NTcxMTk2OTMAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAxOTU3MTE5NjkzAAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA1hbW91bnRXaXRoRmVlBQAAABBn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Z1Bvb2wCAAAAGU5vIGxlYXNpbmcgcG9vbCBpbiBvcmFjbGUEAAAACWxlYXNpbmdJZAkABBwAAAACBQAAAAR0aGlzBQAAAAxrZXlMZWFzaW5nSWQEAAAADWxlYXNpbmdBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAQa2V5TGVhc2luZ0Ftb3VudAAAAAAAAAAAAAQAAAAObmV3TGVhc2VBbW91bnQDBQAAAAVzdGFrZQkAAGQAAAACBQAAAA1sZWFzaW5nQW1vdW50BQAAAAZhbW91bnQJAABlAAAAAgUAAAANbGVhc2luZ0Ftb3VudAUAAAAGYW1vdW50BAAAAAhuZXdMZWFzZQkABEQAAAACBQAAAARwb29sBQAAAA5uZXdMZWFzZUFtb3VudAQAAAAKbmV3TGVhc2VJZAkABDkAAAABBQAAAAhuZXdMZWFzZQQAAAAIYmFzZUV0cnkJAARMAAAAAgUAAAAIbmV3TGVhc2UJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAAMa2V5TGVhc2luZ0lkBQAAAApuZXdMZWFzZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBrZXlMZWFzaW5nQW1vdW50BQAAAA5uZXdMZWFzZUFtb3VudAUAAAADbmlsBAAAAAckbWF0Y2gwBQAAAAlsZWFzaW5nSWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAA2xJZAUAAAAHJG1hdGNoMAkABE4AAAACCQAETAAAAAIJAQAAAAtMZWFzZUNhbmNlbAAAAAEFAAAAA2xJZAUAAAADbmlsBQAAAAhiYXNlRXRyeQUAAAAIYmFzZUV0cnkEAAAADSR0MDIzNDI2MjM1MjkJAQAAABFjYWxjU3Rha2luZ1BhcmFtcwAAAAMFAAAABXN0YWtlBQAAAAZhbW91bnQJAAJZAAAAAQUAAAANYXNzZXRJZFN0cmluZwQAAAAEY2FsbAgFAAAADSR0MDIzNDI2MjM1MjkAAAACXzEEAAAABGFkZHIIBQAAAA0kdDAyMzQyNjIzNTI5AAAAAl8yBAAAAAZwYXJhbXMIBQAAAA0kdDAyMzQyNjIzNTI5AAAAAl8zBAAAAAhwYXltZW50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", "height": 3044780, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JCeMEWEkMGrEXsVkBhPJjw2Umytsf6Dreae7rNpMGndx Next: 6jp3euB1ancrW9egBWvAvuoTqeMFP7Hauq3SKG6UBB4n Diff:
OldNewDifferences
8585
8686 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
8787
88-let NSBT = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
89-
9088 let SWOP = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
9189
9290 let EURN = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
9391
94-let stakingAssets = ["WAVES", toBase58String(USDN), toBase58String(NSBT), toBase58String(EURN)]
92+let stakingAssets = ["WAVES", toBase58String(USDN), toBase58String(EURN)]
9593
96-let stakingUSDNNSBTAddress = Address(fromBase58String(valueOrErrorMessage(getString(oracle, keyUSDNNSBTAddress), "no usdn staking address")))
94+let stakingUSDNAddress = Address(fromBase58String(valueOrErrorMessage(getString(oracle, keyUSDNNSBTAddress), "no usdn staking address")))
9795
9896 let stakingEURNAddress = Address(fromBase58String(valueOrErrorMessage(getString(oracle, keyEURNAddress), "no eurn staking address")))
9997
10098 let USDNToWavesExchanger = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
101-
102-let USDNToNSBTExchanger = Address(base58'3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m')
10399
104100 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
105101
176172 func stakedAmount (assetId) = {
177173 let stakedAmountCalculated = match assetId {
178174 case aId: ByteVector =>
179- if (if ((aId == USDN))
180- then true
181- else (aId == NSBT))
182- then getInteger(stakingUSDNNSBTAddress, ((("rpd_balance_" + toBase58String(aId)) + "_") + toString(this)))
175+ if ((aId == USDN))
176+ then getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(aId)) + "_") + toString(this)))
183177 else if ((aId == EURN))
184178 then getInteger(stakingEURNAddress, ((("%s%s%s__stakingBalance__" + toBase58String(aId)) + "__") + toString(this)))
185179 else 0
244238
245239 func calcStakingFuncAndAddres (stake,assetId) = if (stake)
246240 then if ((assetId == USDN))
247- then $Tuple2("lockNeutrino", stakingUSDNNSBTAddress)
248- else if ((assetId == NSBT))
249- then $Tuple2("lockNsbt", stakingUSDNNSBTAddress)
250- else $Tuple2("startStaking", stakingEURNAddress)
241+ then $Tuple2("lockNeutrino", stakingUSDNAddress)
242+ else $Tuple2("startStaking", stakingEURNAddress)
251243 else if ((assetId == USDN))
252- then $Tuple2("unlockNeutrino", stakingUSDNNSBTAddress)
253- else if ((assetId == NSBT))
254- then $Tuple2("unlockNsbt", stakingUSDNNSBTAddress)
255- else $Tuple2("stopStaking", stakingEURNAddress)
244+ then $Tuple2("unlockNeutrino", stakingUSDNAddress)
245+ else $Tuple2("stopStaking", stakingEURNAddress)
256246
257247
258248 func calcStakingParams (stake,amount,assetId) = if (stake)
259249 then {
260- let $t069236989 = calcStakingFuncAndAddres(stake, assetId)
261- let call = $t069236989._1
262- let stakingAddr = $t069236989._2
250+ let $t065766642 = calcStakingFuncAndAddres(stake, assetId)
251+ let call = $t065766642._1
252+ let stakingAddr = $t065766642._2
263253 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
264254 }
265255 else {
266- let $t070757141 = calcStakingFuncAndAddres(stake, assetId)
267- let call = $t070757141._1
268- let stakingAddr = $t070757141._2
256+ let $t067286794 = calcStakingFuncAndAddres(stake, assetId)
257+ let call = $t067286794._1
258+ let stakingAddr = $t067286794._2
269259 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
270260 }
271261
290280
291281 @Callable(i)
292282 func init (firstHarvest) = {
293- let $t083118388 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
294- let pmtAmountA = $t083118388._1
295- let pmtAssetIdA = $t083118388._2
296- let $t083938470 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
297- let pmtAmountB = $t083938470._1
298- let pmtAssetIdB = $t083938470._2
299- let $t084758552 = getAssetInfo(pmtAssetIdA)
300- let pmtStrAssetIdA = $t084758552._1
301- let pmtAssetNameA = $t084758552._2
302- let pmtDecimalsA = $t084758552._3
303- let $t085578634 = getAssetInfo(pmtAssetIdB)
304- let pmtStrAssetIdB = $t085578634._1
305- let pmtAssetNameB = $t085578634._2
306- let pmtDecimalsB = $t085578634._3
283+ let $t079648041 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
284+ let pmtAmountA = $t079648041._1
285+ let pmtAssetIdA = $t079648041._2
286+ let $t080468123 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
287+ let pmtAmountB = $t080468123._1
288+ let pmtAssetIdB = $t080468123._2
289+ let $t081288205 = getAssetInfo(pmtAssetIdA)
290+ let pmtStrAssetIdA = $t081288205._1
291+ let pmtAssetNameA = $t081288205._2
292+ let pmtDecimalsA = $t081288205._3
293+ let $t082108287 = getAssetInfo(pmtAssetIdB)
294+ let pmtStrAssetIdB = $t082108287._1
295+ let pmtAssetNameB = $t082108287._2
296+ let pmtDecimalsB = $t082108287._3
307297 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStaking], i.callerPublicKey)))
308298 then throw("Only admin can call this function")
309299 else if (isDefined(getBoolean(this, keyActive)))
345335
346336 @Callable(i)
347337 func initWithInitRatio (amtAssetA,amtAssetB,strAssetIdA,strAssetIdB,firstHarvest) = {
348- let $t01122311310 = getAssetInfoFromString(strAssetIdA)
349- let pmtStrAssetIdA = $t01122311310._1
350- let pmtAssetNameA = $t01122311310._2
351- let pmtDecimalsA = $t01122311310._3
352- let $t01131511402 = getAssetInfoFromString(strAssetIdB)
353- let pmtStrAssetIdB = $t01131511402._1
354- let pmtAssetNameB = $t01131511402._2
355- let pmtDecimalsB = $t01131511402._3
338+ let $t01087610963 = getAssetInfoFromString(strAssetIdA)
339+ let pmtStrAssetIdA = $t01087610963._1
340+ let pmtAssetNameA = $t01087610963._2
341+ let pmtDecimalsA = $t01087610963._3
342+ let $t01096811055 = getAssetInfoFromString(strAssetIdB)
343+ let pmtStrAssetIdB = $t01096811055._1
344+ let pmtAssetNameB = $t01096811055._2
345+ let pmtDecimalsB = $t01096811055._3
356346 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStaking], i.callerPublicKey)))
357347 then throw("Only admin can call this function")
358348 else if (isDefined(getBoolean(this, keyActive)))
388378 let pmtAssetIdB = i.payments[1].assetId
389379 let pmtAmountA = i.payments[0].amount
390380 let pmtAmountB = i.payments[1].amount
391- let $t01387013947 = getAssetInfo(pmtAssetIdA)
392- let pmtStrAssetIdA = $t01387013947._1
393- let pmtAssetNameA = $t01387013947._2
394- let pmtDecimalsA = $t01387013947._3
395- let $t01395214029 = getAssetInfo(pmtAssetIdB)
396- let pmtStrAssetIdB = $t01395214029._1
397- let pmtAssetNameB = $t01395214029._2
398- let pmtDecimalsB = $t01395214029._3
381+ let $t01352313600 = getAssetInfo(pmtAssetIdA)
382+ let pmtStrAssetIdA = $t01352313600._1
383+ let pmtAssetNameA = $t01352313600._2
384+ let pmtDecimalsA = $t01352313600._3
385+ let $t01360513682 = getAssetInfo(pmtAssetIdB)
386+ let pmtStrAssetIdB = $t01360513682._1
387+ let pmtAssetNameB = $t01360513682._2
388+ let pmtDecimalsB = $t01360513682._3
399389 let inital = if (if ((balanceA == 0))
400390 then (balanceB == 0)
401391 else false)
447437
448438 @Callable(i)
449439 func withdraw () = valueOrElse(isActive(), {
450- let $t01683516910 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
451- let pmtAmount = $t01683516910._1
452- let pmtAssetId = $t01683516910._2
440+ let $t01648816563 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
441+ let pmtAmount = $t01648816563._1
442+ let pmtAssetId = $t01648816563._2
453443 let amountToPayA = fraction(pmtAmount, balanceA, shareAssetSupply)
454444 let amountToPayB = fraction(pmtAmount, balanceB, shareAssetSupply)
455445 if ((size(i.payments) != 1))
479469
480470 @Callable(i)
481471 func exchange (minAmountToReceive) = valueOrElse(isActive(), {
482- let $t01821618291 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
483- let pmtAmount = $t01821618291._1
484- let pmtAssetId = $t01821618291._2
472+ let $t01786817943 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
473+ let pmtAmount = $t01786817943._1
474+ let pmtAssetId = $t01786817943._2
485475 if (if ((balanceA == 0))
486476 then true
487477 else (balanceB == 0))
495485 else if ((pmtAssetId == assetIdA))
496486 then {
497487 let assetIdSend = assetIdB
498- let $t01884618968 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB)
499- let amountWithoutFee = $t01884618968._1
500- let amountWithFee = $t01884618968._2
501- let governanceReward = $t01884618968._3
488+ let $t01849418616 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB)
489+ let amountWithoutFee = $t01849418616._1
490+ let amountWithFee = $t01849418616._2
491+ let governanceReward = $t01849418616._3
502492 let newBalanceA = (balanceA + pmtAmount)
503493 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
504494 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
518508 else if ((pmtAssetId == assetIdB))
519509 then {
520510 let assetIdSend = assetIdA
521- let $t01992320045 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA)
522- let amountWithoutFee = $t01992320045._1
523- let amountWithFee = $t01992320045._2
524- let governanceReward = $t01992320045._3
511+ let $t01957119693 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA)
512+ let amountWithoutFee = $t01957119693._1
513+ let amountWithFee = $t01957119693._2
514+ let governanceReward = $t01957119693._3
525515 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
526516 let newBalanceB = (balanceB + pmtAmount)
527517 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
616606 }
617607 }
618608 else {
619- let $t02377923882 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
620- let call = $t02377923882._1
621- let addr = $t02377923882._2
622- let params = $t02377923882._3
623- let payments = $t02377923882._4
609+ let $t02342623529 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
610+ let call = $t02342623529._1
611+ let addr = $t02342623529._2
612+ let params = $t02342623529._3
613+ let payments = $t02342623529._4
624614 let inv = invoke(addr, call, params, payments)
625615 if ((inv == inv))
626616 then nil
681671 let exchangeToWaves = if (if (if ((inv.dApp == USDNToWavesExchanger))
682672 then (inv.function == "exchange")
683673 else false)
684- then (assetIdA == USDN)
674+ then (size(inv.payments) == 1)
685675 else false)
686- then true
687- else if (if ((assetIdB == USDN))
688- then (size(inv.payments) == 1)
689- else false)
690- then (inv.payments[0].assetId == USDN)
691- else false
692- let exchangeToNSBTs = if (if (if ((inv.dApp == USDNToNSBTExchanger))
693- then (inv.function == "exchange")
694- else false)
695- then (assetIdA == NSBT)
696- else false)
697- then true
698- else if (if ((assetIdB == NSBT))
699- then (size(inv.payments) == 1)
700- else false)
701- then (inv.payments[0].assetId == USDN)
702- else false
676+ then if ((inv.payments[0].assetId == USDN))
677+ then true
678+ else (inv.payments[0].assetId == unit)
679+ else false
703680 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
704681 then true
705682 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
707684 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
708685 then true
709686 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
710- if (if (if (if (callTakeIntoAccount)
687+ if (if (if (callTakeIntoAccount)
711688 then true
712689 else exchangeToWaves)
713- then true
714- else exchangeToNSBTs)
715690 then signedByAdmin
716691 else false)
717692 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
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 keyBalanceInitA = "A_asset_init"
1919
2020 let keyBalanceInitB = "B_asset_init"
2121
2222 let keyShareAssetId = "share_asset_id"
2323
2424 let keyShareAssetSupply = "share_asset_supply"
2525
2626 let keyCommission = "commission"
2727
2828 let keyCommissionScaleDelimiter = "commission_scale_delimiter"
2929
3030 let keyCause = "shutdown_cause"
3131
3232 let keyFirstHarvest = "first_harvest"
3333
3434 let keyFirstHarvestHeight = "first_harvest_height"
3535
3636 let kShareLimit = "share_limit_on_first_harvest"
3737
3838 let kBasePeriod = "base_period"
3939
4040 let kPeriodLength = "period_length"
4141
4242 let kStartHeight = "start_height"
4343
4444 let kFirstHarvestHeight = "first_harvest_height"
4545
4646 let keyUSDNNSBTAddress = "staking_usdnnsbt_address"
4747
4848 let keyEURNAddress = "staking_eurn_address"
4949
5050 let keyLeasingPool = "leasing_address"
5151
5252 let keyLeasingAmount = "leasing_amount"
5353
5454 let keyLeasingId = "leasing_id"
5555
5656 let keyAdminPubKey1 = "admin_pub_1"
5757
5858 let keyAdminPubKey2 = "admin_pub_2"
5959
6060 let keyAdminPubKey3 = "admin_pub_3"
6161
6262 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
6363
6464 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
6565 case string: String =>
6666 fromBase58String(string)
6767 case nothing =>
6868 throw("Admin public key is empty")
6969 }
7070
7171
7272 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
7373
7474 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
7575
7676 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
7777
7878 let adminPubKeyStartStop = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
7979
8080 let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
8181
8282 let walletAddress = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
8383
8484 let votingAddress = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8585
8686 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
8787
88-let NSBT = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
89-
9088 let SWOP = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
9189
9290 let EURN = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
9391
94-let stakingAssets = ["WAVES", toBase58String(USDN), toBase58String(NSBT), toBase58String(EURN)]
92+let stakingAssets = ["WAVES", toBase58String(USDN), toBase58String(EURN)]
9593
96-let stakingUSDNNSBTAddress = Address(fromBase58String(valueOrErrorMessage(getString(oracle, keyUSDNNSBTAddress), "no usdn staking address")))
94+let stakingUSDNAddress = Address(fromBase58String(valueOrErrorMessage(getString(oracle, keyUSDNNSBTAddress), "no usdn staking address")))
9795
9896 let stakingEURNAddress = Address(fromBase58String(valueOrErrorMessage(getString(oracle, keyEURNAddress), "no eurn staking address")))
9997
10098 let USDNToWavesExchanger = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
101-
102-let USDNToNSBTExchanger = Address(base58'3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m')
10399
104100 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
105101
106102 let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
107103
108104 let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
109105
110106 let firstHarvestEndPeriod = ((basePeriod + ((height - startHeight) / periodLength)) + 3)
111107
112108 let active = getBooleanValue(this, keyActive)
113109
114110 let strAssetIdA = getStringValue(this, keyAssetIdA)
115111
116112 let strAssetIdB = getStringValue(this, keyAssetIdB)
117113
118114 let assetIdA = if ((strAssetIdA == "WAVES"))
119115 then unit
120116 else fromBase58String(strAssetIdA)
121117
122118 let assetIdB = if ((strAssetIdB == "WAVES"))
123119 then unit
124120 else fromBase58String(strAssetIdB)
125121
126122 let assetNameA = match assetIdA {
127123 case id: ByteVector =>
128124 value(assetInfo(id)).name
129125 case waves: Unit =>
130126 "WAVES"
131127 case _ =>
132128 throw("Match error")
133129 }
134130
135131 let assetNameB = match assetIdB {
136132 case id: ByteVector =>
137133 value(assetInfo(id)).name
138134 case waves: Unit =>
139135 "WAVES"
140136 case _ =>
141137 throw("Match error")
142138 }
143139
144140 let balanceA = getIntegerValue(this, keyBalanceA)
145141
146142 let balanceB = getIntegerValue(this, keyBalanceB)
147143
148144 let shareAssetId = fromBase58String(getStringValue(this, keyShareAssetId))
149145
150146 let shareAssetSupply = getIntegerValue(this, keyShareAssetSupply)
151147
152148 let commission = 3000
153149
154150 let commissionGovernance = 1200
155151
156152 let commissionScaleDelimiter = 1000000
157153
158154 let scaleValue3 = 1000
159155
160156 let scaleValue8 = 100000000
161157
162158 let slippageToleranceDelimiter = 1000
163159
164160 let scaleValue8Digits = 8
165161
166162 func accountBalance (assetId) = match assetId {
167163 case id: ByteVector =>
168164 assetBalance(this, id)
169165 case waves: Unit =>
170166 wavesBalance(this).available
171167 case _ =>
172168 throw("Match error")
173169 }
174170
175171
176172 func stakedAmount (assetId) = {
177173 let stakedAmountCalculated = match assetId {
178174 case aId: ByteVector =>
179- if (if ((aId == USDN))
180- then true
181- else (aId == NSBT))
182- then getInteger(stakingUSDNNSBTAddress, ((("rpd_balance_" + toBase58String(aId)) + "_") + toString(this)))
175+ if ((aId == USDN))
176+ then getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(aId)) + "_") + toString(this)))
183177 else if ((aId == EURN))
184178 then getInteger(stakingEURNAddress, ((("%s%s%s__stakingBalance__" + toBase58String(aId)) + "__") + toString(this)))
185179 else 0
186180 case _: Unit =>
187181 valueOrElse(getInteger(this, keyLeasingAmount), 0)
188182 case _ =>
189183 throw("Match error")
190184 }
191185 match stakedAmountCalculated {
192186 case i: Int =>
193187 i
194188 case _ =>
195189 0
196190 }
197191 }
198192
199193
200194 let stakedAmountA = stakedAmount(assetIdA)
201195
202196 let stakedAmountB = stakedAmount(assetIdB)
203197
204198 let assetInitA = getIntegerValue(this, keyBalanceInitA)
205199
206200 let assetInitB = getIntegerValue(this, keyBalanceInitB)
207201
208202 let availableBalanceA = (balanceA - stakedAmountA)
209203
210204 let availableBalanceB = (balanceB - stakedAmountB)
211205
212206 let accountBalanceWithStakedA = (accountBalance(assetIdA) + stakedAmountA)
213207
214208 let accountBalanceWithStakedB = (accountBalance(assetIdB) + stakedAmountB)
215209
216210 let hasEnoughBalance = if ((accountBalanceWithStakedA >= balanceA))
217211 then (accountBalanceWithStakedB >= balanceB)
218212 else false
219213
220214 func getAssetInfo (assetId) = match assetId {
221215 case id: ByteVector =>
222216 let stringId = toBase58String(id)
223217 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
224218 $Tuple3(stringId, info.name, info.decimals)
225219 case waves: Unit =>
226220 $Tuple3("WAVES", "WAVES", 8)
227221 case _ =>
228222 throw("Match error")
229223 }
230224
231225
232226 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
233227 then $Tuple3("WAVES", "WAVES", 8)
234228 else {
235229 let stringId = assetStr
236230 let id = fromBase58String(assetStr)
237231 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
238232 $Tuple3(stringId, info.name, info.decimals)
239233 }
240234
241235
242236 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
243237
244238
245239 func calcStakingFuncAndAddres (stake,assetId) = if (stake)
246240 then if ((assetId == USDN))
247- then $Tuple2("lockNeutrino", stakingUSDNNSBTAddress)
248- else if ((assetId == NSBT))
249- then $Tuple2("lockNsbt", stakingUSDNNSBTAddress)
250- else $Tuple2("startStaking", stakingEURNAddress)
241+ then $Tuple2("lockNeutrino", stakingUSDNAddress)
242+ else $Tuple2("startStaking", stakingEURNAddress)
251243 else if ((assetId == USDN))
252- then $Tuple2("unlockNeutrino", stakingUSDNNSBTAddress)
253- else if ((assetId == NSBT))
254- then $Tuple2("unlockNsbt", stakingUSDNNSBTAddress)
255- else $Tuple2("stopStaking", stakingEURNAddress)
244+ then $Tuple2("unlockNeutrino", stakingUSDNAddress)
245+ else $Tuple2("stopStaking", stakingEURNAddress)
256246
257247
258248 func calcStakingParams (stake,amount,assetId) = if (stake)
259249 then {
260- let $t069236989 = calcStakingFuncAndAddres(stake, assetId)
261- let call = $t069236989._1
262- let stakingAddr = $t069236989._2
250+ let $t065766642 = calcStakingFuncAndAddres(stake, assetId)
251+ let call = $t065766642._1
252+ let stakingAddr = $t065766642._2
263253 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
264254 }
265255 else {
266- let $t070757141 = calcStakingFuncAndAddres(stake, assetId)
267- let call = $t070757141._1
268- let stakingAddr = $t070757141._2
256+ let $t067286794 = calcStakingFuncAndAddres(stake, assetId)
257+ let call = $t067286794._1
258+ let stakingAddr = $t067286794._2
269259 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
270260 }
271261
272262
273263 func calculateFees (pmtAmount,minAmountToReceive,tokenFrom,tokenTo) = {
274264 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
275265 let amountWithFee = fraction(amountWithoutFee, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
276266 let governanceReward = fraction(amountWithoutFee, commissionGovernance, commissionScaleDelimiter)
277267 if ((minAmountToReceive > amountWithFee))
278268 then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive)))
279269 else $Tuple3(amountWithoutFee, amountWithFee, governanceReward)
280270 }
281271
282272
283273 func suspendSuspicious () = suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(accountBalanceWithStakedA)) + " ") + assetNameA) + ", ") + toString(accountBalanceWithStakedB)) + " ") + assetNameB) + ". State: ") + toString(balanceA)) + " ") + assetNameA) + ", ") + toString(balanceB)) + " ") + assetNameB))
284274
285275
286276 func isActive () = if (active)
287277 then unit
288278 else throw("DApp is inactive at this moment")
289279
290280
291281 @Callable(i)
292282 func init (firstHarvest) = {
293- let $t083118388 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
294- let pmtAmountA = $t083118388._1
295- let pmtAssetIdA = $t083118388._2
296- let $t083938470 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
297- let pmtAmountB = $t083938470._1
298- let pmtAssetIdB = $t083938470._2
299- let $t084758552 = getAssetInfo(pmtAssetIdA)
300- let pmtStrAssetIdA = $t084758552._1
301- let pmtAssetNameA = $t084758552._2
302- let pmtDecimalsA = $t084758552._3
303- let $t085578634 = getAssetInfo(pmtAssetIdB)
304- let pmtStrAssetIdB = $t085578634._1
305- let pmtAssetNameB = $t085578634._2
306- let pmtDecimalsB = $t085578634._3
283+ let $t079648041 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
284+ let pmtAmountA = $t079648041._1
285+ let pmtAssetIdA = $t079648041._2
286+ let $t080468123 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
287+ let pmtAmountB = $t080468123._1
288+ let pmtAssetIdB = $t080468123._2
289+ let $t081288205 = getAssetInfo(pmtAssetIdA)
290+ let pmtStrAssetIdA = $t081288205._1
291+ let pmtAssetNameA = $t081288205._2
292+ let pmtDecimalsA = $t081288205._3
293+ let $t082108287 = getAssetInfo(pmtAssetIdB)
294+ let pmtStrAssetIdB = $t082108287._1
295+ let pmtAssetNameB = $t082108287._2
296+ let pmtDecimalsB = $t082108287._3
307297 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStaking], i.callerPublicKey)))
308298 then throw("Only admin can call this function")
309299 else if (isDefined(getBoolean(this, keyActive)))
310300 then throw("DApp is already active")
311301 else if ((pmtAssetIdA == pmtAssetIdB))
312302 then throw("Assets must be different")
313303 else {
314304 let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
315305 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
316306 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
317307 let arg1 = pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN)
318308 let arg2 = pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN)
319309 let arg3 = pow(10, 0, shareDecimals, 0, 0, DOWN)
320310 let shareInitialSupply = fraction(arg1, arg2, arg3)
321311 let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
322312 let shareIssueId = calculateAssetId(shareIssue)
323313 let stake1 = if (containsElement(stakingAssets, pmtStrAssetIdA))
324314 then invoke(this, "stakeUnstake", [true, pmtAmountA, pmtStrAssetIdA], nil)
325315 else 0
326316 if ((stake1 == stake1))
327317 then {
328318 let stake2 = if (containsElement(stakingAssets, pmtStrAssetIdB))
329319 then invoke(this, "stakeUnstake", [true, pmtAmountB, pmtStrAssetIdB], nil)
330320 else 0
331321 if ((stake2 == stake2))
332322 then {
333323 let baseEntry = [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)]
334324 if (firstHarvest)
335325 then (baseEntry ++ [BooleanEntry(keyFirstHarvest, firstHarvest), IntegerEntry(keyFirstHarvestHeight, (startHeight + (firstHarvestEndPeriod * periodLength)))])
336326 else baseEntry
337327 }
338328 else throw("Strict value is not equal to itself.")
339329 }
340330 else throw("Strict value is not equal to itself.")
341331 }
342332 }
343333
344334
345335
346336 @Callable(i)
347337 func initWithInitRatio (amtAssetA,amtAssetB,strAssetIdA,strAssetIdB,firstHarvest) = {
348- let $t01122311310 = getAssetInfoFromString(strAssetIdA)
349- let pmtStrAssetIdA = $t01122311310._1
350- let pmtAssetNameA = $t01122311310._2
351- let pmtDecimalsA = $t01122311310._3
352- let $t01131511402 = getAssetInfoFromString(strAssetIdB)
353- let pmtStrAssetIdB = $t01131511402._1
354- let pmtAssetNameB = $t01131511402._2
355- let pmtDecimalsB = $t01131511402._3
338+ let $t01087610963 = getAssetInfoFromString(strAssetIdA)
339+ let pmtStrAssetIdA = $t01087610963._1
340+ let pmtAssetNameA = $t01087610963._2
341+ let pmtDecimalsA = $t01087610963._3
342+ let $t01096811055 = getAssetInfoFromString(strAssetIdB)
343+ let pmtStrAssetIdB = $t01096811055._1
344+ let pmtAssetNameB = $t01096811055._2
345+ let pmtDecimalsB = $t01096811055._3
356346 if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStaking], i.callerPublicKey)))
357347 then throw("Only admin can call this function")
358348 else if (isDefined(getBoolean(this, keyActive)))
359349 then throw("DApp is already active")
360350 else if ((strAssetIdA == strAssetIdB))
361351 then throw("Assets must be different")
362352 else {
363353 let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
364354 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
365355 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
366356 let shareInitialSupply = 0
367357 let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
368358 let shareIssueId = calculateAssetId(shareIssue)
369359 let baseEntry = [StringEntry(keyVersion, version), BooleanEntry(keyActive, true), StringEntry(keyAssetIdA, pmtStrAssetIdA), StringEntry(keyAssetIdB, pmtStrAssetIdB), IntegerEntry(keyBalanceInitA, amtAssetA), IntegerEntry(keyBalanceInitB, amtAssetB), IntegerEntry(keyBalanceA, 0), IntegerEntry(keyBalanceB, 0), IntegerEntry(keyCommission, commission), IntegerEntry(keyCommissionScaleDelimiter, commissionScaleDelimiter), shareIssue, StringEntry(keyShareAssetId, toBase58String(shareIssueId)), IntegerEntry(keyShareAssetSupply, shareInitialSupply)]
370360 if (firstHarvest)
371361 then (baseEntry ++ [BooleanEntry(keyFirstHarvest, firstHarvest), IntegerEntry(keyFirstHarvestHeight, (startHeight + (firstHarvestEndPeriod * periodLength)))])
372362 else baseEntry
373363 }
374364 }
375365
376366
377367
378368 @Callable(i)
379369 func keepLimitForFirstHarvest (shareLimit) = valueOrElse(isActive(), if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStaking], i.callerPublicKey)))
380370 then throw("Only admin can call this function")
381371 else [IntegerEntry(kShareLimit, shareLimit)])
382372
383373
384374
385375 @Callable(i)
386376 func replenishWithTwoTokens (slippageTolerance) = valueOrElse(isActive(), {
387377 let pmtAssetIdA = i.payments[0].assetId
388378 let pmtAssetIdB = i.payments[1].assetId
389379 let pmtAmountA = i.payments[0].amount
390380 let pmtAmountB = i.payments[1].amount
391- let $t01387013947 = getAssetInfo(pmtAssetIdA)
392- let pmtStrAssetIdA = $t01387013947._1
393- let pmtAssetNameA = $t01387013947._2
394- let pmtDecimalsA = $t01387013947._3
395- let $t01395214029 = getAssetInfo(pmtAssetIdB)
396- let pmtStrAssetIdB = $t01395214029._1
397- let pmtAssetNameB = $t01395214029._2
398- let pmtDecimalsB = $t01395214029._3
381+ let $t01352313600 = getAssetInfo(pmtAssetIdA)
382+ let pmtStrAssetIdA = $t01352313600._1
383+ let pmtAssetNameA = $t01352313600._2
384+ let pmtDecimalsA = $t01352313600._3
385+ let $t01360513682 = getAssetInfo(pmtAssetIdB)
386+ let pmtStrAssetIdB = $t01360513682._1
387+ let pmtAssetNameB = $t01360513682._2
388+ let pmtDecimalsB = $t01360513682._3
399389 let inital = if (if ((balanceA == 0))
400390 then (balanceB == 0)
401391 else false)
402392 then true
403393 else false
404394 let tokenRatio = if (inital)
405395 then fraction(fraction(assetInitA, scaleValue8, pmtAmountA), scaleValue3, fraction(assetInitB, scaleValue8, pmtAmountB))
406396 else fraction(fraction(balanceA, scaleValue8, pmtAmountA), scaleValue3, fraction(balanceB, scaleValue8, pmtAmountB))
407397 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
408398 let shareTokenToPayAmount = if (inital)
409399 then fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN), pow(10, 0, shareDecimals, 0, 0, DOWN))
410400 else fraction(min([fraction(pmtAmountA, scaleValue8, balanceA), fraction(pmtAmountB, scaleValue8, balanceB)]), shareAssetSupply, scaleValue8)
411401 if (if ((0 > slippageTolerance))
412402 then true
413403 else (slippageTolerance > slippageToleranceDelimiter))
414404 then throw(((("Slippage tolerance must be between 0 and " + toString(slippageToleranceDelimiter)) + " inclusively. Actual: ") + toString(slippageTolerance)))
415405 else if ((size(i.payments) != 2))
416406 then throw("Two attached assets expected")
417407 else if (if ((pmtAssetIdA != assetIdA))
418408 then true
419409 else (pmtAssetIdB != assetIdB))
420410 then throw(((("Incorrect assets attached. Expected: " + strAssetIdA) + " and ") + strAssetIdB))
421411 else if (if ((((scaleValue3 * (slippageToleranceDelimiter - slippageTolerance)) / slippageToleranceDelimiter) > tokenRatio))
422412 then true
423413 else (tokenRatio > ((scaleValue3 * (slippageToleranceDelimiter + slippageTolerance)) / slippageToleranceDelimiter)))
424414 then throw("Incorrect assets amount: amounts must have the contract ratio")
425415 else if ((shareTokenToPayAmount == 0))
426416 then throw("Too small amount to replenish")
427417 else if (!(hasEnoughBalance))
428418 then ([ScriptTransfer(i.caller, pmtAmountA, pmtAssetIdA), ScriptTransfer(i.caller, pmtAmountB, pmtAssetIdB)] ++ suspendSuspicious())
429419 else {
430420 let stake1 = if (containsElement(stakingAssets, pmtStrAssetIdA))
431421 then invoke(this, "stakeUnstake", [true, pmtAmountA, pmtStrAssetIdA], nil)
432422 else 0
433423 if ((stake1 == stake1))
434424 then {
435425 let stake2 = if (containsElement(stakingAssets, pmtStrAssetIdB))
436426 then invoke(this, "stakeUnstake", [true, pmtAmountB, pmtStrAssetIdB], nil)
437427 else 0
438428 if ((stake2 == stake2))
439429 then [Reissue(shareAssetId, shareTokenToPayAmount, true), IntegerEntry(keyBalanceA, (balanceA + pmtAmountA)), IntegerEntry(keyBalanceB, (balanceB + pmtAmountB)), IntegerEntry(keyShareAssetSupply, (shareAssetSupply + shareTokenToPayAmount)), ScriptTransfer(i.caller, shareTokenToPayAmount, shareAssetId)]
440430 else throw("Strict value is not equal to itself.")
441431 }
442432 else throw("Strict value is not equal to itself.")
443433 }
444434 })
445435
446436
447437
448438 @Callable(i)
449439 func withdraw () = valueOrElse(isActive(), {
450- let $t01683516910 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
451- let pmtAmount = $t01683516910._1
452- let pmtAssetId = $t01683516910._2
440+ let $t01648816563 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
441+ let pmtAmount = $t01648816563._1
442+ let pmtAssetId = $t01648816563._2
453443 let amountToPayA = fraction(pmtAmount, balanceA, shareAssetSupply)
454444 let amountToPayB = fraction(pmtAmount, balanceB, shareAssetSupply)
455445 if ((size(i.payments) != 1))
456446 then throw("One attached payment expected")
457447 else if ((pmtAssetId != shareAssetId))
458448 then throw(("Incorrect asset attached. Expected: " + toBase58String(shareAssetId)))
459449 else if (!(hasEnoughBalance))
460450 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious())
461451 else {
462452 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
463453 then invoke(this, "stakeUnstake", [false, amountToPayA, strAssetIdA], nil)
464454 else 0
465455 if ((stake1 == stake1))
466456 then {
467457 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
468458 then invoke(this, "stakeUnstake", [false, amountToPayB, strAssetIdB], nil)
469459 else 0
470460 if ((stake2 == stake2))
471461 then [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)]
472462 else throw("Strict value is not equal to itself.")
473463 }
474464 else throw("Strict value is not equal to itself.")
475465 }
476466 })
477467
478468
479469
480470 @Callable(i)
481471 func exchange (minAmountToReceive) = valueOrElse(isActive(), {
482- let $t01821618291 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
483- let pmtAmount = $t01821618291._1
484- let pmtAssetId = $t01821618291._2
472+ let $t01786817943 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
473+ let pmtAmount = $t01786817943._1
474+ let pmtAssetId = $t01786817943._2
485475 if (if ((balanceA == 0))
486476 then true
487477 else (balanceB == 0))
488478 then throw("Can't exchange with zero balance")
489479 else if ((0 >= minAmountToReceive))
490480 then throw(("Minimal amount to receive must be positive. Actual: " + toString(minAmountToReceive)))
491481 else if ((size(i.payments) != 1))
492482 then throw("One attached payment expected")
493483 else if (!(hasEnoughBalance))
494484 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious())
495485 else if ((pmtAssetId == assetIdA))
496486 then {
497487 let assetIdSend = assetIdB
498- let $t01884618968 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB)
499- let amountWithoutFee = $t01884618968._1
500- let amountWithFee = $t01884618968._2
501- let governanceReward = $t01884618968._3
488+ let $t01849418616 = calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB)
489+ let amountWithoutFee = $t01849418616._1
490+ let amountWithFee = $t01849418616._2
491+ let governanceReward = $t01849418616._3
502492 let newBalanceA = (balanceA + pmtAmount)
503493 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
504494 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
505495 then invoke(this, "stakeUnstake", [true, pmtAmount, strAssetIdA], nil)
506496 else 0
507497 if ((stake1 == stake1))
508498 then {
509499 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
510500 then invoke(this, "stakeUnstake", [false, (amountWithFee + governanceReward), strAssetIdB], nil)
511501 else 0
512502 if ((stake2 == stake2))
513503 then [IntegerEntry(keyBalanceA, newBalanceA), IntegerEntry(keyBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(walletAddress, governanceReward, assetIdSend)]
514504 else throw("Strict value is not equal to itself.")
515505 }
516506 else throw("Strict value is not equal to itself.")
517507 }
518508 else if ((pmtAssetId == assetIdB))
519509 then {
520510 let assetIdSend = assetIdA
521- let $t01992320045 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA)
522- let amountWithoutFee = $t01992320045._1
523- let amountWithFee = $t01992320045._2
524- let governanceReward = $t01992320045._3
511+ let $t01957119693 = calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA)
512+ let amountWithoutFee = $t01957119693._1
513+ let amountWithFee = $t01957119693._2
514+ let governanceReward = $t01957119693._3
525515 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
526516 let newBalanceB = (balanceB + pmtAmount)
527517 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
528518 then invoke(this, "stakeUnstake", [false, (amountWithFee + governanceReward), strAssetIdA], nil)
529519 else 0
530520 if ((stake1 == stake1))
531521 then {
532522 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
533523 then invoke(this, "stakeUnstake", [true, pmtAmount, strAssetIdB], nil)
534524 else 0
535525 if ((stake2 == stake2))
536526 then [IntegerEntry(keyBalanceA, newBalanceA), IntegerEntry(keyBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(walletAddress, governanceReward, assetIdSend)]
537527 else throw("Strict value is not equal to itself.")
538528 }
539529 else throw("Strict value is not equal to itself.")
540530 }
541531 else throw(((("Incorrect asset attached. Expected: " + strAssetIdA) + " or ") + strAssetIdB))
542532 })
543533
544534
545535
546536 @Callable(i)
547537 func shutdown () = if (!(active))
548538 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
549539 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
550540 then throw("Only admin can call this function")
551541 else suspend("Paused by admin")
552542
553543
554544
555545 @Callable(i)
556546 func activate () = if (active)
557547 then throw("DApp is already active")
558548 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
559549 then throw("Only admin can call this function")
560550 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
561551
562552
563553
564554 @Callable(i)
565555 func takeIntoAccountExtraFunds () = valueOrElse(isActive(), {
566556 let amountEnrollA = (accountBalanceWithStakedA - balanceA)
567557 let amountEnrollB = (accountBalanceWithStakedB - balanceB)
568558 if ((i.caller != walletAddress))
569559 then throw("Only the wallet can call this function")
570560 else if (if ((0 > amountEnrollA))
571561 then true
572562 else (0 > amountEnrollB))
573563 then suspend("Enroll amount negative")
574564 else if (if ((amountEnrollA == 0))
575565 then (amountEnrollB == 0)
576566 else false)
577567 then throw("No money to take")
578568 else {
579569 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
580570 then invoke(this, "stakeUnstake", [true, amountEnrollA, strAssetIdA], nil)
581571 else 0
582572 if ((stake1 == stake1))
583573 then {
584574 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
585575 then invoke(this, "stakeUnstake", [true, amountEnrollB, strAssetIdB], nil)
586576 else 0
587577 if ((stake2 == stake2))
588578 then [IntegerEntry(keyBalanceA, (balanceA + amountEnrollA)), IntegerEntry(keyBalanceB, (balanceB + amountEnrollB)), IntegerEntry(("last_income_" + strAssetIdA), amountEnrollA), IntegerEntry(("last_income_" + strAssetIdB), amountEnrollB)]
589579 else throw("Strict value is not equal to itself.")
590580 }
591581 else throw("Strict value is not equal to itself.")
592582 }
593583 })
594584
595585
596586
597587 @Callable(i)
598588 func stakeUnstake (stake,amount,assetIdString) = if ((i.caller != this))
599589 then throw("Only contract itself can invoke this function")
600590 else if ((assetIdString == "WAVES"))
601591 then {
602592 let pool = addressFromStringValue(valueOrErrorMessage(getString(oracle, keyLeasingPool), "No leasing pool in oracle"))
603593 let leasingId = getBinary(this, keyLeasingId)
604594 let leasingAmount = valueOrElse(getInteger(this, keyLeasingAmount), 0)
605595 let newLeaseAmount = if (stake)
606596 then (leasingAmount + amount)
607597 else (leasingAmount - amount)
608598 let newLease = Lease(pool, newLeaseAmount)
609599 let newLeaseId = calculateLeaseId(newLease)
610600 let baseEtry = [newLease, BinaryEntry(keyLeasingId, newLeaseId), IntegerEntry(keyLeasingAmount, newLeaseAmount)]
611601 match leasingId {
612602 case lId: ByteVector =>
613603 ([LeaseCancel(lId)] ++ baseEtry)
614604 case _ =>
615605 baseEtry
616606 }
617607 }
618608 else {
619- let $t02377923882 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
620- let call = $t02377923882._1
621- let addr = $t02377923882._2
622- let params = $t02377923882._3
623- let payments = $t02377923882._4
609+ let $t02342623529 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
610+ let call = $t02342623529._1
611+ let addr = $t02342623529._2
612+ let params = $t02342623529._3
613+ let payments = $t02342623529._4
624614 let inv = invoke(addr, call, params, payments)
625615 if ((inv == inv))
626616 then nil
627617 else throw("Strict value is not equal to itself.")
628618 }
629619
630620
631621
632622 @Callable(i)
633623 func stakeAll () = valueOrElse(isActive(), if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
634624 then throw("Only admin can call this function")
635625 else {
636626 let stake1 = if (containsElement(stakingAssets, strAssetIdA))
637627 then {
638628 let amountA = (balanceA - stakedAmountA)
639629 if ((amountA > 0))
640630 then invoke(this, "stakeUnstake", [true, amountA, strAssetIdA], nil)
641631 else 0
642632 }
643633 else 0
644634 if ((stake1 == stake1))
645635 then {
646636 let stake2 = if (containsElement(stakingAssets, strAssetIdB))
647637 then {
648638 let amountB = (balanceB - stakedAmountB)
649639 if ((amountB > 0))
650640 then invoke(this, "stakeUnstake", [true, amountB, strAssetIdB], nil)
651641 else 0
652642 }
653643 else 0
654644 if ((stake2 == stake2))
655645 then nil
656646 else throw("Strict value is not equal to itself.")
657647 }
658648 else throw("Strict value is not equal to itself.")
659649 })
660650
661651
662652 @Verifier(tx)
663653 func verify () = {
664654 let multiSignedByAdmins = {
665655 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
666656 then 1
667657 else 0
668658 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
669659 then 1
670660 else 0
671661 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
672662 then 1
673663 else 0
674664 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
675665 }
676666 match tx {
677667 case inv: InvokeScriptTransaction =>
678668 let callTakeIntoAccount = if ((inv.dApp == this))
679669 then (inv.function == "takeIntoAccountExtraFunds")
680670 else false
681671 let exchangeToWaves = if (if (if ((inv.dApp == USDNToWavesExchanger))
682672 then (inv.function == "exchange")
683673 else false)
684- then (assetIdA == USDN)
674+ then (size(inv.payments) == 1)
685675 else false)
686- then true
687- else if (if ((assetIdB == USDN))
688- then (size(inv.payments) == 1)
689- else false)
690- then (inv.payments[0].assetId == USDN)
691- else false
692- let exchangeToNSBTs = if (if (if ((inv.dApp == USDNToNSBTExchanger))
693- then (inv.function == "exchange")
694- else false)
695- then (assetIdA == NSBT)
696- else false)
697- then true
698- else if (if ((assetIdB == NSBT))
699- then (size(inv.payments) == 1)
700- else false)
701- then (inv.payments[0].assetId == USDN)
702- else false
676+ then if ((inv.payments[0].assetId == USDN))
677+ then true
678+ else (inv.payments[0].assetId == unit)
679+ else false
703680 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
704681 then true
705682 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
706683 then true
707684 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
708685 then true
709686 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
710- if (if (if (if (callTakeIntoAccount)
687+ if (if (if (callTakeIntoAccount)
711688 then true
712689 else exchangeToWaves)
713- then true
714- else exchangeToNSBTs)
715690 then signedByAdmin
716691 else false)
717692 then true
718693 else multiSignedByAdmins
719694 case _ =>
720695 multiSignedByAdmins
721696 }
722697 }
723698

github/deemru/w8io/786bc32 
100.23 ms