tx · 6bfSNoNPK6dkCWnW2TbcpvkhtJGxNs7QWxWLnZUP9bV5

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.01700000 Waves

2022.05.30 12:50 [2074245] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "6bfSNoNPK6dkCWnW2TbcpvkhtJGxNs7QWxWLnZUP9bV5", "fee": 1700000, "feeAssetId": null, "timestamp": 1653904280780, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "AAzD51hnDq97NPvN8fcvZ1skNzrAxV4C66CjA6sf4czosipBSpD1GQxhPYL4bmkR4ASiwNx6ET7pxbrQLKTMG6A" ], "script": "base64:AAIFAAAAAAAAADMIAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBgoEAQEBARIECgIBARIECgIBCBIAEgAAAAA+AAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAhQUklDRUxFVAAAAAAAAA9CQAAAAAAJTVVMVFNDQUxFAAAAAAAAAAAIAAAAAAtFVUxFUk5VTUJFUgAAAAAAEDPE1gAAAAAGc2NhbGU2AAAAAAAAD0JAAAAAAAxzY2FsZTZCaWdJbnQJAAE2AAAAAQAAAAAAAA9CQAAAAAAGc2NhbGU4AAAAAAAF9eEAAAAAAAxzY2FsZThCaWdJbnQJAAE2AAAAAQAAAAAABfXhAAAAAAAHc2NhbGUxMgAAAADo1KUQAAAAAAAHc2NhbGUxOAkAATYAAAABAA3gtrOnZAAAAAAAAANTRVACAAAAAl9fAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX25ldXRyaW5vQWRkcmVzcwEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAIAAAARbmV1dHJpbm9fYXNzZXRfaWQBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QBAAAADmtleVJQRENvbnRyYWN0AAAAAAIAAAAMcnBkX2NvbnRyYWN0AQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAgAAABBhdWN0aW9uX2NvbnRyYWN0AQAAABFrZXlDb250b2xDb250cmFjdAAAAAACAAAAEGNvbnRyb2xfY29udHJhY3QBAAAADmtleUJvbmRBc3NldElkAAAAAAIAAAANYm9uZF9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZlcwEAAAAYa2V5TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAACG5ldXRyaW5vAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAAAgAAABVtaW5fd2F2ZXNfc3dhcF9hbW91bnQBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAACAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAIAAAAVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0AQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAAAgAAABhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAAAgAAABQlc19fbnNidExvY2tDb250cmFjdAEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAIAAAAQJXNfX21hdGhDb250cmFjdAEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAIAAAAbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAAAgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwBAAAACGtleVByaWNlAAAAAAIAAAAFcHJpY2UBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAAC3BhcmFtQnlVc2VyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAICAAAABXN0YXJ0BQAAAANuaWwFAAAAA1NFUAEAAAALa2V5SGFsZkxpZmUAAAAAAgAAAAwlc19faGFsZkxpZmUBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAAAgAAABElc19fbWluTG9ja0Ftb3VudAEAAAAVa2V5TWluV2F2ZXNGb3JOc2J0QnV5AAAAAAIAAAASbWluX3dhdmVzX25zYnRfYnV5AQAAAA5rZXlNaW5Oc2J0U2VsbAAAAAACAAAADW1pbl9uc2J0X3NlbGwBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAA8gaXMgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAQAAAAxnZXRJbnRPckZhaWwAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQAEuQAAAAIJAARMAAAAAgIAAAAKbWFuZGF0b3J5IAkABEwAAAACCQAEJQAAAAEFAAAAB2FkZHJlc3MJAARMAAAAAgIAAAABLgkABEwAAAACBQAAAANrZXkJAARMAAAAAgIAAAAPIGlzIG5vdCBkZWZpbmVkBQAAAANuaWwCAAAAAAEAAAANZ2V0Qm9vbE9yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBsAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAA8gaXMgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQFAAAACFBSSUNFTEVUBQAAAAVwcmljZQUAAAAGc2NhbGU4BQAAAAZzY2FsZTYBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADCQAAawAAAAMFAAAABmFtb3VudAUAAAAFcHJpY2UFAAAACFBSSUNFTEVUBQAAAAZzY2FsZTYFAAAABnNjYWxlOAEAAAAJYXNBbnlMaXN0AAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAJTGlzdFtBbnldBAAAAAp2YWxBbnlMaXN0BQAAAAckbWF0Y2gwBQAAAAp2YWxBbnlMaXN0CQAAAgAAAAECAAAAG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAFWZhaWwgdG8gY2FzdCBpbnRvIEludAEAAAAIYXNTdHJpbmcAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnZhbFN0cgUAAAAHJG1hdGNoMAUAAAAGdmFsU3RyCQAAAgAAAAECAAAAGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEAAAAMYXNUdXBsZTJJbnRzAAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKKEludCwgSW50KQQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgkAAAIAAAABAgAAAB1mYWlsIHRvIGNhc3QgaW50byBUdXBsZTIgaW50cwEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAZKEludCwgSW50LCBJbnQsIEludCwgSW50KQQAAAAGc3RydWN0BQAAAAckbWF0Y2gwBQAAAAZzdHJ1Y3QJAAACAAAAAQIAAAAVZmFpbCB0byBjYXN0IGludG8gSW50AQAAAAt0b1RpbWVzdGFtcAAAAAEAAAAFc3RhcnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAABXN0YXJ0AP//////////BAAAAAckbWF0Y2gwCQAD7QAAAAEFAAAABXN0YXJ0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAlCbG9ja0luZm8EAAAABWJsb2NrBQAAAAckbWF0Y2gwCAUAAAAFYmxvY2sAAAAJdGltZXN0YW1wAP//////////AQAAAAV0b1gxOAAAAAIAAAAHb3JpZ1ZhbAAAAA1vcmlnU2NhbGVNdWx0CQABPAAAAAMJAAE2AAAAAQUAAAAHb3JpZ1ZhbAUAAAAHc2NhbGUxOAkAATYAAAABBQAAAA1vcmlnU2NhbGVNdWx0AQAAAAdmcm9tWDE4AAAAAgAAAAN2YWwAAAAPcmVzdWx0U2NhbGVNdWx0CQABoAAAAAEJAAE8AAAAAwUAAAADdmFsCQABNgAAAAEFAAAAD3Jlc3VsdFNjYWxlTXVsdAUAAAAHc2NhbGUxOAAAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARa2V5Q29udG9sQ29udHJhY3QAAAAAAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5QXVjdGlvbkNvbnRyYWN0AAAAAAAAAAATbGlxdWlkYXRpb25Db250cmFjdAkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB1rZXlMaXF1aWRhdGlvbkNvbnRyYWN0QWRkcmVzcwAAAAAAAAAAC3JwZENvbnRyYWN0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleVJQRENvbnRyYWN0AAAAAAAAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAD2tleU1hdGhDb250cmFjdAAAAAAAAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAAAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlOZXV0cmlub0Fzc2V0SWQAAAAAAAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAA5uc2J0QXNzZXRJZFN0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleUJvbmRBc3NldElkAAAAAAAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQUAAAAObnNidEFzc2V0SWRTdHIBAAAAEm1pbldhdmVzRm9yTnNidEJ1eQAAAAAJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAPYXVjdGlvbkNvbnRyYWN0AgAAACBtaW5XYXZlc0Ftb3VudE5zYnRCdXlTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAADm1pbk5zYnRGb3JTZWxsAAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAH21pbk5zYnRBbW91bnRGb3JTZWxsU1lTUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsAQAAABRwcml2YXRlTnNidFByaWNlUkVTVAAAAAAEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAAABAAAAA9uc2J0MndhdmVzUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABCQAFFAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA5uc2J0MnVzZG5QcmljZQUAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9uc2J0MndhdmVzUHJpY2UFAAAAD25zYnQyd2F2ZXNQcmljZQAAAAoAAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAALbWF0aEFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAFAAAAD25ldXRyaW5vQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAFAAAAD25zYnRMb2NrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAUAAAALbWF0aEFkZHJlc3MFAAAAA25pbAAAAAFpAQAAABVuZXV0cmlub1N0YXRzUkVBRE9OTFkAAAAABAAAAA9uZXV0cmlub01ldHJpY3MJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAZwcmljZXMJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAgY2FsY0NvbnRyYWN0TnNidFByaWNlU1lTUkVBRE9OTFkJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGN1cnJlbnRQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAAEAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAA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ZG5Td2FwQW10CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAYa2V5TWluTmV1dHJpbm9Td2FwQW1vdW50AAAAAAQAAAANd2F2ZXMyVXNkbkZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEmtleVdhdmVzT3V0RmVlUGFydAAAAAAEAAAADXVzZG4yV2F2ZXNGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAABAAAABV1c2RuU3dhcERlbGF5RHVyYXRpb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAABAAAABZ3YXZlc1N3YXBEZWxheUR1cmF0aW9uCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAQAAAALJHQwODQ5ODg2NjIJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAQc3dhcExpbWl0TWF4VXNkbggFAAAACyR0MDg0OTg4NjYyAAAAAl8xBAAAABJzd2FwTGltaXRTcGVudFVzZG4IBQAAAAskdDA4NDk4ODY2MgAAAAJfMgQAAAAOYmxja3MyTG10UmVzZXQIBQAAAAskdDA4NDk4ODY2MgAAAAJfMwQAAAARc3dhcExpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAQc3dhcExpbWl0TWF4VXNkbgUAAAAMY3VycmVudFByaWNlCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAFiVkJWQlZCVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAA9taW5XYXZlc1N3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5Vc2RuU3dhcEFtdAkABEwAAAACCQABpAAAAAEFAAAADXdhdmVzMlVzZG5GZWUJAARMAAAAAgkAAaQAAAABBQAAAA11c2RuMldhdmVzRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVdXNkblN3YXBEZWxheUR1cmF0aW9uCQAETAAAAAIJAAGkAAAAAQUAAAAWd2F2ZXNTd2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAADmJsY2tzMkxtdFJlc2V0CQAETAAAAAIJAAGkAAAAAQUAAAARc3dhcExpbWl0TWF4V2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAABBzd2FwTGltaXRNYXhVc2RuCQAETAAAAAIJAAGkAAAAAQUAAAASc3dhcExpbWl0U3BlbnRVc2RuBQAAAANuaWwFAAAAA1NFUAAAAAFpAQAAABFnbnNidEluZm9SRUFET05MWQAAAAIAAAARdXNlckFkZHJlc3NTdHJPcHQAAAALbnNidEFtdERpZmYEAAAADGN1cnJlbnRQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAIa2V5UHJpY2UAAAAABAAAAAskdDA5NjY4OTg1MQkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAAAxsaW1pdE1heFVzZG4IBQAAAAskdDA5NjY4OTg1MQAAAAJfMQQAAAAKbGltaXRTcGVudAgFAAAACyR0MDk2Njg5ODUxAAAAAl8yBAAAAA5ibGNrczJMbXRSZXNldAgFAAAACyR0MDk2Njg5ODUxAAAAAl8zBAAAAAhnbnNidEFtdAgFAAAACyR0MDk2Njg5ODUxAAAAAl80BAAAAA1nbnNidEFtdFRvdGFsCAUAAAALJHQwOTY2ODk4NTEAAAACXzUEAAAADCR0MDk4NTUxMDA2MwkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIFAAAAC25zYnRBbXREaWZmBQAAAANuaWwFAAAAA25pbAQAAAAPbGltaXRNYXhVc2RuTkVXCAUAAAAMJHQwOTg1NTEwMDYzAAAAAl8xBAAAAA1saW1pdFNwZW50TkVXCAUAAAAMJHQwOTg1NTEwMDYzAAAAAl8yBAAAABFibGNrczJMbXRSZXNldE5FVwgFAAAADCR0MDk4NTUxMDA2MwAAAAJfMwQAAAALZ25zYnRBbXRORVcIBQAAAAwkdDA5ODU1MTAwNjMAAAACXzQEAAAAEGduc2J0QW10VG90YWxORVcIBQAAAAwkdDA5ODU1MTAwNjMAAAACXzUEAAAADWxpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAMbGltaXRNYXhVc2RuBQAAAAxjdXJyZW50UHJpY2UEAAAAEGxpbWl0TWF4V2F2ZXNORVcJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAPbGltaXRNYXhVc2RuTkVXBQAAAAxjdXJyZW50UHJpY2UEAAAACmduc2J0U2hhcmUDCQEAAAACIT0AAAACBQAAAA1nbnNidEFtdFRvdGFsAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAAIZ25zYnRBbXQAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAADWduc2J0QW10VG90YWwAAAAAAAAAAAAEAAAADWduc2J0U2hhcmVORVcDCQEAAAACIT0AAAACBQAAABBnbnNidEFtdFRvdGFsTkVXAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAALZ25zYnRBbXRORVcAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAAEGduc2J0QW10VG90YWxORVcAAAAAAAAAAAAEAAAACnJld2FyZEluZm8JAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAUAAAATbnNidFN0YWtpbmdDb250cmFjdAIAAAAYdW5jbGFpbWVkUmV3YXJkc1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0BQAAAANuaWwFAAAAA25pbAQAAAAHbnNidEFtdAUAAAAIZ25zYnRBbXQEAAAACm5zYnRBbXROZXcFAAAAC2duc2J0QW10TkVXBAAAABJuc2J0QW10U3Rha2VkVG90YWwFAAAADWduc2J0QW10VG90YWwEAAAAFW5zYnRBbXRTdGFrZWRUb3RhbE5ldwUAAAAQZ25zYnRBbXRUb3RhbE5FVwQAAAAIbnNidERhdGEJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAE25zYnRTdGFraW5nQ29udHJhY3QCAAAAFm5zYnRTdGFraW5nU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQFAAAAA25pbAUAAAADbmlsBAAAABJpc0VtcHR5TnNidEJhbGFuY2UDCQAAAAAAAAIFAAAACGduc2J0QW10AAAAAAAAAAAACQAAAAAAAAIFAAAAC2duc2J0QW10TkVXAAAAAAAAAAAABwQAAAALc3RhcnRIZWlnaHQDBQAAABJpc0VtcHR5TnNidEJhbGFuY2UA//////////8JAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAIbnNidERhdGEAAAAAAAAAAAIEAAAADnN0YXJ0VGltZXN0YW1wCQEAAAALdG9UaW1lc3RhbXAAAAABBQAAAAtzdGFydEhlaWdodAQAAAAIaGFsZkxpZmUJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAALa2V5SGFsZkxpZmUAAAAABAAAAA5zdGFydEhlaWdodE5ldwMFAAAAEmlzRW1wdHlOc2J0QmFsYW5jZQD//////////wkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAE21lcmdlU3Rha2VzUkVBRE9OTFkJAARMAAAA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", "chainId": 84, "height": 2074245, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BU98Cne4M2PBoBv1HtbBt4Anjwc2wiMSvorWx3oW3FnZ Next: D7X1B6cdQbg4ZQu5aNV4rzaAQzHzUBjv2KP8J53dYwBp Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "8b0d80129f1ef0f2a166effa1587a3edfe2cabc8"
4+let revisionNum = ""
55
66 let PRICELET = 1000000
77
150150 }
151151
152152
153-func toTimestamp (start) = match blockInfoByHeight(start) {
154- case block: BlockInfo =>
155- block.timestamp
156- case _ =>
157- -1
158-}
153+func toTimestamp (start) = if ((0 > start))
154+ then -1
155+ else match blockInfoByHeight(start) {
156+ case block: BlockInfo =>
157+ block.timestamp
158+ case _ =>
159+ -1
160+ }
159161
160162
161163 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
241243 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
242244 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
243245 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
244- let $t085108674 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
245- let swapLimitMaxUsdn = $t085108674._1
246- let swapLimitSpentUsdn = $t085108674._2
247- let blcks2LmtReset = $t085108674._3
246+ let $t084988662 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
247+ let swapLimitMaxUsdn = $t084988662._1
248+ let swapLimitSpentUsdn = $t084988662._2
249+ let blcks2LmtReset = $t084988662._3
248250 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
249251 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blcks2LmtReset), toString(swapLimitMaxWaves), toString(swapLimitMaxUsdn), toString(swapLimitSpentUsdn)], SEP))
250252 }
254256 @Callable(i)
255257 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
256258 let currentPrice = getIntegerValue(controlContract, keyPrice())
257- let $t096809863 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
258- let limitMaxUsdn = $t096809863._1
259- let limitSpent = $t096809863._2
260- let blcks2LmtReset = $t096809863._3
261- let gnsbtAmt = $t096809863._4
262- let gnsbtAmtTotal = $t096809863._5
263- let $t0986710075 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
264- let limitMaxUsdnNEW = $t0986710075._1
265- let limitSpentNEW = $t0986710075._2
266- let blcks2LmtResetNEW = $t0986710075._3
267- let gnsbtAmtNEW = $t0986710075._4
268- let gnsbtAmtTotalNEW = $t0986710075._5
259+ let $t096689851 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
260+ let limitMaxUsdn = $t096689851._1
261+ let limitSpent = $t096689851._2
262+ let blcks2LmtReset = $t096689851._3
263+ let gnsbtAmt = $t096689851._4
264+ let gnsbtAmtTotal = $t096689851._5
265+ let $t0985510063 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
266+ let limitMaxUsdnNEW = $t0985510063._1
267+ let limitSpentNEW = $t0985510063._2
268+ let blcks2LmtResetNEW = $t0985510063._3
269+ let gnsbtAmtNEW = $t0985510063._4
270+ let gnsbtAmtTotalNEW = $t0985510063._5
269271 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
270272 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
271273 let gnsbtShare = if ((gnsbtAmtTotal != 0))
280282 let nsbtAmtStakedTotal = gnsbtAmtTotal
281283 let nsbtAmtStakedTotalNew = gnsbtAmtTotalNEW
282284 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddressStrOpt], nil))
283- let startHeight = asInt(nsbtData[2])
285+ let isEmptyNsbtBalance = if ((gnsbtAmt == 0))
286+ then (gnsbtAmtNEW == 0)
287+ else false
288+ let startHeight = if (isEmptyNsbtBalance)
289+ then -1
290+ else asInt(nsbtData[2])
284291 let startTimestamp = toTimestamp(startHeight)
285292 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
286- let startHeightNew = asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
293+ let startHeightNew = if (isEmptyNsbtBalance)
294+ then -1
295+ else asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
287296 let startTimestampNew = toTimestamp(startHeightNew)
288297 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%d%d%d%d%d%d%d%d", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo, toString(nsbtAmt), toString(nsbtAmtNew), toString(nsbtAmtStakedTotal), toString(nsbtAmtStakedTotalNew), toString(startHeight), toString(startTimestamp), toString(startHeightNew), toString(startTimestampNew)], SEP))
289298 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "8b0d80129f1ef0f2a166effa1587a3edfe2cabc8"
4+let revisionNum = ""
55
66 let PRICELET = 1000000
77
88 let MULTSCALE = 8
99
1010 let EULERNUMBER = 271828182
1111
1212 let scale6 = 1000000
1313
1414 let scale6BigInt = toBigInt(1000000)
1515
1616 let scale8 = 100000000
1717
1818 let scale8BigInt = toBigInt(100000000)
1919
2020 let scale12 = 1000000000000
2121
2222 let scale18 = toBigInt(1000000000000000000)
2323
2424 let SEP = "__"
2525
2626 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
2727
2828
2929 func keyNeutrinoAssetId () = "neutrino_asset_id"
3030
3131
3232 func keyLiquidationContractAddress () = "liquidation_contract"
3333
3434
3535 func keyRPDContract () = "rpd_contract"
3636
3737
3838 func keyAuctionContract () = "auction_contract"
3939
4040
4141 func keyContolContract () = "control_contract"
4242
4343
4444 func keyBondAssetId () = "bond_asset_id"
4545
4646
4747 func keyBalanceLocked () = "balance_lock_"
4848
4949
5050 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
5151
5252
5353 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
5454
5555
5656 func keyMinWavesSwapAmount () = "min_waves_swap_amount"
5757
5858
5959 func keyMinNeutrinoSwapAmount () = "min_neutrino_swap_amount"
6060
6161
6262 func keyWavesOutFeePart () = "wavesOut_swap_feePart"
6363
6464
6565 func keyNeutrinoOutFeePart () = "neutrinoOut_swap_feePart"
6666
6767
6868 func keyNsbtLockContract () = "%s__nsbtLockContract"
6969
7070
7171 func keyMathContract () = "%s__mathContract"
7272
7373
7474 func keyBalanceWavesLockInterval () = "balance_waves_lock_interval"
7575
7676
7777 func keyBalanceNeutrinoLockInterval () = "balance_neutrino_lock_interval"
7878
7979
8080 func keyPrice () = "price"
8181
8282
8383 func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", userAddress, "start"], SEP)
8484
8585
8686 func keyHalfLife () = "%s__halfLife"
8787
8888
8989 func keyMinLockAmount () = "%s__minLockAmount"
9090
9191
9292 func keyMinWavesForNsbtBuy () = "min_waves_nsbt_buy"
9393
9494
9595 func keyMinNsbtSell () = "min_nsbt_sell"
9696
9797
9898 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
9999
100100
101101 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
102102
103103
104104 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
105105
106106
107107 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), scale8, scale6)
108108
109109
110110 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), scale6, scale8)
111111
112112
113113 func asAnyList (val) = match val {
114114 case valAnyList: List[Any] =>
115115 valAnyList
116116 case _ =>
117117 throw("fail to cast into List[Any]")
118118 }
119119
120120
121121 func asInt (val) = match val {
122122 case valInt: Int =>
123123 valInt
124124 case _ =>
125125 throw("fail to cast into Int")
126126 }
127127
128128
129129 func asString (val) = match val {
130130 case valStr: String =>
131131 valStr
132132 case _ =>
133133 throw("fail to cast into String")
134134 }
135135
136136
137137 func asTuple2Ints (val) = match val {
138138 case v: (Int, Int) =>
139139 v
140140 case _ =>
141141 throw("fail to cast into Tuple2 ints")
142142 }
143143
144144
145145 func asSwapParamsSTRUCT (val) = match val {
146146 case struct: (Int, Int, Int, Int, Int) =>
147147 struct
148148 case _ =>
149149 throw("fail to cast into Int")
150150 }
151151
152152
153-func toTimestamp (start) = match blockInfoByHeight(start) {
154- case block: BlockInfo =>
155- block.timestamp
156- case _ =>
157- -1
158-}
153+func toTimestamp (start) = if ((0 > start))
154+ then -1
155+ else match blockInfoByHeight(start) {
156+ case block: BlockInfo =>
157+ block.timestamp
158+ case _ =>
159+ -1
160+ }
159161
160162
161163 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
162164
163165
164166 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
165167
166168
167169 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
168170
169171 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
170172
171173 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
172174
173175 let liquidationContract = getStringOrFail(neutrinoContract, keyLiquidationContractAddress())
174176
175177 let rpdContract = getStringOrFail(neutrinoContract, keyRPDContract())
176178
177179 let mathContract = addressFromStringValue(getStringOrFail(this, keyMathContract()))
178180
179181 let nsbtStakingContract = addressFromStringValue(getStringOrFail(this, keyNsbtLockContract()))
180182
181183 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
182184
183185 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
184186
185187 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyBondAssetId())
186188
187189 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
188190
189191 func minWavesForNsbtBuy () = asInt(invoke(auctionContract, "minWavesAmountNsbtBuySYSREADONLY", nil, nil))
190192
191193
192194 func minNsbtForSell () = asInt(invoke(auctionContract, "minNsbtAmountForSellSYSREADONLY", nil, nil))
193195
194196
195197 func privateNsbtPriceREST () = {
196198 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
197199 let nsbt2usdnPrice = asInt(prices[0])
198200 let nsbt2wavesPrice = asInt(prices[1])
199201 $Tuple2(IntegerEntry("nsbt2usdnPrice", nsbt2usdnPrice), IntegerEntry("nsbt2wavesPrice", nsbt2wavesPrice))
200202 }
201203
202204
203205 @Callable(i)
204206 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
205207 then throw("not authorized")
206208 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
207209
208210
209211
210212 @Callable(i)
211213 func neutrinoStatsREADONLY () = {
212214 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
213215 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
214216 let currentPrice = asInt(neutrinoMetrics[0])
215217 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
216218 let wavesLockedBalance = asInt(neutrinoMetrics[2])
217219 let reservesInWaves = asInt(neutrinoMetrics[3])
218220 let reservesInUsdn = asInt(neutrinoMetrics[4])
219221 let neutrinoSupply = asInt(neutrinoMetrics[5])
220222 let surplus = asInt(neutrinoMetrics[6])
221223 let surplusPercent = asInt(neutrinoMetrics[7])
222224 let BR = asInt(neutrinoMetrics[8])
223225 let nsbtSupply = asInt(neutrinoMetrics[9])
224226 let maxNsbtSupply = asInt(neutrinoMetrics[10])
225227 let nsbt2usdnPrice = asInt(prices[0])
226228 let nsbt2wavesPrice = asInt(prices[1])
227229 let minWaves4NsbtBuy = minWavesForNsbtBuy()
228230 let minNsbtsell = minNsbtForSell()
229231 let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
230232 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply), toString(maxNsbtSupply), toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), toString(minWaves4NsbtBuy), toString(minNsbtsell), toString(minNsbtLockAmt)], SEP))
231233 }
232234
233235
234236
235237 @Callable(i)
236238 func swapInfoREADONLY (userAddressStrOpt) = {
237239 let currentPrice = getIntegerValue(controlContract, keyPrice())
238240 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
239241 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
240242 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
241243 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
242244 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
243245 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
244- let $t085108674 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
245- let swapLimitMaxUsdn = $t085108674._1
246- let swapLimitSpentUsdn = $t085108674._2
247- let blcks2LmtReset = $t085108674._3
246+ let $t084988662 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
247+ let swapLimitMaxUsdn = $t084988662._1
248+ let swapLimitSpentUsdn = $t084988662._2
249+ let blcks2LmtReset = $t084988662._3
248250 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
249251 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blcks2LmtReset), toString(swapLimitMaxWaves), toString(swapLimitMaxUsdn), toString(swapLimitSpentUsdn)], SEP))
250252 }
251253
252254
253255
254256 @Callable(i)
255257 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
256258 let currentPrice = getIntegerValue(controlContract, keyPrice())
257- let $t096809863 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
258- let limitMaxUsdn = $t096809863._1
259- let limitSpent = $t096809863._2
260- let blcks2LmtReset = $t096809863._3
261- let gnsbtAmt = $t096809863._4
262- let gnsbtAmtTotal = $t096809863._5
263- let $t0986710075 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
264- let limitMaxUsdnNEW = $t0986710075._1
265- let limitSpentNEW = $t0986710075._2
266- let blcks2LmtResetNEW = $t0986710075._3
267- let gnsbtAmtNEW = $t0986710075._4
268- let gnsbtAmtTotalNEW = $t0986710075._5
259+ let $t096689851 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
260+ let limitMaxUsdn = $t096689851._1
261+ let limitSpent = $t096689851._2
262+ let blcks2LmtReset = $t096689851._3
263+ let gnsbtAmt = $t096689851._4
264+ let gnsbtAmtTotal = $t096689851._5
265+ let $t0985510063 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
266+ let limitMaxUsdnNEW = $t0985510063._1
267+ let limitSpentNEW = $t0985510063._2
268+ let blcks2LmtResetNEW = $t0985510063._3
269+ let gnsbtAmtNEW = $t0985510063._4
270+ let gnsbtAmtTotalNEW = $t0985510063._5
269271 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
270272 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
271273 let gnsbtShare = if ((gnsbtAmtTotal != 0))
272274 then fraction((gnsbtAmt * 100), scale12, gnsbtAmtTotal)
273275 else 0
274276 let gnsbtShareNEW = if ((gnsbtAmtTotalNEW != 0))
275277 then fraction((gnsbtAmtNEW * 100), scale12, gnsbtAmtTotalNEW)
276278 else 0
277279 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
278280 let nsbtAmt = gnsbtAmt
279281 let nsbtAmtNew = gnsbtAmtNEW
280282 let nsbtAmtStakedTotal = gnsbtAmtTotal
281283 let nsbtAmtStakedTotalNew = gnsbtAmtTotalNEW
282284 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddressStrOpt], nil))
283- let startHeight = asInt(nsbtData[2])
285+ let isEmptyNsbtBalance = if ((gnsbtAmt == 0))
286+ then (gnsbtAmtNEW == 0)
287+ else false
288+ let startHeight = if (isEmptyNsbtBalance)
289+ then -1
290+ else asInt(nsbtData[2])
284291 let startTimestamp = toTimestamp(startHeight)
285292 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
286- let startHeightNew = asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
293+ let startHeightNew = if (isEmptyNsbtBalance)
294+ then -1
295+ else asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
287296 let startTimestampNew = toTimestamp(startHeightNew)
288297 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%d%d%d%d%d%d%d%d", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo, toString(nsbtAmt), toString(nsbtAmtNew), toString(nsbtAmtStakedTotal), toString(nsbtAmtStakedTotalNew), toString(startHeight), toString(startTimestamp), toString(startHeightNew), toString(startTimestampNew)], SEP))
289298 }
290299
291300
292301
293302 @Callable(i)
294303 func buyNsbtREADONLY (wavesPay) = {
295304 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
296305 if ((minWavesAmountNsbtBuy > wavesPay))
297306 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
298307 else {
299308 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
300309 if ((curveResult == curveResult))
301310 then {
302311 let nsbtAmount = asInt(curveResult[0])
303312 if ((0 >= nsbtAmount))
304313 then throw("nsbtAmount <= 0")
305314 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
306315 }
307316 else throw("Strict value is not equal to itself.")
308317 }
309318 }
310319
311320
312321
313322 @Callable(i)
314323 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
315324 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
316325 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
317326 if ((h == h))
318327 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
319328 else throw("Strict value is not equal to itself.")
320329 }
321330
322331
323332
324333 @Callable(i)
325334 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
326335 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
327336 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
328337 if ((a == a))
329338 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
330339 else throw("Strict value is not equal to itself.")
331340 }
332341
333342
334343
335344 @Callable(i)
336345 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
337346 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
338347 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
339348 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
340349 if ((a == a))
341350 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
342351 else throw("Strict value is not equal to itself.")
343352 }
344353
345354
346355
347356 @Callable(i)
348357 func neutrinoStateREST () = {
349358 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
350359 let currentPrice = asInt(neutrinoMetrics[0])
351360 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
352361 let wavesLockedBalance = asInt(neutrinoMetrics[2])
353362 let reservesInWaves = asInt(neutrinoMetrics[3])
354363 let reservesInUsdn = asInt(neutrinoMetrics[4])
355364 let neutrinoSupply = asInt(neutrinoMetrics[5])
356365 let surplus = asInt(neutrinoMetrics[6])
357366 let surplusPercent = asInt(neutrinoMetrics[7])
358367 let BR = asInt(neutrinoMetrics[8])
359368 let nsbtSupply = asInt(neutrinoMetrics[9])
360369 throw(makeString(["resultNeutrinoStateREST", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply)], "__"))
361370 }
362371
363372
364373
365374 @Callable(i)
366375 func nsbtPriceREST () = {
367376 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
368377 let nsbt2usdnPrice = asInt(prices[0])
369378 let nsbt2wavesPrice = asInt(prices[1])
370379 let restData = makeString(["startNsbtPriceREST", toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), "endNsbtPriceREST"], "__")
371380 throw(restData)
372381 }
373382
374383

github/deemru/w8io/3ef1775 
139.84 ms