tx · E66tzGmhKHuC8HUwDk4F31Scikhxs4cqURidJ4vCK1fg

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.01400000 Waves

2022.04.21 09:44 [2017953] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "E66tzGmhKHuC8HUwDk4F31Scikhxs4cqURidJ4vCK1fg", "fee": 1400000, "feeAssetId": null, "timestamp": 1650523486532, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "52FXpJUuHNSW5kFt8RPtrhSA4TDf7BchTJTKgcAFmhbtqtDBMxehvpopxrrE7gC91qFcmXPgkPNVPjTutCpP1eX" ], "script": "base64:AAIFAAAAAAAAADMIAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBgoEAQEBARIECgIBARIECgIBCBIAEgAAAAA9AAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAhQUklDRUxFVAAAAAAAAA9CQAAAAAAJTVVMVFNDQUxFAAAAAAAAAAAIAAAAAAtFVUxFUk5VTUJFUgAAAAAAEDPE1gAAAAAGc2NhbGU2AAAAAAAAD0JAAAAAAAxzY2FsZTZCaWdJbnQJAAE2AAAAAQAAAAAAAA9CQAAAAAAGc2NhbGU4AAAAAAAF9eEAAAAAAAxzY2FsZThCaWdJbnQJAAE2AAAAAQAAAAAABfXhAAAAAAAHc2NhbGUxMgAAAADo1KUQAAAAAAAHc2NhbGUxOAkAATYAAAABAA3gtrOnZAAAAAAAAANTRVACAAAAAl9fAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX25ldXRyaW5vQWRkcmVzcwEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAIAAAARbmV1dHJpbm9fYXNzZXRfaWQBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QBAAAADmtleVJQRENvbnRyYWN0AAAAAAIAAAAMcnBkX2NvbnRyYWN0AQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAgAAABBhdWN0aW9uX2NvbnRyYWN0AQAAABFrZXlDb250b2xDb250cmFjdAAAAAACAAAAEGNvbnRyb2xfY29udHJhY3QBAAAADmtleUJvbmRBc3NldElkAAAAAAIAAAANYm9uZF9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZlcwEAAAAYa2V5TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAACG5ldXRyaW5vAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAAAgAAABVtaW5fd2F2ZXNfc3dhcF9hbW91bnQBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAACAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAIAAAAVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0AQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAAAgAAABhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAAAgAAABQlc19fbnNidExvY2tDb250cmFjdAEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAIAAAAQJXNfX21hdGhDb250cmFjdAEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAIAAAAbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAAAgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwBAAAACGtleVByaWNlAAAAAAIAAAAFcHJpY2UBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAAC3BhcmFtQnlVc2VyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAICAAAABXN0YXJ0BQAAAANuaWwFAAAAA1NFUAEAAAALa2V5SGFsZkxpZmUAAAAAAgAAAAwlc19faGFsZkxpZmUBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAAAgAAABElc19fbWluTG9ja0Ftb3VudAEAAAAVa2V5TWluV2F2ZXNGb3JOc2J0QnV5AAAAAAIAAAASbWluX3dhdmVzX25zYnRfYnV5AQAAAA5rZXlNaW5Oc2J0U2VsbAAAAAACAAAADW1pbl9uc2J0X3NlbGwBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAA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TXVsdAUAAAAHc2NhbGUxOAAAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARa2V5Q29udG9sQ29udHJhY3QAAAAAAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5QXVjdGlvbkNvbnRyYWN0AAAAAAAAAAATbGlxdWlkYXRpb25Db250cmFjdAkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB1rZXlMaXF1aWRhdGlvbkNvbnRyYWN0QWRkcmVzcwAAAAAAAAAAC3JwZENvbnRyYWN0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleVJQRENvbnRyYWN0AAAAAAAAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAD2tleU1hdGhDb250cmFjdAAAAAAAAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAAAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlOZXV0cmlub0Fzc2V0SWQAAAAAAAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAA5uc2J0QXNzZXRJZFN0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleUJvbmRBc3NldElkAAAAAAAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQUAAAAObnNidEFzc2V0SWRTdHIBAAAAEm1pbldhdmVzRm9yTnNidEJ1eQAAAAAJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAPYXVjdGlvbkNvbnRyYWN0AgAAACBtaW5XYXZlc0Ftb3VudE5zYnRCdXlTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAADm1pbk5zYnRGb3JTZWxsAAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAH21pbk5zYnRBbW91bnRGb3JTZWxsU1lTUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsAQAAABRwcml2YXRlTnNidFByaWNlUkVTVAAAAAAEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAAABAAAAA9uc2J0MndhdmVzUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABCQAFFAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA5uc2J0MnVzZG5QcmljZQUAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9uc2J0MndhdmVzUHJpY2UFAAAAD25zYnQyd2F2ZXNQcmljZQAAAAoAAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAALbWF0aEFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAFAAAAD25ldXRyaW5vQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAFAAAAD25zYnRMb2NrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAUAAAALbWF0aEFkZHJlc3MFAAAAA25pbAAAAAFpAQAAABVuZXV0cmlub1N0YXRzUkVBRE9OTFkAAAAABAAAAA9uZXV0cmlub01ldHJpY3MJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAZwcmljZXMJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAgY2FsY0NvbnRyYWN0TnNidFByaWNlU1lTUkVBRE9OTFkJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGN1cnJlbnRQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAAEAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAEEAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAIEAAAAD3Jlc2VydmVzSW5XYXZlcwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAMEAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAFYXNJbnQAAAABCQAB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AAAADXVzZG4yV2F2ZXNGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAABAAAABV1c2RuU3dhcERlbGF5RHVyYXRpb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAABAAAABZ3YXZlc1N3YXBEZWxheUR1cmF0aW9uCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAQAAAALJHQwODMzMjg0OTYJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAQc3dhcExpbWl0TWF4VXNkbggFAAAACyR0MDgzMzI4NDk2AAAAAl8xBAAAABJzd2FwTGltaXRTcGVudFVzZG4IBQAAAAskdDA4MzMyODQ5NgAAAAJfMgQAAAAOYmxja3MyTG10UmVzZXQIBQAAAAskdDA4MzMyODQ5NgAAAAJfMwQAAAARc3dhcExpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAQc3dhcExpbWl0TWF4VXNkbgUAAAAMY3VycmVudFByaWNlCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAFiVkJWQlZCVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAA9taW5XYXZlc1N3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5Vc2RuU3dhcEFtdAkABEwAAAACCQABpAAAAAEFAAAADXdhdmVzMlVzZG5GZWUJAARMAAAAAgkAAaQAAAABBQAAAA11c2RuMldhdmVzRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVdXNkblN3YXBEZWxheUR1cmF0aW9uCQAETAAAAAIJAAGkAAAAAQUAAAAWd2F2ZXNTd2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAADmJsY2tzMkxtdFJlc2V0CQAETAAAAAIJAAGkAAAAAQUAAAARc3dhcExpbWl0TWF4V2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAABBzd2FwTGltaXRNYXhVc2RuCQAETAAAAAIJAAGkAAAAAQUAAAASc3dhcExpbWl0U3BlbnRVc2RuBQAAAANuaWwFAAAAA1NFUAAAAAFpAQAAABFnbnNidEluZm9SRUFET05MWQAAAAIAAAARdXNlckFkZHJlc3NTdHJPcHQAAAALbnNidEFtdERpZmYEAAAADGN1cnJlbnRQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAIa2V5UHJpY2UAAAAABAAAAAskdDA5NTAyOTY4NQkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAAAxsaW1pdE1heFVzZG4IBQAAAAskdDA5NTAyOTY4NQAAAAJfMQQAAAAKbGltaXRTcGVudAgFAAAACyR0MDk1MDI5Njg1AAAAAl8yBAAAAA5ibGNrczJMbXRSZXNldAgFAAAACyR0MDk1MDI5Njg1AAAAAl8zBAAAAAhnbnNidEFtdAgFAAAACyR0MDk1MDI5Njg1AAAAAl80BAAAAA1nbnNidEFtdFRvdGFsCAUAAAALJHQwOTUwMjk2ODUAAAACXzUEAAAACyR0MDk2ODk5ODk3CQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQJAARMAAAAAgUAAAALbnNidEFtdERpZmYFAAAAA25pbAUAAAADbmlsBAAAAA9saW1pdE1heFVzZG5ORVcIBQAAAAskdDA5Njg5OTg5NwAAAAJfMQQAAAANbGltaXRTcGVudE5FVwgFAAAACyR0MDk2ODk5ODk3AAAAAl8yBAAAABFibGNrczJMbXRSZXNldE5FVwgFAAAACyR0MDk2ODk5ODk3AAAAAl8zBAAAAAtnbnNidEFtdE5FVwgFAAAACyR0MDk2ODk5ODk3AAAAAl80BAAAABBnbnNidEFtdFRvdGFsTkVXCAUAAAALJHQwOTY4OTk4OTcAAAACXzUEAAAADWxpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAMbGltaXRNYXhVc2RuBQAAAAxjdXJyZW50UHJpY2UEAAAAEGxpbWl0TWF4V2F2ZXNORVcJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAPbGltaXRNYXhVc2RuTkVXBQAAAAxjdXJyZW50UHJpY2UEAAAACmduc2J0U2hhcmUDCQEAAAACIT0AAAACBQAAAA1nbnNidEFtdFRvdGFsAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAAIZ25zYnRBbXQAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAADWduc2J0QW10VG90YWwAAAAAAAAAAAAEAAAADWduc2J0U2hhcmVORVcDCQEAAAACIT0AAAACBQAAABBnbnNidEFtdFRvdGFsTkVXAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAALZ25zYnRBbXRORVcAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAAEGduc2J0QW10VG90YWxORVcAAAAAAAAAAAAEAAAACnJld2FyZEluZm8JAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAUAAAATbnNidFN0YWtpbmdDb250cmFjdAIAAAAYdW5jbGFpbWVkUmV3YXJkc1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0BQAAAANuaWwFAAAAA25pbAQAAAAHbnNidEFtdAUA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Y3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAmdW5zdGFrZUNvbWlzc2lvbkFtb3VudEJ5SGVpZ2h0UkVBRE9OTFkAAAACAAAABmFtb3VudAAAAAtzdGFydEhlaWdodAQAAAAIaGFsZkxpZmUJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAALa2V5SGFsZkxpZmUAAAAABAAAAAFhCQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAhZ2V0VW5zdGFrZUNvbWlzc2lvbkFtb3VudFJFQURPTkxZCQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACBQAAAAtzdGFydEhlaWdodAkABEwAAAACBQAAAAhoYWxmTGlmZQUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAAWEFAAAAAWEJAAUUAAAAAgUAAAADbmlsCQAEuQAAAAIJAARMAAAAAgIAAAACJWQJAARMAAAAAgkAAaQAAAABBQAAAAFhBQAAAANuaWwFAAAAA1NFUAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAkdW5zdGFrZUNvbWlzc2lvbkFtb3VudEJ5VXNlclJFQURPTkxZAAAAAgAAAAZhbW91bnQAAAALdXNlckFkZHJlc3MEAAAACGhhbGZMaWZlCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAC2tleUhhbGZMaWZlAAAAAAQAAAALc3RhcnRIZWlnaHQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAAGaGVpZ2h0BAAAAAFhCQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAhZ2V0VW5zdGFrZUNvbWlzc2lvbkFtb3VudFJFQURPTkxZCQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACBQAAAAtz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", "chainId": 84, "height": 2017953, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FWEHX2faVvDeHv5R1edi9DPfybbEj71tWckGScPnTvzb Next: Dkk7CTymsFSUhYzPxZirVwDntWaSjdqxrZpuPPHp1w4c Diff:
OldNewDifferences
225225
226226
227227 @Callable(i)
228-func swapInfoREADONLY (userAddressStr) = {
228+func swapInfoREADONLY (userAddressStrOpt) = {
229229 let currentPrice = getIntegerValue(controlContract, keyPrice())
230230 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
231231 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
233233 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
234234 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
235235 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
236- let $t083298490 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
237- let swapLimitMaxUsdn = $t083298490._1
238- let swapLimitSpentUsdn = $t083298490._2
239- let blcks2LmtReset = $t083298490._3
236+ let $t083328496 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
237+ let swapLimitMaxUsdn = $t083328496._1
238+ let swapLimitSpentUsdn = $t083328496._2
239+ let blcks2LmtReset = $t083328496._3
240240 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
241241 $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))
242242 }
246246 @Callable(i)
247247 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
248248 let currentPrice = getIntegerValue(controlContract, keyPrice())
249- let $t093889571 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
250- let limitMaxUsdn = $t093889571._1
251- let limitSpent = $t093889571._2
252- let blcks2LmtReset = $t093889571._3
253- let gnsbtAmt = $t093889571._4
254- let gnsbtAmtTotal = $t093889571._5
255- let $t095759783 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
256- let limitMaxUsdnNEW = $t095759783._1
257- let limitSpentNEW = $t095759783._2
258- let blcks2LmtResetNEW = $t095759783._3
259- let gnsbtAmtNEW = $t095759783._4
260- let gnsbtAmtTotalNEW = $t095759783._5
249+ let $t095029685 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
250+ let limitMaxUsdn = $t095029685._1
251+ let limitSpent = $t095029685._2
252+ let blcks2LmtReset = $t095029685._3
253+ let gnsbtAmt = $t095029685._4
254+ let gnsbtAmtTotal = $t095029685._5
255+ let $t096899897 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
256+ let limitMaxUsdnNEW = $t096899897._1
257+ let limitSpentNEW = $t096899897._2
258+ let blcks2LmtResetNEW = $t096899897._3
259+ let gnsbtAmtNEW = $t096899897._4
260+ let gnsbtAmtTotalNEW = $t096899897._5
261261 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
262262 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
263263 let gnsbtShare = if ((gnsbtAmtTotal != 0))
269269 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
270270 let nsbtAmt = gnsbtAmt
271271 let nsbtAmtNew = gnsbtAmtNEW
272- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%d%d", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo, toString(nsbtAmt), toString(nsbtAmtNew)], SEP))
272+ let nsbtAmtStakedTotal = gnsbtAmtTotal
273+ let nsbtAmtStakedTotalNew = gnsbtAmtTotalNEW
274+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%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)], SEP))
273275 }
274276
275277
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 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
153153 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
154154
155155
156156 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
157157
158158
159159 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
160160
161161 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
162162
163163 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
164164
165165 let liquidationContract = getStringOrFail(neutrinoContract, keyLiquidationContractAddress())
166166
167167 let rpdContract = getStringOrFail(neutrinoContract, keyRPDContract())
168168
169169 let mathContract = addressFromStringValue(getStringOrFail(this, keyMathContract()))
170170
171171 let nsbtStakingContract = addressFromStringValue(getStringOrFail(this, keyNsbtLockContract()))
172172
173173 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
174174
175175 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
176176
177177 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyBondAssetId())
178178
179179 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
180180
181181 func minWavesForNsbtBuy () = asInt(invoke(auctionContract, "minWavesAmountNsbtBuySYSREADONLY", nil, nil))
182182
183183
184184 func minNsbtForSell () = asInt(invoke(auctionContract, "minNsbtAmountForSellSYSREADONLY", nil, nil))
185185
186186
187187 func privateNsbtPriceREST () = {
188188 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
189189 let nsbt2usdnPrice = asInt(prices[0])
190190 let nsbt2wavesPrice = asInt(prices[1])
191191 $Tuple2(IntegerEntry("nsbt2usdnPrice", nsbt2usdnPrice), IntegerEntry("nsbt2wavesPrice", nsbt2wavesPrice))
192192 }
193193
194194
195195 @Callable(i)
196196 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
197197 then throw("not authorized")
198198 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
199199
200200
201201
202202 @Callable(i)
203203 func neutrinoStatsREADONLY () = {
204204 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
205205 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
206206 let currentPrice = asInt(neutrinoMetrics[0])
207207 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
208208 let wavesLockedBalance = asInt(neutrinoMetrics[2])
209209 let reservesInWaves = asInt(neutrinoMetrics[3])
210210 let reservesInUsdn = asInt(neutrinoMetrics[4])
211211 let neutrinoSupply = asInt(neutrinoMetrics[5])
212212 let surplus = asInt(neutrinoMetrics[6])
213213 let surplusPercent = asInt(neutrinoMetrics[7])
214214 let BR = asInt(neutrinoMetrics[8])
215215 let nsbtSupply = asInt(neutrinoMetrics[9])
216216 let maxNsbtSupply = asInt(neutrinoMetrics[10])
217217 let nsbt2usdnPrice = asInt(prices[0])
218218 let nsbt2wavesPrice = asInt(prices[1])
219219 let minWaves4NsbtBuy = minWavesForNsbtBuy()
220220 let minNsbtsell = minNsbtForSell()
221221 let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
222222 $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))
223223 }
224224
225225
226226
227227 @Callable(i)
228-func swapInfoREADONLY (userAddressStr) = {
228+func swapInfoREADONLY (userAddressStrOpt) = {
229229 let currentPrice = getIntegerValue(controlContract, keyPrice())
230230 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
231231 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
232232 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
233233 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
234234 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
235235 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
236- let $t083298490 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
237- let swapLimitMaxUsdn = $t083298490._1
238- let swapLimitSpentUsdn = $t083298490._2
239- let blcks2LmtReset = $t083298490._3
236+ let $t083328496 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
237+ let swapLimitMaxUsdn = $t083328496._1
238+ let swapLimitSpentUsdn = $t083328496._2
239+ let blcks2LmtReset = $t083328496._3
240240 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
241241 $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))
242242 }
243243
244244
245245
246246 @Callable(i)
247247 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
248248 let currentPrice = getIntegerValue(controlContract, keyPrice())
249- let $t093889571 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
250- let limitMaxUsdn = $t093889571._1
251- let limitSpent = $t093889571._2
252- let blcks2LmtReset = $t093889571._3
253- let gnsbtAmt = $t093889571._4
254- let gnsbtAmtTotal = $t093889571._5
255- let $t095759783 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
256- let limitMaxUsdnNEW = $t095759783._1
257- let limitSpentNEW = $t095759783._2
258- let blcks2LmtResetNEW = $t095759783._3
259- let gnsbtAmtNEW = $t095759783._4
260- let gnsbtAmtTotalNEW = $t095759783._5
249+ let $t095029685 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
250+ let limitMaxUsdn = $t095029685._1
251+ let limitSpent = $t095029685._2
252+ let blcks2LmtReset = $t095029685._3
253+ let gnsbtAmt = $t095029685._4
254+ let gnsbtAmtTotal = $t095029685._5
255+ let $t096899897 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
256+ let limitMaxUsdnNEW = $t096899897._1
257+ let limitSpentNEW = $t096899897._2
258+ let blcks2LmtResetNEW = $t096899897._3
259+ let gnsbtAmtNEW = $t096899897._4
260+ let gnsbtAmtTotalNEW = $t096899897._5
261261 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
262262 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
263263 let gnsbtShare = if ((gnsbtAmtTotal != 0))
264264 then fraction((gnsbtAmt * 100), scale12, gnsbtAmtTotal)
265265 else 0
266266 let gnsbtShareNEW = if ((gnsbtAmtTotalNEW != 0))
267267 then fraction((gnsbtAmtNEW * 100), scale12, gnsbtAmtTotalNEW)
268268 else 0
269269 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
270270 let nsbtAmt = gnsbtAmt
271271 let nsbtAmtNew = gnsbtAmtNEW
272- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%d%d", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo, toString(nsbtAmt), toString(nsbtAmtNew)], SEP))
272+ let nsbtAmtStakedTotal = gnsbtAmtTotal
273+ let nsbtAmtStakedTotalNew = gnsbtAmtTotalNEW
274+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%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)], SEP))
273275 }
274276
275277
276278
277279 @Callable(i)
278280 func buyNsbtREADONLY (wavesPay) = {
279281 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
280282 if ((minWavesAmountNsbtBuy > wavesPay))
281283 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
282284 else {
283285 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
284286 if ((curveResult == curveResult))
285287 then {
286288 let nsbtAmount = asInt(curveResult[0])
287289 if ((0 >= nsbtAmount))
288290 then throw("nsbtAmount <= 0")
289291 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
290292 }
291293 else throw("Strict value is not equal to itself.")
292294 }
293295 }
294296
295297
296298
297299 @Callable(i)
298300 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
299301 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
300302 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
301303 if ((h == h))
302304 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
303305 else throw("Strict value is not equal to itself.")
304306 }
305307
306308
307309
308310 @Callable(i)
309311 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
310312 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
311313 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
312314 if ((a == a))
313315 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
314316 else throw("Strict value is not equal to itself.")
315317 }
316318
317319
318320
319321 @Callable(i)
320322 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
321323 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
322324 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
323325 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
324326 if ((a == a))
325327 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
326328 else throw("Strict value is not equal to itself.")
327329 }
328330
329331
330332
331333 @Callable(i)
332334 func neutrinoStateREST () = {
333335 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
334336 let currentPrice = asInt(neutrinoMetrics[0])
335337 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
336338 let wavesLockedBalance = asInt(neutrinoMetrics[2])
337339 let reservesInWaves = asInt(neutrinoMetrics[3])
338340 let reservesInUsdn = asInt(neutrinoMetrics[4])
339341 let neutrinoSupply = asInt(neutrinoMetrics[5])
340342 let surplus = asInt(neutrinoMetrics[6])
341343 let surplusPercent = asInt(neutrinoMetrics[7])
342344 let BR = asInt(neutrinoMetrics[8])
343345 let nsbtSupply = asInt(neutrinoMetrics[9])
344346 throw(makeString(["resultNeutrinoStateREST", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply)], "__"))
345347 }
346348
347349
348350
349351 @Callable(i)
350352 func nsbtPriceREST () = {
351353 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
352354 let nsbt2usdnPrice = asInt(prices[0])
353355 let nsbt2wavesPrice = asInt(prices[1])
354356 let restData = makeString(["startNsbtPriceREST", toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), "endNsbtPriceREST"], "__")
355357 throw(restData)
356358 }
357359
358360

github/deemru/w8io/3ef1775 
101.84 ms