tx · GVsWocwMwvgzeNeY1PQYrnSE93bYzxifwFQDkyA6kkWF

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.01400000 Waves

2022.03.18 10:35 [1969106] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "GVsWocwMwvgzeNeY1PQYrnSE93bYzxifwFQDkyA6kkWF", "fee": 1400000, "feeAssetId": null, "timestamp": 1647588946682, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "5jRMMKqFt1XvoN7V6m8wd43kx7QFHYS8krEbqSQKh8YtVJaXc9kbUwYEhtsUWEiLdyQnMDKuSxsfmfJGcmjWza2q" ], "script": "base64:AAIFAAAAAAAAAC8IAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBgoEAQEBARIECgIBARIECgIBCAAAADsAAAAACFBSSUNFTEVUAAAAAAAAD0JAAAAAAAlNVUxUU0NBTEUAAAAAAAAAAAgAAAAAC0VVTEVSTlVNQkVSAAAAAAAQM8TWAAAAAAZzY2FsZTYAAAAAAAAPQkAAAAAADHNjYWxlNkJpZ0ludAkAATYAAAABAAAAAAAAD0JAAAAAAAZzY2FsZTgAAAAAAAX14QAAAAAADHNjYWxlOEJpZ0ludAkAATYAAAABAAAAAAAF9eEAAAAAAAdzY2FsZTEyAAAAAOjUpRAAAAAAAAdzY2FsZTE4CQABNgAAAAEADeC2s6dkAAAAAAAAA1NFUAIAAAACX18BAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAACAAAAHSVzJXNfX2NvbmZpZ19fbmV1dHJpbm9BZGRyZXNzAQAAABJrZXlOZXV0cmlub0Fzc2V0SWQAAAAAAgAAABFuZXV0cmlub19hc3NldF9pZAEAAAAda2V5TGlxdWlkYXRpb25Db250cmFjdEFkZHJlc3MAAAAAAgAAABRsaXF1aWRhdGlvbl9jb250cmFjdAEAAAAOa2V5UlBEQ29udHJhY3QAAAAAAgAAAAxycGRfY29udHJhY3QBAAAAEmtleUF1Y3Rpb25Db250cmFjdAAAAAACAAAAEGF1Y3Rpb25fY29udHJhY3QBAAAAEWtleUNvbnRvbENvbnRyYWN0AAAAAAIAAAAQY29udHJvbF9jb250cmFjdAEAAAAOa2V5Qm9uZEFzc2V0SWQAAAAAAgAAAA1ib25kX2Fzc2V0X2lkAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAANYmFsYW5jZV9sb2NrXwEAAAAVa2V5V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAABXdhdmVzAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAACQABLAAAAAIJAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAAIbmV1dHJpbm8BAAAAFWtleU1pbldhdmVzU3dhcEFtb3VudAAAAAACAAAAFW1pbl93YXZlc19zd2FwX2Ftb3VudAEAAAAYa2V5TWluTmV1dHJpbm9Td2FwQW1vdW50AAAAAAIAAAAYbWluX25ldXRyaW5vX3N3YXBfYW1vdW50AQAAABJrZXlXYXZlc091dEZlZVBhcnQAAAAAAgAAABV3YXZlc091dF9zd2FwX2ZlZVBhcnQBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAACAAAAGG5ldXRyaW5vT3V0X3N3YXBfZmVlUGFydAEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAACAAAAFCVzX19uc2J0TG9ja0NvbnRyYWN0AQAAAA9rZXlNYXRoQ29udHJhY3QAAAAAAgAAABAlc19fbWF0aENvbnRyYWN0AQAAABtrZXlCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWwAAAAAAgAAABtiYWxhbmNlX3dhdmVzX2xvY2tfaW50ZXJ2YWwBAAAAHmtleUJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAAAAAACAAAAHmJhbGFuY2VfbmV1dHJpbm9fbG9ja19pbnRlcnZhbAEAAAAIa2V5UHJpY2UAAAAAAgAAAAVwcmljZQEAAAAWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawAAAAEAAAALdXNlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgIAAAALcGFyYW1CeVVzZXIJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgIAAAAFc3RhcnQFAAAAA25pbAUAAAADU0VQAQAAAAtrZXlIYWxmTGlmZQAAAAACAAAADCVzX19oYWxmTGlmZQEAAAAQa2V5TWluTG9ja0Ftb3VudAAAAAACAAAAESVzX19taW5Mb2NrQW1vdW50AQAAABVrZXlNaW5XYXZlc0Zvck5zYnRCdXkAAAAAAgAAABJtaW5fd2F2ZXNfbnNidF9idXkBAAAADmtleU1pbk5zYnRTZWxsAAAAAAIAAAANbWluX25zYnRfc2VsbAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkABLkAAAACCQAETAAAAAICAAAA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cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFrZXlDb250b2xDb250cmFjdAAAAAAAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAAAAAALcnBkQ29udHJhY3QJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOa2V5UlBEQ29udHJhY3QAAAAAAAAAAAxtYXRoQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAAAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABNrZXlOc2J0TG9ja0NvbnRyYWN0AAAAAAAAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEmtleU5ldXRyaW5vQXNzZXRJZAAAAAAAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABBQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcAAAAADm5zYnRBc3NldElkU3RyCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOa2V5Qm9uZEFzc2V0SWQAAAAAAAAAAAtuc2J0QXNzZXRJZAkAAlkAAAABBQAAAA5uc2J0QXNzZXRJZFN0cgEAAAASbWluV2F2ZXNGb3JOc2J0QnV5AAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAIG1pbldhdmVzQW1vdW50TnNidEJ1eVNZU1JFQURPTkxZBQAAAANuaWwFAAAAA25pbAEAAAAObWluTnNidEZvclNlbGwAAAAACQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAAD2F1Y3Rpb25Db250cmFjdAIAAAAfbWluTnNidEFtb3VudEZvclNlbGxTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwAAAAIAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAwAAAA9uZXV0cmlub0FkZHJlc3MAAAAPbnNidExvY2tBZGRyZXNzAAAAC21hdGhBZGRyZXNzAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAADm5vdCBhdXRob3JpemVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAABQAAAA9uZXV0cmlub0FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAABQAAAA9uc2J0TG9ja0FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleU1hdGhDb250cmFjdAAAAAAFAAAAC21hdGhBZGRyZXNzBQAAAANuaWwAAAABaQEAAAAVbmV1dHJpbm9TdGF0c1JFQURPTkxZAAAAAAQAAAAPbmV1dHJpbm9NZXRyaWNzCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAGmNhbGNOZXV0aW5vTWV0cmljc1JFQURPTkxZBQAAAANu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AAABBQAAAA5taW5Oc2J0TG9ja0FtdAUAAAADbmlsBQAAAANTRVAAAAABaQEAAAAQc3dhcEluZm9SRUFET05MWQAAAAEAAAAOdXNlckFkZHJlc3NTdHIEAAAADGN1cnJlbnRQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAIa2V5UHJpY2UAAAAABAAAAA9taW5XYXZlc1N3YXBBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAABAAAAA5taW5Vc2RuU3dhcEFtdAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAAEAAAADXdhdmVzMlVzZG5GZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlXYXZlc091dEZlZVBhcnQAAAAABAAAAA11c2RuMldhdmVzRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAVa2V5TmV1dHJpbm9PdXRGZWVQYXJ0AAAAAAQAAAAVdXNkblN3YXBEZWxheUR1cmF0aW9uCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAea2V5QmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsAAAAAAQAAAAWd2F2ZXNTd2FwRGVsYXlEdXJhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAG2tleUJhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbAAAAAAEAAAACyR0MDc5ODU4MTQ2CQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAAEHN3YXBMaW1pdE1heFVzZG4IBQAAAAskdDA3OTg1ODE0NgAAAAJfMQQAAAASc3dhcExpbWl0U3BlbnRVc2RuCAUAAAALJHQwNzk4NTgxNDYAAAACXzIEAAAADmJsY2tzMkxtdFJlc2V0CAUAAAALJHQwNzk4NTgxNDYAAAACXzMEAAAAEXN3YXBMaW1pdE1heFdhdmVzCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAAEHN3YXBMaW1pdE1heFVzZG4FAAAADGN1cnJlbnRQcmljZQkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAABYlZCVkJWQlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAMY3VycmVudFByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPbWluV2F2ZXNTd2FwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAObWluVXNkblN3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA13YXZlczJVc2RuRmVlCQAETAAAAAIJAAGkAAAAAQUAAAANdXNkbjJXYXZlc0ZlZQkABEwAAAACCQABpAAAAAEFAAAAFXVzZG5Td2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAAFndhdmVzU3dhcERlbGF5RHVyYXRpb24JAARMAAAAAgkAAaQAAAABBQAAAA5ibGNrczJMbXRSZXNldAkABEwAAAACCQABpAAAAAEFAAAAEXN3YXBMaW1pdE1heFdhdmVzCQAETAAAAAIJAAGkAAAAAQUAAAAQc3dhcExpbWl0TWF4VXNkbgkABEwAAAACCQABpAAAAAEFAAAAEnN3YXBMaW1pdFNwZW50VXNkbgUAAAADbmlsBQAAAANTRVAAAAABaQEAAAARZ25zYnRJbmZvUkVBRE9OTFkAAAACAAAAEXVzZXJBZGRyZXNzU3RyT3B0AAAAC25zYnRBbXREaWZmBAAAAAxjdXJyZW50UHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAACGtleVByaWNlAAAAAAQAAAALJHQwOTA2MjkyNDUJAQAAABJhc1N3YXBQYXJhbXNTVFJVQ1QAAAABCQAD/AAAAAQFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAMbGltaXRNYXhVc2RuCAUAAAALJHQwOTA2MjkyNDUAAAACXzEEAAAACmxpbWl0U3BlbnQIBQAAAAskdDA5MDYyOTI0NQAAAAJfMgQAAAAOYmxja3MyTG10UmVzZXQIBQAAAAskdDA5MDYyOTI0NQAAAAJfMwQAAAAIZ25zYnRBbXQIBQAAAAskdDA5MDYyOTI0NQAAAAJfNAQAAAANZ25zYnRBbXRUb3RhbAgFAAAACyR0MDkwNjI5MjQ1AAAAAl81BAAAAAskdDA5MjQ5OTQ1NwkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIFAAAAC25zYnRBbXREaWZmBQAAAANuaWwFAAAAA25pbAQAAAAPbGltaXRNYXhVc2RuTkVXCAUAAAALJHQwOTI0OTk0NTcAAAACXzEEAAAADWxpbWl0U3BlbnRORVcIBQAAAAskdDA5MjQ5OTQ1NwAAAAJfMgQAAAARYmxja3MyTG10UmVzZXRORVcIBQAAAAskdDA5MjQ5OTQ1NwAAAAJfMwQAAAALZ25zYnRBbXRORVcIBQAAAAskdDA5MjQ5OTQ1NwAAAAJfNAQAAAAQZ25zYnRBbXRUb3RhbE5FVwgFAAAACyR0MDkyNDk5NDU3AAAAAl81BAAAAA1saW1pdE1heFdhdmVzCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAADGxpbWl0TWF4VXNkbgUAAAAMY3VycmVudFByaWNlBAAAABBsaW1pdE1heFdhdmVzTkVXCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAAD2xp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", "chainId": 84, "height": 1969106, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EcDtiWuvtyHynAv1KCWEvvpNZarUMhpFza1Lta2WmjgD Next: 8cjSCdL9FmkRjwJfKBe3Pxxy8dzePZq1ar8yAu7qMPEp Diff:
OldNewDifferences
192192 @Callable(i)
193193 func neutrinoStatsREADONLY () = {
194194 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
195- if ((neutrinoMetrics == neutrinoMetrics))
196- then {
197- let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceREADONLY", nil, nil))
198- if ((prices == prices))
199- then {
200- let currentPrice = asInt(neutrinoMetrics[0])
201- let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
202- let wavesLockedBalance = asInt(neutrinoMetrics[2])
203- let reservesInWaves = asInt(neutrinoMetrics[3])
204- let reservesInUsdn = asInt(neutrinoMetrics[4])
205- let neutrinoSupply = asInt(neutrinoMetrics[5])
206- let surplus = asInt(neutrinoMetrics[6])
207- let surplusPercent = asInt(neutrinoMetrics[7])
208- let BR = asInt(neutrinoMetrics[8])
209- let nsbtSupply = asInt(neutrinoMetrics[9])
210- let maxNsbtSupply = asInt(neutrinoMetrics[10])
211- let nsbt2usdnPrice = asInt(prices[0])
212- let nsbt2wavesPrice = asInt(prices[1])
213- let minWaves4NsbtBuy = minWavesForNsbtBuy()
214- let minNsbtsell = minNsbtForSell()
215- let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
216- $Tuple2(nil, makeString(["%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))
217- }
218- else throw("Strict value is not equal to itself.")
219- }
220- else throw("Strict value is not equal to itself.")
195+ let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
196+ let currentPrice = asInt(neutrinoMetrics[0])
197+ let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
198+ let wavesLockedBalance = asInt(neutrinoMetrics[2])
199+ let reservesInWaves = asInt(neutrinoMetrics[3])
200+ let reservesInUsdn = asInt(neutrinoMetrics[4])
201+ let neutrinoSupply = asInt(neutrinoMetrics[5])
202+ let surplus = asInt(neutrinoMetrics[6])
203+ let surplusPercent = asInt(neutrinoMetrics[7])
204+ let BR = asInt(neutrinoMetrics[8])
205+ let nsbtSupply = asInt(neutrinoMetrics[9])
206+ let maxNsbtSupply = asInt(neutrinoMetrics[10])
207+ let nsbt2usdnPrice = asInt(prices[0])
208+ let nsbt2wavesPrice = asInt(prices[1])
209+ let minWaves4NsbtBuy = minWavesForNsbtBuy()
210+ let minNsbtsell = minNsbtForSell()
211+ let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
212+ $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))
221213 }
222214
223215
231223 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
232224 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
233225 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
234- let $t079938154 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
235- let swapLimitMaxUsdn = $t079938154._1
236- let swapLimitSpentUsdn = $t079938154._2
237- let blcks2LmtReset = $t079938154._3
226+ let $t079858146 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
227+ let swapLimitMaxUsdn = $t079858146._1
228+ let swapLimitSpentUsdn = $t079858146._2
229+ let blcks2LmtReset = $t079858146._3
238230 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
239231 $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))
240232 }
244236 @Callable(i)
245237 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
246238 let currentPrice = getIntegerValue(controlContract, keyPrice())
247- let $t090709253 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
248- let limitMaxUsdn = $t090709253._1
249- let limitSpent = $t090709253._2
250- let blcks2LmtReset = $t090709253._3
251- let gnsbtAmt = $t090709253._4
252- let gnsbtAmtTotal = $t090709253._5
253- let $t092579465 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
254- let limitMaxUsdnNEW = $t092579465._1
255- let limitSpentNEW = $t092579465._2
256- let blcks2LmtResetNEW = $t092579465._3
257- let gnsbtAmtNEW = $t092579465._4
258- let gnsbtAmtTotalNEW = $t092579465._5
239+ let $t090629245 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
240+ let limitMaxUsdn = $t090629245._1
241+ let limitSpent = $t090629245._2
242+ let blcks2LmtReset = $t090629245._3
243+ let gnsbtAmt = $t090629245._4
244+ let gnsbtAmtTotal = $t090629245._5
245+ let $t092499457 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
246+ let limitMaxUsdnNEW = $t092499457._1
247+ let limitSpentNEW = $t092499457._2
248+ let blcks2LmtResetNEW = $t092499457._3
249+ let gnsbtAmtNEW = $t092499457._4
250+ let gnsbtAmtTotalNEW = $t092499457._5
259251 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
260252 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
261253 let gnsbtShare = if ((gnsbtAmtTotal != 0))
282274 let nsbtAmount = asInt(curveResult[0])
283275 if ((0 >= nsbtAmount))
284276 then throw("nsbtAmount <= 0")
285- else if ((wavesPay > (nsbtAmount * 9223372)))
286- then throw(((("Nsbt2Waves price exceeds MAX_INT: " + toString(wavesPay)) + "/") + toString(nsbtAmount)))
287- else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
277+ else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
288278 }
289279 else throw("Strict value is not equal to itself.")
290280 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let PRICELET = 1000000
55
66 let MULTSCALE = 8
77
88 let EULERNUMBER = 271828182
99
1010 let scale6 = 1000000
1111
1212 let scale6BigInt = toBigInt(1000000)
1313
1414 let scale8 = 100000000
1515
1616 let scale8BigInt = toBigInt(100000000)
1717
1818 let scale12 = 1000000000000
1919
2020 let scale18 = toBigInt(1000000000000000000)
2121
2222 let SEP = "__"
2323
2424 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
2525
2626
2727 func keyNeutrinoAssetId () = "neutrino_asset_id"
2828
2929
3030 func keyLiquidationContractAddress () = "liquidation_contract"
3131
3232
3333 func keyRPDContract () = "rpd_contract"
3434
3535
3636 func keyAuctionContract () = "auction_contract"
3737
3838
3939 func keyContolContract () = "control_contract"
4040
4141
4242 func keyBondAssetId () = "bond_asset_id"
4343
4444
4545 func keyBalanceLocked () = "balance_lock_"
4646
4747
4848 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
4949
5050
5151 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
5252
5353
5454 func keyMinWavesSwapAmount () = "min_waves_swap_amount"
5555
5656
5757 func keyMinNeutrinoSwapAmount () = "min_neutrino_swap_amount"
5858
5959
6060 func keyWavesOutFeePart () = "wavesOut_swap_feePart"
6161
6262
6363 func keyNeutrinoOutFeePart () = "neutrinoOut_swap_feePart"
6464
6565
6666 func keyNsbtLockContract () = "%s__nsbtLockContract"
6767
6868
6969 func keyMathContract () = "%s__mathContract"
7070
7171
7272 func keyBalanceWavesLockInterval () = "balance_waves_lock_interval"
7373
7474
7575 func keyBalanceNeutrinoLockInterval () = "balance_neutrino_lock_interval"
7676
7777
7878 func keyPrice () = "price"
7979
8080
8181 func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", userAddress, "start"], SEP)
8282
8383
8484 func keyHalfLife () = "%s__halfLife"
8585
8686
8787 func keyMinLockAmount () = "%s__minLockAmount"
8888
8989
9090 func keyMinWavesForNsbtBuy () = "min_waves_nsbt_buy"
9191
9292
9393 func keyMinNsbtSell () = "min_nsbt_sell"
9494
9595
9696 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
9797
9898
9999 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
100100
101101
102102 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
103103
104104
105105 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), scale8, scale6)
106106
107107
108108 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), scale6, scale8)
109109
110110
111111 func asAnyList (val) = match val {
112112 case valAnyList: List[Any] =>
113113 valAnyList
114114 case _ =>
115115 throw("fail to cast into List[Any]")
116116 }
117117
118118
119119 func asInt (val) = match val {
120120 case valInt: Int =>
121121 valInt
122122 case _ =>
123123 throw("fail to cast into Int")
124124 }
125125
126126
127127 func asString (val) = match val {
128128 case valStr: String =>
129129 valStr
130130 case _ =>
131131 throw("fail to cast into String")
132132 }
133133
134134
135135 func asTuple2Ints (val) = match val {
136136 case v: (Int, Int) =>
137137 v
138138 case _ =>
139139 throw("fail to cast into Tuple2 ints")
140140 }
141141
142142
143143 func asSwapParamsSTRUCT (val) = match val {
144144 case struct: (Int, Int, Int, Int, Int) =>
145145 struct
146146 case _ =>
147147 throw("fail to cast into Int")
148148 }
149149
150150
151151 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
152152
153153
154154 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
155155
156156
157157 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
158158
159159 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
160160
161161 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
162162
163163 let liquidationContract = getStringOrFail(neutrinoContract, keyLiquidationContractAddress())
164164
165165 let rpdContract = getStringOrFail(neutrinoContract, keyRPDContract())
166166
167167 let mathContract = addressFromStringValue(getStringOrFail(this, keyMathContract()))
168168
169169 let nsbtStakingContract = addressFromStringValue(getStringOrFail(this, keyNsbtLockContract()))
170170
171171 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
172172
173173 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
174174
175175 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyBondAssetId())
176176
177177 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
178178
179179 func minWavesForNsbtBuy () = asInt(invoke(auctionContract, "minWavesAmountNsbtBuySYSREADONLY", nil, nil))
180180
181181
182182 func minNsbtForSell () = asInt(invoke(auctionContract, "minNsbtAmountForSellSYSREADONLY", nil, nil))
183183
184184
185185 @Callable(i)
186186 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
187187 then throw("not authorized")
188188 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
189189
190190
191191
192192 @Callable(i)
193193 func neutrinoStatsREADONLY () = {
194194 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
195- if ((neutrinoMetrics == neutrinoMetrics))
196- then {
197- let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceREADONLY", nil, nil))
198- if ((prices == prices))
199- then {
200- let currentPrice = asInt(neutrinoMetrics[0])
201- let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
202- let wavesLockedBalance = asInt(neutrinoMetrics[2])
203- let reservesInWaves = asInt(neutrinoMetrics[3])
204- let reservesInUsdn = asInt(neutrinoMetrics[4])
205- let neutrinoSupply = asInt(neutrinoMetrics[5])
206- let surplus = asInt(neutrinoMetrics[6])
207- let surplusPercent = asInt(neutrinoMetrics[7])
208- let BR = asInt(neutrinoMetrics[8])
209- let nsbtSupply = asInt(neutrinoMetrics[9])
210- let maxNsbtSupply = asInt(neutrinoMetrics[10])
211- let nsbt2usdnPrice = asInt(prices[0])
212- let nsbt2wavesPrice = asInt(prices[1])
213- let minWaves4NsbtBuy = minWavesForNsbtBuy()
214- let minNsbtsell = minNsbtForSell()
215- let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
216- $Tuple2(nil, makeString(["%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))
217- }
218- else throw("Strict value is not equal to itself.")
219- }
220- else throw("Strict value is not equal to itself.")
195+ let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
196+ let currentPrice = asInt(neutrinoMetrics[0])
197+ let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
198+ let wavesLockedBalance = asInt(neutrinoMetrics[2])
199+ let reservesInWaves = asInt(neutrinoMetrics[3])
200+ let reservesInUsdn = asInt(neutrinoMetrics[4])
201+ let neutrinoSupply = asInt(neutrinoMetrics[5])
202+ let surplus = asInt(neutrinoMetrics[6])
203+ let surplusPercent = asInt(neutrinoMetrics[7])
204+ let BR = asInt(neutrinoMetrics[8])
205+ let nsbtSupply = asInt(neutrinoMetrics[9])
206+ let maxNsbtSupply = asInt(neutrinoMetrics[10])
207+ let nsbt2usdnPrice = asInt(prices[0])
208+ let nsbt2wavesPrice = asInt(prices[1])
209+ let minWaves4NsbtBuy = minWavesForNsbtBuy()
210+ let minNsbtsell = minNsbtForSell()
211+ let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
212+ $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))
221213 }
222214
223215
224216
225217 @Callable(i)
226218 func swapInfoREADONLY (userAddressStr) = {
227219 let currentPrice = getIntegerValue(controlContract, keyPrice())
228220 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
229221 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
230222 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
231223 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
232224 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
233225 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
234- let $t079938154 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
235- let swapLimitMaxUsdn = $t079938154._1
236- let swapLimitSpentUsdn = $t079938154._2
237- let blcks2LmtReset = $t079938154._3
226+ let $t079858146 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStr, 0], nil))
227+ let swapLimitMaxUsdn = $t079858146._1
228+ let swapLimitSpentUsdn = $t079858146._2
229+ let blcks2LmtReset = $t079858146._3
238230 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
239231 $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))
240232 }
241233
242234
243235
244236 @Callable(i)
245237 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
246238 let currentPrice = getIntegerValue(controlContract, keyPrice())
247- let $t090709253 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
248- let limitMaxUsdn = $t090709253._1
249- let limitSpent = $t090709253._2
250- let blcks2LmtReset = $t090709253._3
251- let gnsbtAmt = $t090709253._4
252- let gnsbtAmtTotal = $t090709253._5
253- let $t092579465 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
254- let limitMaxUsdnNEW = $t092579465._1
255- let limitSpentNEW = $t092579465._2
256- let blcks2LmtResetNEW = $t092579465._3
257- let gnsbtAmtNEW = $t092579465._4
258- let gnsbtAmtTotalNEW = $t092579465._5
239+ let $t090629245 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
240+ let limitMaxUsdn = $t090629245._1
241+ let limitSpent = $t090629245._2
242+ let blcks2LmtReset = $t090629245._3
243+ let gnsbtAmt = $t090629245._4
244+ let gnsbtAmtTotal = $t090629245._5
245+ let $t092499457 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
246+ let limitMaxUsdnNEW = $t092499457._1
247+ let limitSpentNEW = $t092499457._2
248+ let blcks2LmtResetNEW = $t092499457._3
249+ let gnsbtAmtNEW = $t092499457._4
250+ let gnsbtAmtTotalNEW = $t092499457._5
259251 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
260252 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
261253 let gnsbtShare = if ((gnsbtAmtTotal != 0))
262254 then fraction((gnsbtAmt * 100), scale12, gnsbtAmtTotal)
263255 else 0
264256 let gnsbtShareNEW = if ((gnsbtAmtTotalNEW != 0))
265257 then fraction((gnsbtAmtNEW * 100), scale12, gnsbtAmtTotalNEW)
266258 else 0
267259 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
268260 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo], SEP))
269261 }
270262
271263
272264
273265 @Callable(i)
274266 func buyNsbtREADONLY (wavesPay) = {
275267 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
276268 if ((minWavesAmountNsbtBuy > wavesPay))
277269 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
278270 else {
279271 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
280272 if ((curveResult == curveResult))
281273 then {
282274 let nsbtAmount = asInt(curveResult[0])
283275 if ((0 >= nsbtAmount))
284276 then throw("nsbtAmount <= 0")
285- else if ((wavesPay > (nsbtAmount * 9223372)))
286- then throw(((("Nsbt2Waves price exceeds MAX_INT: " + toString(wavesPay)) + "/") + toString(nsbtAmount)))
287- else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
277+ else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
288278 }
289279 else throw("Strict value is not equal to itself.")
290280 }
291281 }
292282
293283
294284
295285 @Callable(i)
296286 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
297287 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
298288 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
299289 if ((h == h))
300290 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
301291 else throw("Strict value is not equal to itself.")
302292 }
303293
304294
305295
306296 @Callable(i)
307297 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
308298 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
309299 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
310300 if ((a == a))
311301 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
312302 else throw("Strict value is not equal to itself.")
313303 }
314304
315305
316306
317307 @Callable(i)
318308 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
319309 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
320310 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
321311 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
322312 if ((a == a))
323313 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
324314 else throw("Strict value is not equal to itself.")
325315 }
326316
327317

github/deemru/w8io/3ef1775 
125.43 ms