tx · 64YFeL8a4dNBFQduqZvEJcvYNHgZDriFcJJL9oxGxbHz

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.01600000 Waves

2022.05.25 10:16 [2066891] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "64YFeL8a4dNBFQduqZvEJcvYNHgZDriFcJJL9oxGxbHz", "fee": 1600000, "feeAssetId": null, "timestamp": 1653463057156, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "4dedqmBADttX8LR66FC64CXHyE15W6UaqGuZWFXUgx7BV4oLm34xEutP1ecBR1FV8wuPaUjmiSyviKJky1vg27m4" ], "script": "base64:AAIFAAAAAAAAADMIAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBgoEAQEBARIECgIBARIECgIBCBIAEgAAAAA+AAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAhQUklDRUxFVAAAAAAAAA9CQAAAAAAJTVVMVFNDQUxFAAAAAAAAAAAIAAAAAAtFVUxFUk5VTUJFUgAAAAAAEDPE1gAAAAAGc2NhbGU2AAAAAAAAD0JAAAAAAAxzY2FsZTZCaWdJbnQJAAE2AAAAAQAAAAAAAA9CQAAAAAAGc2NhbGU4AAAAAAAF9eEAAAAAAAxzY2FsZThCaWdJbnQJAAE2AAAAAQAAAAAABfXhAAAAAAAHc2NhbGUxMgAAAADo1KUQAAAAAAAHc2NhbGUxOAkAATYAAAABAA3gtrOnZAAAAAAAAANTRVACAAAAAl9fAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX25ldXRyaW5vQWRkcmVzcwEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAIAAAARbmV1dHJpbm9fYXNzZXRfaWQBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QBAAAADmtleVJQRENvbnRyYWN0AAAAAAIAAAAMcnBkX2NvbnRyYWN0AQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAgAAABBhdWN0aW9uX2NvbnRyYWN0AQAAABFrZXlDb250b2xDb250cmFjdAAAAAACAAAAEGNvbnRyb2xfY29udHJhY3QBAAAADmtleUJvbmRBc3NldElkAAAAAAIAAAANYm9uZF9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZlcwEAAAAYa2V5TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAACG5ldXRyaW5vAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAAAgAAABVtaW5fd2F2ZXNfc3dhcF9hbW91bnQBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAACAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAIAAAAVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0AQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAAAgAAABhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAAAgAAABQlc19fbnNidExvY2tDb250cmFjdAEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAIAAAAQJXNfX21hdGhDb250cmFjdAEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAIAAAAbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAAAgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwBAAAACGtleVByaWNlAAAAAAIAAAAFcHJpY2UBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAAC3BhcmFtQnlVc2VyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAICAAAABXN0YXJ0BQAAAANuaWwFAAAAA1NFUAEAAAALa2V5SGFsZkxpZmUAAAAAAgAAAAwlc19faGFsZkxpZmUBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAAAgAAABElc19fbWluTG9ja0Ftb3VudAEAAAAVa2V5TWluV2F2ZXNGb3JOc2J0QnV5AAAAAAIAAAASbWluX3dhdmVzX25zYnRfYnV5AQAAAA5rZXlNaW5Oc2J0U2VsbAAAAAACAAAADW1pbl9uc2J0X3NlbGwBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAA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AwkAATYAAAABBQAAAAdvcmlnVmFsBQAAAAdzY2FsZTE4CQABNgAAAAEFAAAADW9yaWdTY2FsZU11bHQBAAAAB2Zyb21YMTgAAAACAAAAA3ZhbAAAAA9yZXN1bHRTY2FsZU11bHQJAAGgAAAAAQkAATwAAAADBQAAAAN2YWwJAAE2AAAAAQUAAAAPcmVzdWx0U2NhbGVNdWx0BQAAAAdzY2FsZTE4AAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFrZXlDb250b2xDb250cmFjdAAAAAAAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAAAAAALcnBkQ29udHJhY3QJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOa2V5UlBEQ29udHJhY3QAAAAAAAAAAAxtYXRoQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAAAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABNrZXlOc2J0TG9ja0NvbnRyYWN0AAAAAAAAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEmtleU5ldXRyaW5vQXNzZXRJZAAAAAAAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABBQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcAAAAADm5zYnRBc3NldElkU3RyCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOa2V5Qm9uZEFzc2V0SWQAAAAAAAAAAAtuc2J0QXNzZXRJZAkAAlkAAAABBQAAAA5uc2J0QXNzZXRJZFN0cgEAAAASbWluV2F2ZXNGb3JOc2J0QnV5AAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAIG1pbldhdmVzQW1vdW50TnNidEJ1eVNZU1JFQURPTkxZBQAAAANuaWwFAAAAA25pbAEAAAAObWluTnNidEZvclNlbGwAAAAACQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAAD2F1Y3Rpb25Db250cmFjdAIAAAAfbWluTnNidEFtb3VudEZvclNlbGxTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAAFHByaXZhdGVOc2J0UHJpY2VSRVNUAAAAAAQAAAAGcHJpY2VzCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAIGNhbGNDb250cmFjdE5zYnRQcmljZVNZU1JFQURPTkxZCQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAAA5uc2J0MnVzZG5QcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAAEAAAAD25zYnQyd2F2ZXNQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAEJAAUUAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADm5zYnQydXNkblByaWNlBQAAAA5uc2J0MnVzZG5QcmljZQkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD25zYnQyd2F2ZXNQcmljZQUAAAAPbnNidDJ3YXZlc1ByaWNlAAAACgAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAMAAAAPbmV1dHJpbm9BZGRyZXNzAAAAD25zYnRMb2NrQWRkcmVzcwAAAAttYXRoQWRkcmVzcwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5TmV1dHJpbm9BZGRyZXNzAAAAAAUAAAAPbmV1dHJpbm9BZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlOc2J0TG9ja0NvbnRyYWN0AAAAAAUAAAAPbnNidExvY2tBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlNYXRoQ29udHJhY3QAAAAABQAAAAttYXRoQWRkcmVzcwUAAAADbmlsAAAAAWkBAAAAFW5ldXRyaW5vU3RhdHNSRUFET05MWQAAAAAEAAAAD25ldXRyaW5vTWV0cmljcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAABpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUAAAADbmlsBQAAAANuaWwEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAMY3VycmVudFByaWNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwAAAAAAAAAAAAQAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwAAAAAAAAAAAQQAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQEAAAAFYXNJbnQA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EG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlNaW5OZXV0cmlub1N3YXBBbW91bnQAAAAABAAAAA13YXZlczJVc2RuRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAQAAAANdXNkbjJXYXZlc0ZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAAEAAAAFXVzZG5Td2FwRGVsYXlEdXJhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHmtleUJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAAAAAAEAAAAFndhdmVzU3dhcERlbGF5RHVyYXRpb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABtrZXlCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWwAAAAABAAAAAskdDA4NDY3ODYyOAkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAADnVzZXJBZGRyZXNzU3RyCQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAABBzd2FwTGltaXRNYXhVc2RuCAUAAAALJHQwODQ2Nzg2MjgAAAACXzEEAAAAEnN3YXBMaW1pdFNwZW50VXNkbggFAAAACyR0MDg0Njc4NjI4AAAAAl8yBAAAAA5ibGNrczJMbXRSZXNldAgFAAAACyR0MDg0Njc4NjI4AAAAAl8zBAAAABFzd2FwTGltaXRNYXhXYXZlcwkBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACBQAAABBzd2FwTGltaXRNYXhVc2RuBQAAAAxjdXJyZW50UHJpY2UJAAUUAAAAAgUAAAADbmlsCQAEuQAAAAIJAARMAAAAAgIAAAAWJWQlZCVkJWQlZCVkJWQlZCVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAADGN1cnJlbnRQcmljZQkABEwAAAACCQABpAAAAAEFAAAAD21pbldhdmVzU3dhcEFtdAkABEwAAAACCQABpAAAAAEFAAAADm1pblVzZG5Td2FwQW10CQAETAAAAAIJAAGkAAAAAQUAAAANd2F2ZXMyVXNkbkZlZQkABEwAAAACCQABpAAAAAEFAAAADXVzZG4yV2F2ZXNGZWUJAARMAAAAAgkAAaQAAAABBQAAABV1c2RuU3dhcERlbGF5RHVyYXRpb24JAARMAAAAAgkAAaQAAAABBQAAABZ3YXZlc1N3YXBEZWxheUR1cmF0aW9uCQAETAAAAAIJAAGkAAAAAQUAAAAOYmxja3MyTG10UmVzZXQJAARMAAAAAgkAAaQAAAABBQAAABFzd2FwTGltaXRNYXhXYXZlcwkABEwAAAACCQABpAAAAAEFAAAAEHN3YXBMaW1pdE1heFVzZG4JAARMAAAAAgkAAaQAAAABBQAAABJzd2FwTGltaXRTcGVudFVzZG4FAAAAA25pbAUAAAADU0VQAAAAAWkBAAAAEWduc2J0SW5mb1JFQURPTkxZAAAAAgAAABF1c2VyQWRkcmVzc1N0ck9wdAAAAAtuc2J0QW10RGlmZgQAAAAMY3VycmVudFByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA9jb250cm9sQ29udHJhY3QJAQAAAAhrZXlQcmljZQAAAAAEAAAACyR0MDk1MjY5NzA5CQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGxpbWl0TWF4VXNkbggFAAAACyR0MDk1MjY5NzA5AAAAAl8xBAAAAApsaW1pdFNwZW50CAUAAAALJHQwOTUyNjk3MDkAAAACXzIEAAAADmJsY2tzMkxtdFJlc2V0CAUAAAALJHQwOTUyNjk3MDkAAAACXzMEAAAACGduc2J0QW10CAUAAAALJHQwOTUyNjk3MDkAAAACXzQEAAAADWduc2J0QW10VG90YWwIBQAAAAskdDA5NTI2OTcwOQAAAAJfNQQAAAALJHQwOTcxMzk5MjEJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAkABEwAAAACBQAAAAtuc2J0QW10RGlmZgUAAAADbmlsBQAAAANuaWwEAAAAD2xpbWl0TWF4VXNkbk5FVwgFAAAACyR0MDk3MTM5OTIxAAAAAl8xBAAAAA1saW1pdFNwZW50TkVXCAUAAAALJHQwOTcxMzk5MjEAAAACXzIEAAAAEWJsY2tzMkxtdFJlc2V0TkVXCAUAAAALJHQwOTcxMzk5MjEAAAACXzMEAAAAC2duc2J0QW10TkVXCAUAAAALJHQwOTcxMzk5MjEAAAACXzQEAAAAEGduc2J0QW10VG90YWxORVcIBQAAAAskdDA5NzEzOTkyMQAAAAJfNQQAAAANbGltaXRNYXhXYXZlcwkBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACBQAAAAxsaW1pdE1heFVzZG4FAAAADGN1cnJlbnRQcmljZQQAAAAQbGltaXRNYXhXYXZlc05FVwkBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACBQAAAA9saW1pdE1heFVzZG5ORVcFAAAADGN1cnJlbnRQcmljZQQAAAAKZ25zYnRTaGFyZQMJAQAAAAIhPQAAAAIFAAAADWduc2J0QW10VG90YWwAAAAAAAAAAAAJAABrAAAAAwkAAGgAAAACBQAAAAhnbnNidEFtdAAAAAAAAAAAZAUAAAAHc2NhbGUxMgUAAAANZ25zYnRBbXRUb3RhbAAAAAAAAAAAAAQAAAANZ25zYnRTaGFyZU5FVwMJAQAAAAIhPQAAAAIFAAAAEGduc2J0QW10VG90YWxORVcAAAAAAAAAAAAJAABrAAAAAwkAAGgAAAACBQAAAAtnbnNidEFtdE5FVwAAAAAAAAAAZAUAAAAHc2NhbGUxMgUAAAAQZ25zYnRBbXRUb3RhbE5FVwAAAAAAAAAAAAQAAAAKcmV3YXJk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", "chainId": 84, "height": 2066891, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DLVfKrSSsvNN6qUGmdJXYwtFzk3b1sg6TfC5qz5sVBmS Next: 7DhiWNVQd9YsSyVMEqz6zN1QEbkSGrPZ7Zx3cUnkofz5 Diff:
OldNewDifferences
150150 }
151151
152152
153+func toTimestamp (start) = match blockInfoByHeight(start) {
154+ case block: BlockInfo =>
155+ block.timestamp
156+ case _ =>
157+ -1
158+}
159+
160+
153161 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
154162
155163
233241 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
234242 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
235243 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
244+ let $t084678628 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
245+ let swapLimitMaxUsdn = $t084678628._1
246+ let swapLimitSpentUsdn = $t084678628._2
247+ let blcks2LmtReset = $t084678628._3
240248 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
241249 $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))
242250 }
246254 @Callable(i)
247255 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
248256 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
257+ let $t095269709 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
258+ let limitMaxUsdn = $t095269709._1
259+ let limitSpent = $t095269709._2
260+ let blcks2LmtReset = $t095269709._3
261+ let gnsbtAmt = $t095269709._4
262+ let gnsbtAmtTotal = $t095269709._5
263+ let $t097139921 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
264+ let limitMaxUsdnNEW = $t097139921._1
265+ let limitSpentNEW = $t097139921._2
266+ let blcks2LmtResetNEW = $t097139921._3
267+ let gnsbtAmtNEW = $t097139921._4
268+ let gnsbtAmtTotalNEW = $t097139921._5
261269 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
262270 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
263271 let gnsbtShare = if ((gnsbtAmtTotal != 0))
269277 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
270278 let nsbtAmt = gnsbtAmt
271279 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))
280+ let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddressStrOpt], nil))
281+ let startHeight = asInt(nsbtData[2])
282+ let startTimestamp = toTimestamp(startHeight)
283+ let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
284+ let startHeightNew = asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
285+ let startTimestampNew = toTimestamp(startHeightNew)
286+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%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(startHeight), toString(startTimestamp), toString(startHeightNew), toString(startTimestampNew)], SEP))
273287 }
274288
275289
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
153+func toTimestamp (start) = match blockInfoByHeight(start) {
154+ case block: BlockInfo =>
155+ block.timestamp
156+ case _ =>
157+ -1
158+}
159+
160+
153161 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
154162
155163
156164 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
157165
158166
159167 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
160168
161169 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
162170
163171 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
164172
165173 let liquidationContract = getStringOrFail(neutrinoContract, keyLiquidationContractAddress())
166174
167175 let rpdContract = getStringOrFail(neutrinoContract, keyRPDContract())
168176
169177 let mathContract = addressFromStringValue(getStringOrFail(this, keyMathContract()))
170178
171179 let nsbtStakingContract = addressFromStringValue(getStringOrFail(this, keyNsbtLockContract()))
172180
173181 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
174182
175183 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
176184
177185 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyBondAssetId())
178186
179187 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
180188
181189 func minWavesForNsbtBuy () = asInt(invoke(auctionContract, "minWavesAmountNsbtBuySYSREADONLY", nil, nil))
182190
183191
184192 func minNsbtForSell () = asInt(invoke(auctionContract, "minNsbtAmountForSellSYSREADONLY", nil, nil))
185193
186194
187195 func privateNsbtPriceREST () = {
188196 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
189197 let nsbt2usdnPrice = asInt(prices[0])
190198 let nsbt2wavesPrice = asInt(prices[1])
191199 $Tuple2(IntegerEntry("nsbt2usdnPrice", nsbt2usdnPrice), IntegerEntry("nsbt2wavesPrice", nsbt2wavesPrice))
192200 }
193201
194202
195203 @Callable(i)
196204 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
197205 then throw("not authorized")
198206 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
199207
200208
201209
202210 @Callable(i)
203211 func neutrinoStatsREADONLY () = {
204212 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
205213 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
206214 let currentPrice = asInt(neutrinoMetrics[0])
207215 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
208216 let wavesLockedBalance = asInt(neutrinoMetrics[2])
209217 let reservesInWaves = asInt(neutrinoMetrics[3])
210218 let reservesInUsdn = asInt(neutrinoMetrics[4])
211219 let neutrinoSupply = asInt(neutrinoMetrics[5])
212220 let surplus = asInt(neutrinoMetrics[6])
213221 let surplusPercent = asInt(neutrinoMetrics[7])
214222 let BR = asInt(neutrinoMetrics[8])
215223 let nsbtSupply = asInt(neutrinoMetrics[9])
216224 let maxNsbtSupply = asInt(neutrinoMetrics[10])
217225 let nsbt2usdnPrice = asInt(prices[0])
218226 let nsbt2wavesPrice = asInt(prices[1])
219227 let minWaves4NsbtBuy = minWavesForNsbtBuy()
220228 let minNsbtsell = minNsbtForSell()
221229 let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
222230 $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))
223231 }
224232
225233
226234
227235 @Callable(i)
228236 func swapInfoREADONLY (userAddressStr) = {
229237 let currentPrice = getIntegerValue(controlContract, keyPrice())
230238 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
231239 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
232240 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
233241 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
234242 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
235243 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
244+ let $t084678628 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
245+ let swapLimitMaxUsdn = $t084678628._1
246+ let swapLimitSpentUsdn = $t084678628._2
247+ let blcks2LmtReset = $t084678628._3
240248 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
241249 $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))
242250 }
243251
244252
245253
246254 @Callable(i)
247255 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
248256 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
257+ let $t095269709 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
258+ let limitMaxUsdn = $t095269709._1
259+ let limitSpent = $t095269709._2
260+ let blcks2LmtReset = $t095269709._3
261+ let gnsbtAmt = $t095269709._4
262+ let gnsbtAmtTotal = $t095269709._5
263+ let $t097139921 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
264+ let limitMaxUsdnNEW = $t097139921._1
265+ let limitSpentNEW = $t097139921._2
266+ let blcks2LmtResetNEW = $t097139921._3
267+ let gnsbtAmtNEW = $t097139921._4
268+ let gnsbtAmtTotalNEW = $t097139921._5
261269 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
262270 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
263271 let gnsbtShare = if ((gnsbtAmtTotal != 0))
264272 then fraction((gnsbtAmt * 100), scale12, gnsbtAmtTotal)
265273 else 0
266274 let gnsbtShareNEW = if ((gnsbtAmtTotalNEW != 0))
267275 then fraction((gnsbtAmtNEW * 100), scale12, gnsbtAmtTotalNEW)
268276 else 0
269277 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
270278 let nsbtAmt = gnsbtAmt
271279 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))
280+ let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddressStrOpt], nil))
281+ let startHeight = asInt(nsbtData[2])
282+ let startTimestamp = toTimestamp(startHeight)
283+ let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
284+ let startHeightNew = asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
285+ let startTimestampNew = toTimestamp(startHeightNew)
286+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%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(startHeight), toString(startTimestamp), toString(startHeightNew), toString(startTimestampNew)], SEP))
273287 }
274288
275289
276290
277291 @Callable(i)
278292 func buyNsbtREADONLY (wavesPay) = {
279293 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
280294 if ((minWavesAmountNsbtBuy > wavesPay))
281295 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
282296 else {
283297 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
284298 if ((curveResult == curveResult))
285299 then {
286300 let nsbtAmount = asInt(curveResult[0])
287301 if ((0 >= nsbtAmount))
288302 then throw("nsbtAmount <= 0")
289303 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
290304 }
291305 else throw("Strict value is not equal to itself.")
292306 }
293307 }
294308
295309
296310
297311 @Callable(i)
298312 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
299313 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
300314 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
301315 if ((h == h))
302316 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
303317 else throw("Strict value is not equal to itself.")
304318 }
305319
306320
307321
308322 @Callable(i)
309323 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
310324 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
311325 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
312326 if ((a == a))
313327 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
314328 else throw("Strict value is not equal to itself.")
315329 }
316330
317331
318332
319333 @Callable(i)
320334 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
321335 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
322336 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
323337 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
324338 if ((a == a))
325339 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
326340 else throw("Strict value is not equal to itself.")
327341 }
328342
329343
330344
331345 @Callable(i)
332346 func neutrinoStateREST () = {
333347 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
334348 let currentPrice = asInt(neutrinoMetrics[0])
335349 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
336350 let wavesLockedBalance = asInt(neutrinoMetrics[2])
337351 let reservesInWaves = asInt(neutrinoMetrics[3])
338352 let reservesInUsdn = asInt(neutrinoMetrics[4])
339353 let neutrinoSupply = asInt(neutrinoMetrics[5])
340354 let surplus = asInt(neutrinoMetrics[6])
341355 let surplusPercent = asInt(neutrinoMetrics[7])
342356 let BR = asInt(neutrinoMetrics[8])
343357 let nsbtSupply = asInt(neutrinoMetrics[9])
344358 throw(makeString(["resultNeutrinoStateREST", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply)], "__"))
345359 }
346360
347361
348362
349363 @Callable(i)
350364 func nsbtPriceREST () = {
351365 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
352366 let nsbt2usdnPrice = asInt(prices[0])
353367 let nsbt2wavesPrice = asInt(prices[1])
354368 let restData = makeString(["startNsbtPriceREST", toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), "endNsbtPriceREST"], "__")
355369 throw(restData)
356370 }
357371
358372

github/deemru/w8io/026f985 
58.21 ms