tx · DLVfKrSSsvNN6qUGmdJXYwtFzk3b1sg6TfC5qz5sVBmS

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.01500000 Waves

2022.05.25 10:08 [2066883] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "DLVfKrSSsvNN6qUGmdJXYwtFzk3b1sg6TfC5qz5sVBmS", "fee": 1500000, "feeAssetId": null, "timestamp": 1653462581861, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "bjfVvSXctaneKpU5HrM4PfHX89bCHSwst29xCAJLkdhwckK9fhe7GMz26vNB1BSQL7x9gL9eMEjEhXjVBDR6Gmg" ], "script": "base64:AAIFAAAAAAAAADMIAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBgoEAQEBARIECgIBARIECgIBCBIAEgAAAAA9AAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAhQUklDRUxFVAAAAAAAAA9CQAAAAAAJTVVMVFNDQUxFAAAAAAAAAAAIAAAAAAtFVUxFUk5VTUJFUgAAAAAAEDPE1gAAAAAGc2NhbGU2AAAAAAAAD0JAAAAAAAxzY2FsZTZCaWdJbnQJAAE2AAAAAQAAAAAAAA9CQAAAAAAGc2NhbGU4AAAAAAAF9eEAAAAAAAxzY2FsZThCaWdJbnQJAAE2AAAAAQAAAAAABfXhAAAAAAAHc2NhbGUxMgAAAADo1KUQAAAAAAAHc2NhbGUxOAkAATYAAAABAA3gtrOnZAAAAAAAAANTRVACAAAAAl9fAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX25ldXRyaW5vQWRkcmVzcwEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAIAAAARbmV1dHJpbm9fYXNzZXRfaWQBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QBAAAADmtleVJQRENvbnRyYWN0AAAAAAIAAAAMcnBkX2NvbnRyYWN0AQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAgAAABBhdWN0aW9uX2NvbnRyYWN0AQAAABFrZXlDb250b2xDb250cmFjdAAAAAACAAAAEGNvbnRyb2xfY29udHJhY3QBAAAADmtleUJvbmRBc3NldElkAAAAAAIAAAANYm9uZF9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZlcwEAAAAYa2V5TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAACG5ldXRyaW5vAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAAAgAAABVtaW5fd2F2ZXNfc3dhcF9hbW91bnQBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAACAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAIAAAAVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0AQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAAAgAAABhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAAAgAAABQlc19fbnNidExvY2tDb250cmFjdAEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAIAAAAQJXNfX21hdGhDb250cmFjdAEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAIAAAAbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAAAgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwBAAAACGtleVByaWNlAAAAAAIAAAAFcHJpY2UBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAAC3BhcmFtQnlVc2VyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAICAAAABXN0YXJ0BQAAAANuaWwFAAAAA1NFUAEAAAALa2V5SGFsZkxpZmUAAAAAAgAAAAwlc19faGFsZkxpZmUBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAAAgAAABElc19fbWluTG9ja0Ftb3VudAEAAAAVa2V5TWluV2F2ZXNGb3JOc2J0QnV5AAAAAAIAAAASbWluX3dhdmVzX25zYnRfYnV5AQAAAA5rZXlNaW5Oc2J0U2VsbAAAAAACAAAADW1pbl9uc2J0X3NlbGwBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAA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TXVsdAUAAAAHc2NhbGUxOAAAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAAAAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARa2V5Q29udG9sQ29udHJhY3QAAAAAAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5QXVjdGlvbkNvbnRyYWN0AAAAAAAAAAATbGlxdWlkYXRpb25Db250cmFjdAkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB1rZXlMaXF1aWRhdGlvbkNvbnRyYWN0QWRkcmVzcwAAAAAAAAAAC3JwZENvbnRyYWN0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleVJQRENvbnRyYWN0AAAAAAAAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAD2tleU1hdGhDb250cmFjdAAAAAAAAAAAE25zYnRTdGFraW5nQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAAAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlOZXV0cmlub0Fzc2V0SWQAAAAAAAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAA5uc2J0QXNzZXRJZFN0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleUJvbmRBc3NldElkAAAAAAAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQUAAAAObnNidEFzc2V0SWRTdHIBAAAAEm1pbldhdmVzRm9yTnNidEJ1eQAAAAAJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAPYXVjdGlvbkNvbnRyYWN0AgAAACBtaW5XYXZlc0Ftb3VudE5zYnRCdXlTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAADm1pbk5zYnRGb3JTZWxsAAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAH21pbk5zYnRBbW91bnRGb3JTZWxsU1lTUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsAQAAABRwcml2YXRlTnNidFByaWNlUkVTVAAAAAAEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAAABAAAAA9uc2J0MndhdmVzUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABCQAFFAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA5uc2J0MnVzZG5QcmljZQUAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9uc2J0MndhdmVzUHJpY2UFAAAAD25zYnQyd2F2ZXNQcmljZQAAAAoAAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAALbWF0aEFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAFAAAAD25ldXRyaW5vQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAFAAAAD25zYnRMb2NrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAUAAAALbWF0aEFkZHJlc3MFAAAAA25pbAAAAAFpAQAAABVuZXV0cmlub1N0YXRzUkVBRE9OTFkAAAAABAAAAA9uZXV0cmlub01ldHJpY3MJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAZwcmljZXMJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAgY2FsY0NvbnRyYWN0TnNidFByaWNlU1lTUkVBRE9OTFkJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGN1cnJlbnRQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAAEAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAEEAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAIEAAAAD3Jlc2VydmVzSW5XYXZlcwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MAAAAAAAAAAAMEAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAFYXNJbnQAAAABCQAB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DXVzZG4yV2F2ZXNGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAABAAAABV1c2RuU3dhcERlbGF5RHVyYXRpb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAABAAAABZ3YXZlc1N3YXBEZWxheUR1cmF0aW9uCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAQAAAALJHQwODMyOTg0OTAJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAQc3dhcExpbWl0TWF4VXNkbggFAAAACyR0MDgzMjk4NDkwAAAAAl8xBAAAABJzd2FwTGltaXRTcGVudFVzZG4IBQAAAAskdDA4MzI5ODQ5MAAAAAJfMgQAAAAOYmxja3MyTG10UmVzZXQIBQAAAAskdDA4MzI5ODQ5MAAAAAJfMwQAAAARc3dhcExpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAQc3dhcExpbWl0TWF4VXNkbgUAAAAMY3VycmVudFByaWNlCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAAFiVkJWQlZCVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAA9taW5XYXZlc1N3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5Vc2RuU3dhcEFtdAkABEwAAAACCQABpAAAAAEFAAAADXdhdmVzMlVzZG5GZWUJAARMAAAAAgkAAaQAAAABBQAAAA11c2RuMldhdmVzRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVdXNkblN3YXBEZWxheUR1cmF0aW9uCQAETAAAAAIJAAGkAAAAAQUAAAAWd2F2ZXNTd2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAADmJsY2tzMkxtdFJlc2V0CQAETAAAAAIJAAGkAAAAAQUAAAARc3dhcExpbWl0TWF4V2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAABBzd2FwTGltaXRNYXhVc2RuCQAETAAAAAIJAAGkAAAAAQUAAAASc3dhcExpbWl0U3BlbnRVc2RuBQAAAANuaWwFAAAAA1NFUAAAAAFpAQAAABFnbnNidEluZm9SRUFET05MWQAAAAIAAAARdXNlckFkZHJlc3NTdHJPcHQAAAALbnNidEFtdERpZmYEAAAADGN1cnJlbnRQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAIa2V5UHJpY2UAAAAABAAAAAskdDA5Mzg4OTU3MQkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAAAxsaW1pdE1heFVzZG4IBQAAAAskdDA5Mzg4OTU3MQAAAAJfMQQAAAAKbGltaXRTcGVudAgFAAAACyR0MDkzODg5NTcxAAAAAl8yBAAAAA5ibGNrczJMbXRSZXNldAgFAAAACyR0MDkzODg5NTcxAAAAAl8zBAAAAAhnbnNidEFtdAgFAAAACyR0MDkzODg5NTcxAAAAAl80BAAAAA1nbnNidEFtdFRvdGFsCAUAAAALJHQwOTM4ODk1NzEAAAACXzUEAAAACyR0MDk1NzU5NzgzCQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQJAARMAAAAAgUAAAALbnNidEFtdERpZmYFAAAAA25pbAUAAAADbmlsBAAAAA9saW1pdE1heFVzZG5ORVcIBQAAAAskdDA5NTc1OTc4MwAAAAJfMQQAAAANbGltaXRTcGVudE5FVwgFAAAACyR0MDk1NzU5NzgzAAAAAl8yBAAAABFibGNrczJMbXRSZXNldE5FVwgFAAAACyR0MDk1NzU5NzgzAAAAAl8zBAAAAAtnbnNidEFtdE5FVwgFAAAACyR0MDk1NzU5NzgzAAAAAl80BAAAABBnbnNidEFtdFRvdGFsTkVXCAUAAAALJHQwOTU3NTk3ODMAAAACXzUEAAAADWxpbWl0TWF4V2F2ZXMJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAMbGltaXRNYXhVc2RuBQAAAAxjdXJyZW50UHJpY2UEAAAAEGxpbWl0TWF4V2F2ZXNORVcJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAPbGltaXRNYXhVc2RuTkVXBQAAAAxjdXJyZW50UHJpY2UEAAAACmduc2J0U2hhcmUDCQEAAAACIT0AAAACBQAAAA1nbnNidEFtdFRvdGFsAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAAIZ25zYnRBbXQAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAADWduc2J0QW10VG90YWwAAAAAAAAAAAAEAAAADWduc2J0U2hhcmVORVcDCQEAAAACIT0AAAACBQAAABBnbnNidEFtdFRvdGFsTkVXAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAALZ25zYnRBbXRORVcAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAAEGduc2J0QW10VG90YWxORVcAAAAAAAAAAAAEAAAACnJld2FyZEluZm8JAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAUAAAATbnNidFN0YWtpbmdDb250cmFjdAIAAAAYdW5jbGFpbWVkUmV3YXJkc1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0BQAAAANuaWwFAAAAA25pbAQAAAAHbnNidEFtdAUAAAAIZ25z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", "chainId": 84, "height": 2066883, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dkk7CTymsFSUhYzPxZirVwDntWaSjdqxrZpuPPHp1w4c Next: 64YFeL8a4dNBFQduqZvEJcvYNHgZDriFcJJL9oxGxbHz Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "548f926426a69f07a886a5d8ab26753027e167a0"
4+let revisionNum = ""
55
66 let PRICELET = 1000000
77
225225
226226
227227 @Callable(i)
228-func swapInfoREADONLY (userAddressStrOpt) = {
228+func swapInfoREADONLY (userAddressStr) = {
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 $t083728536 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
237- let swapLimitMaxUsdn = $t083728536._1
238- let swapLimitSpentUsdn = $t083728536._2
239- let blcks2LmtReset = $t083728536._3
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
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 $t095429725 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
250- let limitMaxUsdn = $t095429725._1
251- let limitSpent = $t095429725._2
252- let blcks2LmtReset = $t095429725._3
253- let gnsbtAmt = $t095429725._4
254- let gnsbtAmtTotal = $t095429725._5
255- let $t097299937 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
256- let limitMaxUsdnNEW = $t097299937._1
257- let limitSpentNEW = $t097299937._2
258- let blcks2LmtResetNEW = $t097299937._3
259- let gnsbtAmtNEW = $t097299937._4
260- let gnsbtAmtTotalNEW = $t097299937._5
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
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- 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))
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))
275273 }
276274
277275
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "548f926426a69f07a886a5d8ab26753027e167a0"
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
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 (userAddressStrOpt) = {
228+func swapInfoREADONLY (userAddressStr) = {
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 $t083728536 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
237- let swapLimitMaxUsdn = $t083728536._1
238- let swapLimitSpentUsdn = $t083728536._2
239- let blcks2LmtReset = $t083728536._3
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
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 $t095429725 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
250- let limitMaxUsdn = $t095429725._1
251- let limitSpent = $t095429725._2
252- let blcks2LmtReset = $t095429725._3
253- let gnsbtAmt = $t095429725._4
254- let gnsbtAmtTotal = $t095429725._5
255- let $t097299937 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
256- let limitMaxUsdnNEW = $t097299937._1
257- let limitSpentNEW = $t097299937._2
258- let blcks2LmtResetNEW = $t097299937._3
259- let gnsbtAmtNEW = $t097299937._4
260- let gnsbtAmtTotalNEW = $t097299937._5
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
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- 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))
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))
275273 }
276274
277275
278276
279277 @Callable(i)
280278 func buyNsbtREADONLY (wavesPay) = {
281279 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
282280 if ((minWavesAmountNsbtBuy > wavesPay))
283281 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
284282 else {
285283 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
286284 if ((curveResult == curveResult))
287285 then {
288286 let nsbtAmount = asInt(curveResult[0])
289287 if ((0 >= nsbtAmount))
290288 then throw("nsbtAmount <= 0")
291289 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
292290 }
293291 else throw("Strict value is not equal to itself.")
294292 }
295293 }
296294
297295
298296
299297 @Callable(i)
300298 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
301299 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
302300 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
303301 if ((h == h))
304302 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
305303 else throw("Strict value is not equal to itself.")
306304 }
307305
308306
309307
310308 @Callable(i)
311309 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
312310 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
313311 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
314312 if ((a == a))
315313 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
316314 else throw("Strict value is not equal to itself.")
317315 }
318316
319317
320318
321319 @Callable(i)
322320 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
323321 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
324322 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
325323 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
326324 if ((a == a))
327325 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
328326 else throw("Strict value is not equal to itself.")
329327 }
330328
331329
332330
333331 @Callable(i)
334332 func neutrinoStateREST () = {
335333 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
336334 let currentPrice = asInt(neutrinoMetrics[0])
337335 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
338336 let wavesLockedBalance = asInt(neutrinoMetrics[2])
339337 let reservesInWaves = asInt(neutrinoMetrics[3])
340338 let reservesInUsdn = asInt(neutrinoMetrics[4])
341339 let neutrinoSupply = asInt(neutrinoMetrics[5])
342340 let surplus = asInt(neutrinoMetrics[6])
343341 let surplusPercent = asInt(neutrinoMetrics[7])
344342 let BR = asInt(neutrinoMetrics[8])
345343 let nsbtSupply = asInt(neutrinoMetrics[9])
346344 throw(makeString(["resultNeutrinoStateREST", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply)], "__"))
347345 }
348346
349347
350348
351349 @Callable(i)
352350 func nsbtPriceREST () = {
353351 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
354352 let nsbt2usdnPrice = asInt(prices[0])
355353 let nsbt2wavesPrice = asInt(prices[1])
356354 let restData = makeString(["startNsbtPriceREST", toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), "endNsbtPriceREST"], "__")
357355 throw(restData)
358356 }
359357
360358

github/deemru/w8io/c3f4982 
48.45 ms