tx · BA5Pkt9JZmSJNHoeBr5W2pa6q26a4wZkC5gnvtMWsWYw

3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi:  -0.04000000 Waves

2022.07.04 17:02 [2125018] smart account 3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi > SELF 0.00000000 Waves

{ "type": 13, "id": "BA5Pkt9JZmSJNHoeBr5W2pa6q26a4wZkC5gnvtMWsWYw", "fee": 4000000, "feeAssetId": null, "timestamp": 1656943394372, "version": 1, "sender": "3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi", "senderPublicKey": "4qGVXRFATZNzo2RZZ5UYHXojGyJgSRBwtgJcCU8rJe5A", "proofs": [ "65nTGC2CWRWap4N17hWXsosjkEQ5xh47cgaYtSzBdsRGCFB1QoMYFoySjv69zUeHeDoXwF5Fa8tcWXD2h2FPohpn", "2wHL2kNHhtVMFd2KTCMH3tq352XRvzVPCyLgE4zcWtL63ZpaGq9aZQMonbG8djLyLgUpeScLnNFC3wTvuXbCVgtk", "3pMCatAKyPtkH6rdrr9uXUrnBeX4P6b9Kr9awWvZE5uDBJvZHUSrvEkDv9AsfWmc3qrCofsA2QYAB1kCnwNZ4kbx" ], "script": "base64:AAIFAAAAAAAAADkIAhIFCgMICAESAwoBARIHCgUBAQEBARIDCgEBEgQKAgECEgMKAQESABIFCgMBAQESBwoFAQEBAQEAAABDAAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAlNVUxUU0NBTEUAAAAAAAAAAAgAAAAAB1NDQUxFMTYAAAAAAAAAABAAAAAAA1NFUAIAAAACX18AAAAABUhBTEY4AAAAAAAC+vCAAAAAAAhFVUxFUlgxNgkAATYAAAABAABgkqET2NV0AAAAAARUV09YCQABNgAAAAEAAAAAAAAAAAIAAAAABU1VTFQ2AAAAAAAAD0JAAAAAAAZNVUxUWDYJAAE2AAAAAQAAAAAAAA9CQAAAAAAFTVVMVDgAAAAAAAX14QAAAAAABk1VTFRYOAkAATYAAAABAAAAAAAF9eEAAAAAAAdNVUxUWDEwCQABNgAAAAEAAAAAAlQL5AAAAAAAB01VTFRYMTYJAAE2AAAAAQAAI4byb8EAAAAAAAAHV0FWRVNJRAkAAlkAAAABAgAAAAVXQVZFUwAAAAALa1Jlc3VsdElkeEEAAAAAAAAAAAAAAAAAD2tSZXN1bHRJZHhQYXVsQgAAAAAAAAAAAQAAAAAZa1Jlc3VsdElkeFdSZXNlcnZlc0luVXNkbgAAAAAAAAAAAgAAAAAQa1Jlc3VsdElkeE11bHRCUgAAAAAAAAAAAwAAAAATa1Jlc3VsdElkeE11bHRQb3dlcgAAAAAAAAAABAAAAAAba1Jlc3VsdElkeE11bHRFeHBJblBvd2VyU3RyAAAAAAAAAAAFAAAAABJrUmVzdWx0SWR4TXVsdEtTdHIAAAAAAAAAAAYAAAAAD25NZXRyaWNJZHhQcmljZQAAAAAAAAAAAAAAAAAbbk1ldHJpY0lkeFVzZG5Mb2NrZWRCYWxhbmNlAAAAAAAAAAABAAAAABxuTWV0cmljSWR4V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAAAAAACAAAAABFuTWV0cmljSWR4UmVzZXJ2ZQAAAAAAAAAAAwAAAAAXbk1ldHJpY0lkeFJlc2VydmVJblVzZG4AAAAAAAAAAAQAAAAAFG5NZXRyaWNJZHhVc2RuU3VwcGx5AAAAAAAAAAAFAAAAABFuTWV0cmljSWR4U3VycGx1cwAAAAAAAAAABgAAAAAYbk1ldHJpY0lkeFN1cnBsdXNQZXJjZW50AAAAAAAAAAAHAAAAAAxuTWV0cmljSWR4QlIAAAAAAAAAAAgAAAAAFG5NZXRyaWNJZHhOc2J0U3VwcGx5AAAAAAAAAAAJAAAAABduTWV0cmljSWR4TWF4TnNidFN1cHBseQAAAAAAAAAACgAAAAAUbk1ldHJpY0lkeFN1cmZTdXBwbHkAAAAAAAAAAAsBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAACAAAAHSVzJXNfX2NvbmZpZ19fbmV1dHJpbm9BZGRyZXNzAQAAABNrZXlTd2FwQW1vdW50QVBhcmFtAAAAAAIAAAAYJXMlc19fY29uZmlnX19zd2FwQVBhcmFtAQAAABNrZXlTd2FwQW1vdW50QlBhcmFtAAAAAAIAAAAYJXMlc19fY29uZmlnX19zd2FwQlBhcmFtAQAAABJrZXlOZXV0cmlub0Fzc2V0SWQAAAAAAgAAABFuZXV0cmlub19hc3NldF9pZAEAAAAda2V5TGlxdWlkYXRpb25Db250cmFjdEFkZHJlc3MAAAAAAgAAABRsaXF1aWRhdGlvbl9jb250cmFjdAEAAAASa2V5QXVjdGlvbkNvbnRyYWN0AAAAAAIAAAAQYXVjdGlvbl9jb250cmFjdAEAAAARa2V5Q29udG9sQ29udHJhY3QAAAAAAgAAABBjb250cm9sX2NvbnRyYWN0AQAAAA5rZXlOc2J0QXNzZXRJZAAAAAACAAAADWJvbmRfYXNzZXRfaWQBAAAADmtleVN1cmZBc3NldElkAAAAAAIAAAANc3VyZl9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZlcwEAAAAYa2V5TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAACG5ldXRyaW5vAQAAABFzd2Fwc1RpbWVmcmFtZUtFWQAAAAACAAAAD3N3YXBzX3RpbWVmcmFtZQEAAAAaa2V5VXNlckxhc3RRdWlja1N3YXBIZWlnaHQAAAABAAAAC3Vz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Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAGdmFsU3RyBQAAAAckbWF0Y2gwBQAAAAZ2YWxTdHIJAAACAAAAAQIAAAAYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFrZXlDb250b2xDb250cmFjdAAAAAAAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleU5zYnRBc3NldElkAAAAAAAAAAALc3VyZkFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAAAACQAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAMAAAAPbmV1dHJpbm9BZGRyZXNzAAAAD25zYnRMb2NrQWRkcmVzcwAAABBzd2FwQW1vdW50QVBhcmFtAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAADm5vdCBhdXRob3JpemVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAABQAAAA9uZXV0cmlub0FkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABNrZXlTd2FwQW1vdW50QVBhcmFtAAAAAAUAAAAQc3dhcEFtb3VudEFQYXJhbQUAAAADbmlsAAAAAWkBAAAAFWNhbGNTd2FwTGltaXRSRUFET05MWQAAAAEAAAALZ05zYnRBbW91bnQEAAAAC2xpbWl0UGFyYW1BCQABNgAAAAEJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5U3dhcEFtb3VudEFQYXJhbQAAAAAEAAAAC2xpbWl0UGFyYW1CCQABNgAAAAEJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5U3dhcEFtb3VudEJQYXJhbQAAAAAEAAAAEmdOc2J0QW1vdW50U2NhbGUxNgkBAAAABXRvWDE2AAAAAgUAAAALZ05zYnRBbW91bnQFAAAABU1VTFQ2BAAAAAxsaW1pdFBvd1BhcnQJAAB2AAAABgUAAAASZ05zYnRBbW91bnRTY2FsZTE2AAAAAAAAAAAQBQAAAAtsaW1pdFBhcmFtQgAAAAAAAAAAEAAAAAAAAAAACAUAAAAHQ0VJTElORwQAAAAFbGltaXQJAAE8AAAAAwUAAAALbGltaXRQYXJhbUEFAAAADGxpbWl0UG93UGFydAUAAAAHTVVMVFgxMAkABRQAAAACBQAAAANuaWwJAAGgAAAAAQUAAAAFbGltaXQAAAABaQEAAAASY2FsY3VsYXRlS1JFQURPTkxZAAAABQAAAAR3UmF3AAAABHVSYXcAAAAFcHJpY2UAAAAEbVJhdwAAAARzUmF3BAAAAANFWFAJAAE2AAAAAQAAAAAAACl6SQQAAAAIRVhQU0NBTEUAAAAAAAAAAAYEAAAAAWEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0AgAAABBuc2J0Q3VydmVQYXJhbV9hAAAAAAAAAAADBAAAAAVwYXVsQgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAEG5zYnRDdXJ2ZVBhcmFtX2IJAABpAAAAAgkAAGgAAAACAAAAAAAAAAADBQAAAAVNVUxUNgAAAAAAAAAACgQAAAAPd1Jlc2VydmVzSW5Vc2RuCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAABHdSYXcFAAAABXByaWNlBAAAAAZtdWx0QlIJAABrAAAAAwUAAAAPd1Jlc2VydmVzSW5Vc2RuBQAAAAVNVUxUOAUAAAAEdVJhdwMJAABmAAAAAgUAAAAGbXVsdEJSAAAAAAJ8fffQCQAAAgAAAAECAAAAKUJSID4gMTA2NzguNTY0ODE2JSB3aWxsIG92ZXJmbG93IGV4cG9uZW50BAAAAAltdWx0UG93ZXIJAABoAAAAAgUAAAABYQkAAGUAAAACBQAAAAZtdWx0QlIFAAAABU1VTFQ4BAAAAA5tdWx0RXhwSW5Qb3dlcgkAAHYAAAAGBQAAAANFWFAFAAAACEVYUFNDQUxFCQABNgAAAAEFAAAACW11bHRQb3dlcgUAAAAJTVVMVFNDQUxFBQAAAAdTQ0FMRTE2BQAAAARET1dOBAAAAAVtdWx0SwkAATwAAAADCQABNgAAAAEFAAAABXBhdWxCBQAAAA5tdWx0RXhwSW5Qb3dlcgUAAAAGTVVMVFg2CQAFFAAAAAIFAAAAA25pbAkABEwAAAACBQAAAAFhCQAETAAAAAIFAAAABXBhdWxCCQAETAAAAAIFAAAAD3dSZXNlcnZlc0luVXNkbgkABEwAAAACBQAAAAZtdWx0QlIJAARMAAAAAgUAAAAJbXVsdFBvd2VyCQAETAAAAAIJAAGmAAAAAQUAAAAObXVsdEV4cEluUG93ZXIJAARMAAAAAgkAAaYAAAABBQAAAAVtdWx0SwUAAAADbmlsAAAAAWkBAAAAFWN1cnZlRnVuY3Rpb25SRUFET05MWQAAAAEAAAALd2F2ZXNQYXlSYXcEAAAAD25ldXRyaW5vTWV0cmljcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAEdGhpcwIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAVwcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAD25NZXRyaWNJZHhQcmljZQQAAAAEd1JhdwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAEW5NZXRyaWNJZHhSZXNlcnZlBAAAAAR1UmF3CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAUbk1ldHJpY0lkeFVzZG5TdXBwbHkEAAAABHNSYXcJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4TnNidFN1cHBseQQAAAAEbVJhdwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAF25NZXRyaWNJZHhNYXhOc2J0U3VwcGx5BAAAAAprQ2FsY0FycmF5CQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAAAR0aGlzAgAAABJjYWxjdWxhdGVLUkVBRE9OTFkJAARMAAAAAgUAAAAEd1JhdwkABEwAAAACBQAAAAR1UmF3CQAETAAAAAIFAAAABXByaWNlCQAETAAAAAIFAAAABG1SYXcJAARMAAAAAgUAAAAEc1JhdwUAAAADbmlsBQAAAANuaWwEAAAABW11bHRLCQABpwAAAAEJAQAAAAhhc1N0cmluZwAAAAEJAAGRAAAAAgUAAAAKa0NhbGNBcnJheQUAAAASa1Jlc3VsdElkeE11bHRLU3RyBAAAAAd1c2RuUGF5CQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAAC3dhdmVzUGF5UmF3BQAAAAVwcmljZQQAAAAQYmlnTWF4TnNidFN1cHBseQkAATYAAAABBQAAAARtUmF3BAAAAA1iaWdOc2J0U3VwcGx5CQABNgAAAAEJAABlAAAAAgUAAAAEbVJhdwUAAAAEc1Jh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AAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkAAAAABAAAAAxjdXJyZW50UHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAACGtleVByaWNlAAAAAAQAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAAAAAAAAAAAAAABAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAAAAAAAAAAAAAEAAAAB3Jlc2VydmUJAABlAAAAAggJAAPvAAAAAQUAAAAQbmV1dHJpbm9Db250cmFjdAAAAAdyZWd1bGFyBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UEAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAAB3Jlc2VydmUFAAAADGN1cnJlbnRQcmljZQQAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAPbmV1dHJpbm9Bc3NldElkAAAACHF1YW50aXR5CQAD8AAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAD25ldXRyaW5vQXNzZXRJZAkAA/AAAAACBQAAABNsaXF1aWRhdGlvbkNvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQEAAAAB3N1cnBsdXMJAABlAAAAAgUAAAAOcmVzZXJ2ZXNJblVzZG4FAAAADm5ldXRyaW5vU3VwcGx5BAAAAAdkZWZpY2l0CQAAZQAAAAIFAAAADm5ldXRyaW5vU3VwcGx5BQAAAA5yZXNlcnZlc0luVXNkbgQAAAAOc3VycGx1c1BlcmNlbnQDCQAAAAAAAAIFAAAADm5ldXRyaW5vU3VwcGx5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", "chainId": 84, "height": 2125018, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8t7P7J53q6p5Ktr38CWp5cxA5cMEKZgMiP93G9yfKpkH Next: HsbxjJ3ZfwSJRJP8jTF4UCuCwbZwE6prjw1evj1SsnDk Diff:
OldNewDifferences
6464 let nMetricIdxNsbtSupply = 9
6565
6666 let nMetricIdxMaxNsbtSupply = 10
67+
68+let nMetricIdxSurfSupply = 11
6769
6870 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
6971
309311 else fraction(reservesInUsdn, MULT6, neutrinoSupply)
310312 let nsbtSupplyMAX = value(assetInfo(nsbtAssetId)).quantity
311313 let nsbtSupply = (nsbtSupplyMAX - assetBalance(auctionContract, nsbtAssetId))
312- $Tuple2(nil, [currentPrice, neutrinoLockedBalance, wavesLockedBalance, reserve, reservesInUsdn, neutrinoSupply, surplus, surplusPercent, BR, nsbtSupply, nsbtSupplyMAX])
314+ let surfSupply = value(assetInfo(surfAssetId)).quantity
315+ $Tuple2(nil, [currentPrice, neutrinoLockedBalance, wavesLockedBalance, reserve, reservesInUsdn, neutrinoSupply, surplus, surplusPercent, BR, nsbtSupply, nsbtSupplyMAX, surfSupply])
313316 }
314317
315318
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let revisionNum = ""
55
66 let MULTSCALE = 8
77
88 let SCALE16 = 16
99
1010 let SEP = "__"
1111
1212 let HALF8 = 50000000
1313
1414 let EULERX16 = toBigInt(27182818284590452)
1515
1616 let TWOX = toBigInt(2)
1717
1818 let MULT6 = 1000000
1919
2020 let MULTX6 = toBigInt(1000000)
2121
2222 let MULT8 = 100000000
2323
2424 let MULTX8 = toBigInt(100000000)
2525
2626 let MULTX10 = toBigInt(10000000000)
2727
2828 let MULTX16 = toBigInt(10000000000000000)
2929
3030 let WAVESID = fromBase58String("WAVES")
3131
3232 let kResultIdxA = 0
3333
3434 let kResultIdxPaulB = 1
3535
3636 let kResultIdxWReservesInUsdn = 2
3737
3838 let kResultIdxMultBR = 3
3939
4040 let kResultIdxMultPower = 4
4141
4242 let kResultIdxMultExpInPowerStr = 5
4343
4444 let kResultIdxMultKStr = 6
4545
4646 let nMetricIdxPrice = 0
4747
4848 let nMetricIdxUsdnLockedBalance = 1
4949
5050 let nMetricIdxWavesLockedBalance = 2
5151
5252 let nMetricIdxReserve = 3
5353
5454 let nMetricIdxReserveInUsdn = 4
5555
5656 let nMetricIdxUsdnSupply = 5
5757
5858 let nMetricIdxSurplus = 6
5959
6060 let nMetricIdxSurplusPercent = 7
6161
6262 let nMetricIdxBR = 8
6363
6464 let nMetricIdxNsbtSupply = 9
6565
6666 let nMetricIdxMaxNsbtSupply = 10
67+
68+let nMetricIdxSurfSupply = 11
6769
6870 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
6971
7072
7173 func keySwapAmountAParam () = "%s%s__config__swapAParam"
7274
7375
7476 func keySwapAmountBParam () = "%s%s__config__swapBParam"
7577
7678
7779 func keyNeutrinoAssetId () = "neutrino_asset_id"
7880
7981
8082 func keyLiquidationContractAddress () = "liquidation_contract"
8183
8284
8385 func keyAuctionContract () = "auction_contract"
8486
8587
8688 func keyContolContract () = "control_contract"
8789
8890
8991 func keyNsbtAssetId () = "bond_asset_id"
9092
9193
9294 func keySurfAssetId () = "surf_asset_id"
9395
9496
9597 func keyBalanceLocked () = "balance_lock_"
9698
9799
98100 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
99101
100102
101103 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
102104
103105
104106 func swapsTimeframeKEY () = "swaps_timeframe"
105107
106108
107109 func keyUserLastQuickSwapHeight (userAddress) = makeString(["%s%s", "userLastQuickSwapHeight", userAddress], SEP)
108110
109111
110112 func keyQuickSwapUserSpentInPeriod (userAddress) = makeString(["%s%s", "quickSwapUserSpentInPeriod", userAddress], SEP)
111113
112114
113115 func keyPrice () = "price"
114116
115117
116118 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
117119
118120
119121 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
120122
121123
122124 func getNumberByKey (address,key) = valueOrElse(getInteger(address, key), 0)
123125
124126
125127 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
126128
127129
128130 func convertNeutrinoToWaves (amount,price) = fraction(amount, MULT8, price)
129131
130132
131133 func convertWavesToNeutrino (amount,price) = fraction(amount, price, MULT8)
132134
133135
134136 func toX16 (origVal,origScaleMult) = fraction(toBigInt(origVal), MULTX16, toBigInt(origScaleMult))
135137
136138
137139 func fromX16 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), MULTX16))
138140
139141
140142 func asAnyList (val) = match val {
141143 case valAnyLyst: List[Any] =>
142144 valAnyLyst
143145 case _ =>
144146 throw("fail to cast into List[Any]")
145147 }
146148
147149
148150 func asInt (val) = match val {
149151 case valInt: Int =>
150152 valInt
151153 case _ =>
152154 throw("fail to cast into Int")
153155 }
154156
155157
156158 func asString (val) = match val {
157159 case valStr: String =>
158160 valStr
159161 case _ =>
160162 throw("fail to cast into String")
161163 }
162164
163165
164166 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
165167
166168 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
167169
168170 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
169171
170172 let liquidationContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyLiquidationContractAddress()))
171173
172174 let neutrinoAssetId = fromBase58String(getStringOrFail(neutrinoContract, keyNeutrinoAssetId()))
173175
174176 let nsbtAssetId = fromBase58String(getStringValue(neutrinoContract, keyNsbtAssetId()))
175177
176178 let surfAssetId = fromBase58String(getStringValue(auctionContract, keySurfAssetId()))
177179
178180 @Callable(i)
179181 func constructor (neutrinoAddress,nsbtLockAddress,swapAmountAParam) = if ((i.caller != this))
180182 then throw("not authorized")
181183 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), IntegerEntry(keySwapAmountAParam(), swapAmountAParam)]
182184
183185
184186
185187 @Callable(i)
186188 func calcSwapLimitREADONLY (gNsbtAmount) = {
187189 let limitParamA = toBigInt(getIntOrFail(this, keySwapAmountAParam()))
188190 let limitParamB = toBigInt(getIntOrFail(this, keySwapAmountBParam()))
189191 let gNsbtAmountScale16 = toX16(gNsbtAmount, MULT6)
190192 let limitPowPart = pow(gNsbtAmountScale16, 16, limitParamB, 16, 8, CEILING)
191193 let limit = fraction(limitParamA, limitPowPart, MULTX10)
192194 $Tuple2(nil, toInt(limit))
193195 }
194196
195197
196198
197199 @Callable(i)
198200 func calculateKREADONLY (wRaw,uRaw,price,mRaw,sRaw) = {
199201 let EXP = toBigInt(2718281)
200202 let EXPSCALE = 6
201203 let a = valueOrElse(getInteger(auctionContract, "nsbtCurveParam_a"), 3)
202204 let paulB = valueOrElse(getInteger(auctionContract, "nsbtCurveParam_b"), ((3 * MULT6) / 10))
203205 let wReservesInUsdn = convertWavesToNeutrino(wRaw, price)
204206 let multBR = fraction(wReservesInUsdn, MULT8, uRaw)
205207 if ((multBR > 10678564816))
206208 then throw("BR > 10678.564816% will overflow exponent")
207209 else {
208210 let multPower = (a * (multBR - MULT8))
209211 let multExpInPower = pow(EXP, EXPSCALE, toBigInt(multPower), MULTSCALE, SCALE16, DOWN)
210212 let multK = fraction(toBigInt(paulB), multExpInPower, MULTX6)
211213 $Tuple2(nil, [a, paulB, wReservesInUsdn, multBR, multPower, toString(multExpInPower), toString(multK)])
212214 }
213215 }
214216
215217
216218
217219 @Callable(i)
218220 func curveFunctionREADONLY (wavesPayRaw) = {
219221 let neutrinoMetrics = asAnyList(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
220222 let price = asInt(neutrinoMetrics[nMetricIdxPrice])
221223 let wRaw = asInt(neutrinoMetrics[nMetricIdxReserve])
222224 let uRaw = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
223225 let sRaw = asInt(neutrinoMetrics[nMetricIdxNsbtSupply])
224226 let mRaw = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
225227 let kCalcArray = asAnyList(invoke(this, "calculateKREADONLY", [wRaw, uRaw, price, mRaw, sRaw], nil))
226228 let multK = parseBigIntValue(asString(kCalcArray[kResultIdxMultKStr]))
227229 let usdnPay = convertWavesToNeutrino(wavesPayRaw, price)
228230 let bigMaxNsbtSupply = toBigInt(mRaw)
229231 let bigNsbtSupply = toBigInt((mRaw - sRaw))
230232 let step1 = fraction(toBigInt(usdnPay), MULTX16, multK)
231233 let step2 = fraction(step1, bigNsbtSupply, bigMaxNsbtSupply)
232234 let step3 = toInt(fraction(bigNsbtSupply, bigMaxNsbtSupply, (step2 + bigMaxNsbtSupply)))
233235 let nsbtAmountRaw = ((mRaw - sRaw) - step3)
234236 $Tuple2(nil, [nsbtAmountRaw, usdnPay, wRaw, uRaw, mRaw, sRaw, asInt(kCalcArray[kResultIdxA]), asInt(kCalcArray[kResultIdxPaulB]), asInt(kCalcArray[kResultIdxWReservesInUsdn]), price, asInt(kCalcArray[kResultIdxMultBR]), asInt(kCalcArray[kResultIdxMultPower]), kCalcArray[kResultIdxMultExpInPowerStr], kCalcArray[kResultIdxMultKStr], toString(step1), toString(step2), step3])
235237 }
236238
237239
238240
239241 @Callable(i)
240242 func surfFunctionREADONLY (amount,assetId) = {
241243 let neutrinoMetrics = asAnyList(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
242244 let price = asInt(neutrinoMetrics[nMetricIdxPrice])
243245 let priceBig = toBigInt(price)
244246 let reserve = asInt(neutrinoMetrics[nMetricIdxReserve])
245247 let reserveBig = toBigInt(reserve)
246248 let supply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
247249 let supplyBig = toBigInt(supply)
248250 let BR = asInt(neutrinoMetrics[nMetricIdxBR])
249251 if ((BR >= MULT6))
250252 then throw((("BR = " + toString(BR)) + ", cannot buy SURF"))
251253 else {
252254 let maxWavesPay = (fraction(supply, MULT8, price) - reserve)
253255 let maxUsdnPay = (supply - fraction(reserve, price, MULT8))
254256 let useAmount = if ((assetId == neutrinoAssetId))
255257 then if ((amount > maxUsdnPay))
256258 then maxUsdnPay
257259 else amount
258260 else if ((assetId == WAVESID))
259261 then if ((amount > maxWavesPay))
260262 then maxWavesPay
261263 else amount
262264 else 0
263265 let amountBig = toBigInt(useAmount)
264266 if ((assetId == neutrinoAssetId))
265267 then $Tuple2(nil, [toInt(fraction(fraction(amountBig, MULTX8, priceBig), (supplyBig - (amountBig / TWOX)), reserveBig)), 0, useAmount, reserve, supply, BR, reserve, (supply - useAmount), fraction(convertWavesToNeutrino(reserve, price), MULT6, (supply - useAmount)), 0, (amount - useAmount)])
266268 else if ((assetId == WAVESID))
267269 then $Tuple2(nil, [toInt(fraction(supplyBig, log(fraction((reserveBig + amountBig), MULTX16, reserveBig), 16, EULERX16, 16, 16, HALFUP), MULTX16)), useAmount, 0, reserve, supply, BR, (reserve + useAmount), supply, fraction(convertWavesToNeutrino((reserve + useAmount), price), MULT6, supply), (amount - useAmount), 0])
268270 else throw("Unsupported asset")
269271 }
270272 }
271273
272274
273275
274276 @Callable(i)
275277 func calcContractNsbtPriceSYSREADONLY (nsbtSupplyDELTA) = {
276278 let neutrinoMetrics = asAnyList(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
277279 let price = asInt(neutrinoMetrics[nMetricIdxPrice])
278280 let wRaw = asInt(neutrinoMetrics[nMetricIdxReserve])
279281 let uRaw = (asInt(neutrinoMetrics[nMetricIdxUsdnSupply]) - nsbtSupplyDELTA)
280282 let sRaw = (asInt(neutrinoMetrics[nMetricIdxNsbtSupply]) + nsbtSupplyDELTA)
281283 let mRaw = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
282284 let kCalcArray = asAnyList(invoke(this, "calculateKREADONLY", [wRaw, uRaw, price, mRaw, sRaw], nil))
283285 let multKX16 = parseBigIntValue(asString(kCalcArray[kResultIdxMultKStr]))
284286 let multStep1X16 = fraction(toBigInt(mRaw), MULTX16, toBigInt((mRaw - sRaw)))
285287 let multStep2X16 = fraction(multStep1X16, multStep1X16, MULTX16)
286288 let multNsbt2usdnPriceX16 = fraction(multKX16, multStep2X16, MULTX16)
287289 let nsbt2usdnPrice = toInt(fraction(multNsbt2usdnPriceX16, toBigInt(MULT6), MULTX16))
288290 let nsbt2wavesPrice = fraction(nsbt2usdnPrice, MULT6, price)
289291 $Tuple2(nil, [nsbt2usdnPrice, nsbt2wavesPrice])
290292 }
291293
292294
293295
294296 @Callable(i)
295297 func calcNeutinoMetricsREADONLY () = {
296298 let currentPrice = getIntegerValue(controlContract, keyPrice())
297299 let neutrinoLockedBalance = valueOrElse(getInteger(neutrinoContract, keyNeutrinoLockedBalance()), 0)
298300 let wavesLockedBalance = valueOrElse(getInteger(neutrinoContract, keyWavesLockedBalance()), 0)
299301 let reserve = (wavesBalance(neutrinoContract).regular - wavesLockedBalance)
300302 let reservesInUsdn = convertWavesToNeutrino(reserve, currentPrice)
301303 let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(liquidationContract, neutrinoAssetId))
302304 let surplus = (reservesInUsdn - neutrinoSupply)
303305 let deficit = (neutrinoSupply - reservesInUsdn)
304306 let surplusPercent = if ((neutrinoSupply == 0))
305307 then 0
306308 else (fraction(surplus, MULT6, neutrinoSupply) * 100)
307309 let BR = if ((neutrinoSupply == 0))
308310 then 0
309311 else fraction(reservesInUsdn, MULT6, neutrinoSupply)
310312 let nsbtSupplyMAX = value(assetInfo(nsbtAssetId)).quantity
311313 let nsbtSupply = (nsbtSupplyMAX - assetBalance(auctionContract, nsbtAssetId))
312- $Tuple2(nil, [currentPrice, neutrinoLockedBalance, wavesLockedBalance, reserve, reservesInUsdn, neutrinoSupply, surplus, surplusPercent, BR, nsbtSupply, nsbtSupplyMAX])
314+ let surfSupply = value(assetInfo(surfAssetId)).quantity
315+ $Tuple2(nil, [currentPrice, neutrinoLockedBalance, wavesLockedBalance, reserve, reservesInUsdn, neutrinoSupply, surplus, surplusPercent, BR, nsbtSupply, nsbtSupplyMAX, surfSupply])
313316 }
314317
315318
316319
317320 @Callable(i)
318321 func getUnstakeComissionAmountREADONLY (amount,startHeight,halfLife) = $Tuple2(nil, fraction(amount, pow(2, 0, fraction(-((height - startHeight)), MULT8, halfLife), 8, 8, HALFUP), MULT8))
319322
320323
321324
322325 @Callable(i)
323326 func mergeStakesREADONLY (amount1,height1,amount2,height2,halfLife) = {
324327 let w = fraction(amount2, pow(2, 0, fraction((height2 - height1), MULT8, halfLife), 8, 8, HALFUP), MULT8)
325328 let v = fraction((amount1 + amount2), MULT8, (amount1 + w))
326329 $Tuple2(nil, (height1 + ((HALF8 - (halfLife * log(v, 8, 2, 0, 8, HALFUP))) / MULT8)))
327330 }
328331
329332
330333 @Verifier(tx)
331334 func verify () = {
332335 let pubKeyAdminsListStr = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], SEP)
333336 let pubKeyAdminsList = split(valueOrElse(getString(controlContract, "%s__multisig"), pubKeyAdminsListStr), SEP)
334337 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
335338 then 1
336339 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
337340 then 1
338341 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
339342 then 1
340343 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
341344 then 2
342345 else 0))
343346 (count >= 3)
344347 }
345348

github/deemru/w8io/3ef1775 
72.19 ms