tx · HryhGkGQ4wsumQgUB5mtqa3SKHorT4xmBEML2My3VyzK

3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi:  -0.04000000 Waves

2022.08.23 15:02 [2197103] smart account 3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi > SELF 0.00000000 Waves

{ "type": 13, "id": "HryhGkGQ4wsumQgUB5mtqa3SKHorT4xmBEML2My3VyzK", "fee": 4000000, "feeAssetId": null, "timestamp": 1661256137243, "version": 1, "sender": "3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi", "senderPublicKey": "4qGVXRFATZNzo2RZZ5UYHXojGyJgSRBwtgJcCU8rJe5A", "proofs": [ "4MBgXQ3RcEzRq4oZrZx3D57DfxeDcGZJXnf7yaXDpdoqiHXtBr3K47JDyDasj3SsPL5tJPugdkyeoQ5NM6cmpdpX", "4hiXPVdREK5YB4VNXMVEhjAsPC4GnQP89Ei2Pb74pLAF78rN2kSPLsytFx4bjo4hajUkPMqgH5y2h52a1fSoRnJV", "2fEKSw8iw313NRKSzYJ6dfFqnS267YaWxNCJEoS9FKcUsn2KWoher15poQzVkEsiNZqJjjRXz5N4noXKTHSVrzR6" ], "script": "base64:AAIFAAAAAAAAADkIAhIFCgMICAESAwoBARIHCgUBAQEBARIDCgEBEgQKAgECEgMKAQESABIFCgMBAQESBwoFAQEBAQEAAABXAAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAlNVUxUU0NBTEUAAAAAAAAAAAgAAAAAB1NDQUxFMTYAAAAAAAAAABAAAAAAA1NFUAIAAAACX18AAAAABUhBTEY4AAAAAAAC+vCAAAAAAAhFVUxFUlgxNgkAATYAAAABAABgkqET2NV0AAAAAARUV09YCQABNgAAAAEAAAAAAAAAAAIAAAAABU1VTFQ2AAAAAAAAD0JAAAAAAAZNVUxUWDYJAAE2AAAAAQAAAAAAAA9CQAAAAAAFTVVMVDgAAAAAAAX14QAAAAAABk1VTFRYOAkAATYAAAABAAAAAAAF9eEAAAAAAAdNVUxUWDEwCQABNgAAAAEAAAAAAlQL5AAAAAAAB01VTFRYMTYJAAE2AAAAAQAAI4byb8EAAAAAAAAHV0FWRVNJRAkAAlkAAAABAgAAAAVXQVZFUwAAAAALa1Jlc3VsdElkeEEAAAAAAAAAAAAAAAAAD2tSZXN1bHRJZHhQYXVsQgAAAAAAAAAAAQAAAAAZa1Jlc3VsdElkeFdSZXNlcnZlc0luVXNkbgAAAAAAAAAAAgAAAAAQa1Jlc3VsdElkeE11bHRCUgAAAAAAAAAAAwAAAAATa1Jlc3VsdElkeE11bHRQb3dlcgAAAAAAAAAABAAAAAAba1Jlc3VsdElkeE11bHRFeHBJblBvd2VyU3RyAAAAAAAAAAAFAAAAABJrUmVzdWx0SWR4TXVsdEtTdHIAAAAAAAAAAAYAAAAAD25NZXRyaWNJZHhQcmljZQAAAAAAAAAAAAAAAAAbbk1ldHJpY0lkeFVzZG5Mb2NrZWRCYWxhbmNlAAAAAAAAAAABAAAAABxuTWV0cmljSWR4V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAAAAAACAAAAABFuTWV0cmljSWR4UmVzZXJ2ZQAAAAAAAAAAAwAAAAAXbk1ldHJpY0lkeFJlc2VydmVJblVzZG4AAAAAAAAAAAQAAAAAFG5NZXRyaWNJZHhVc2RuU3VwcGx5AAAAAAAAAAAFAAAAABFuTWV0cmljSWR4U3VycGx1cwAAAAAAAAAABgAAAAAYbk1ldHJpY0lkeFN1cnBsdXNQZXJjZW50AAAAAAAAAAAHAAAAAAxuTWV0cmljSWR4QlIAAAAAAAAAAAgAAAAAFG5NZXRyaWNJZHhOc2J0U3VwcGx5AAAAAAAAAAAJAAAAABduTWV0cmljSWR4TWF4TnNidFN1cHBseQAAAAAAAAAACgAAAAAUbk1ldHJpY0lkeFN1cmZTdXBwbHkAAAAAAAAAAAsBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAACAAAAHSVzJXNfX2NvbmZpZ19fbmV1dHJpbm9BZGRyZXNzAQAAABNrZXlTd2FwQW1vdW50QVBhcmFtAAAAAAIAAAAYJXMlc19fY29uZmlnX19zd2FwQVBhcmFtAQAAABNrZXlTd2FwQW1vdW50QlBhcmFtAAAAAAIAAAAYJXMlc19fY29uZmlnX19zd2FwQlBhcmFtAQAAABdrZXlVc2RuU3dhcEFtb3VudEFQYXJhbQAAAAACAAAAHCVzJXNfX2NvbmZpZ19fdXNkblN3YXBBUGFyYW0BAAAAF2tleVVzZG5Td2FwQW1vdW50QlBhcmFtAAAAAAIAAAAcJXMlc19fY29uZmlnX191c2RuU3dhcEJQYXJhbQEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAIAAAARbmV1dHJpbm9fYXNzZXRfaWQBAAAADmtleU5zYnRBc3NldElkAAAAAAIAAAANYm9uZF9hc3NldF9pZAEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAgAAAA1zdXJmX2Fzc2V0X2lkAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAANYmFsYW5jZV9sb2NrXwEAAAAVa2V5V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAABXdhdmVzAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAACQABLAAAAAIJAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAAIbmV1dHJpbm8BAAAAEXN3YXBzVGltZWZyYW1lS0VZAAAAAAIAAAAPc3dhcHNfdGltZWZyYW1lAQAAABprZXlVc2VyTGFzdFF1aWNrU3dhcEhlaWdodAAAAAEAAAALdXNlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAA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dGNoMAIAAAAGU3RyaW5nBAAAAAZ2YWxTdHIFAAAAByRtYXRjaDAFAAAABnZhbFN0cgkAAAIAAAABAgAAABhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcAAAAAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAAAAAAAAAAEAAAAAGElkeENvbnRyb2xDZmdBdWN0aW9uRGFwcAAAAAAAAAAAAgAAAAAUSWR4Q29udHJvbENmZ1JwZERhcHAAAAAAAAAAAAMAAAAAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAAAAAAAAAABAAAAAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4Q29udHJvbENmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAAAAAAAAAABwAAAAAcSWR4Q29udHJvbENmZ05zYnRTdGFraW5nRGFwcAAAAAAAAAAACAAAAAAZSWR4Q29udHJvbENmZ01lZGlhdG9yRGFwcAAAAAAAAAAACQEAAAARa2V5Q29udHJvbEFkZHJlc3MAAAAAAgAAABwlcyVzX19jb25maWdfX2NvbnRyb2xBZGRyZXNzAQAAAA1rZXlDb250cm9sQ2ZnAAAAAAIAAAARJXNfX2NvbnRyb2xDb25maWcBAAAAFHJlYWRDb250cm9sQ2ZnT3JGYWlsAAAAAQAAAAdjb250cm9sCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAdjb250cm9sCQEAAAANa2V5Q29udHJvbENmZwAAAAAFAAAAA1NFUAEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgAAAApjb250cm9sQ2ZnAAAAA2lkeAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAAGRAAAAAgUAAAAKY29udHJvbENmZwUAAAADaWR4CQABLAAAAAICAAAALUNvbnRyb2wgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkAAaQAAAABBQAAAANpZHgAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAARa2V5Q29udHJvbEFkZHJlc3MAAAAAAgAAACMzTjROUzdkNEpvOWE2RjE0TGlGVUtLWVZkVWtrZjJlUDRaeAAAAAAKY29udHJvbENmZwkBAAAAFHJlYWRDb250cm9sQ2ZnT3JGYWlsAAAAAQUAAAAPY29udHJvbENvbnRyYWN0AAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleU5zYnRBc3NldElkAAAAAAAAAAALc3VyZkFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAAAAAAxjdXJyZW50UHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAACGtleVByaWNlAAAAAAAAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAAAAAAAAAAAAAAAAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAAAAAAAAAAAAAAAAAAB3Jlc2VydmUJAABlAAAAAggJAAPvAAAAAQUAAAAQbmV1dHJpbm9Db250cmFjdAAAAAdyZWd1bGFyBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UAAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAAB3Jlc2VydmUFAAAADGN1cnJlbnRQcmljZQAAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAPbmV1dHJpbm9Bc3NldElkAAAACHF1YW50aXR5CQAD8AAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAD25ldXRyaW5vQXNzZXRJZAkAA/AAAAACBQAAABNsaXF1aWRhdGlvbkNvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAAAkJSAwkAAAAAAAACBQAAAA5uZXV0cmlub1N1cHBseQAAAAAAAAAAAAAAAAAAAAAAAAkAAGsAAAADBQAAAA5yZXNlcnZlc0luVXNkbgUAAAAFTVVMVDYFAAAADm5ldXRyaW5vU3VwcGx5AAAACQAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAMAAAAPbmV1dHJpbm9BZGRyZXNzAAAAD25zYnRMb2NrQWRkcmVzcwAAABBzd2FwQW1vdW50QVBhcmFtAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAADm5vdCBhdXRob3JpemVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlOZXV0cmlub0FkZHJlc3MAAAAABQAAAA9uZXV0cmlub0Fk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AAIJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4VXNkblN1cHBseQUAAAAPbnNidFN1cHBseURFTFRBBAAAAARzUmF3CQAAZAAAAAIJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4TnNidFN1cHBseQUAAAAPbnNidFN1cHBseURFTFRBBAAAAARtUmF3CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAXbk1ldHJpY0lkeE1heE5zYnRTdXBwbHkEAAAACmtDYWxjQXJyYXkJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAABHRoaXMCAAAAEmNhbGN1bGF0ZUtSRUFET05MWQkABEwAAAACBQAAAAR3UmF3CQAETAAAAAIFAAAABHVSYXcJAARMAAAAAgUAAAAFcHJpY2UJAARMAAAAAgUAAAAEbVJhdwkABEwAAAACBQAAAARzUmF3BQAAAANuaWwFAAAAA25pbAQAAAAIbXVsdEtYMTYJAAGnAAAAAQkBAAAACGFzU3RyaW5nAAAAAQkAAZEAAAACBQAAAAprQ2FsY0FycmF5BQAAABJrUmVzdWx0SWR4TXVsdEtTdHIEAAAADG11bHRTdGVwMVgxNgkAATwAAAADCQABNgAAAAEFAAAABG1SYXcFAAAAB01VTFRYMTYJAAE2AAAAAQkAAGUAAAACBQAAAARtUmF3BQAAAARzUmF3BAAAAAxtdWx0U3RlcDJYMTYJAAE8AAAAAwUAAAAMbXVsdFN0ZXAxWDE2BQAAAAxtdWx0U3RlcDFYMTYFAAAAB01VTFRYMTYEAAAAFW11bHROc2J0MnVzZG5QcmljZVgxNgkAATwAAAADBQAAAAhtdWx0S1gxNgUAAAAMbXVsdFN0ZXAyWDE2BQAAAAdNVUxUWDE2BAAAAA5uc2J0MnVzZG5QcmljZQkAAaAAAAABCQABPAAAAAMFAAAAFW11bHROc2J0MnVzZG5QcmljZVgxNgkAATYAAAABBQAAAAVNVUxUNgUAAAAHTVVMVFgxNgQAAAAPbnNidDJ3YXZlc1ByaWNlCQAAawAAAAMFAAAADm5zYnQy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", "chainId": 84, "height": 2197103, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9XFbBUXPLZcJpYhU53UhmPggLGwL8hE2bbSzb8GpV2nk Next: Hj51uVbHbKDdX5Xot2jSaJeb8PHdHgE9ZeB22nWnpnVh 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
6767
6868 let nMetricIdxSurfSupply = 11
6969
7070 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
7171
7272
7373 func keySwapAmountAParam () = "%s%s__config__swapAParam"
7474
7575
7676 func keySwapAmountBParam () = "%s%s__config__swapBParam"
7777
7878
7979 func keyUsdnSwapAmountAParam () = "%s%s__config__usdnSwapAParam"
8080
8181
8282 func keyUsdnSwapAmountBParam () = "%s%s__config__usdnSwapBParam"
8383
8484
8585 func keyNeutrinoAssetId () = "neutrino_asset_id"
8686
8787
8888 func keyNsbtAssetId () = "bond_asset_id"
8989
9090
9191 func keySurfAssetId () = "surf_asset_id"
9292
9393
9494 func keyBalanceLocked () = "balance_lock_"
9595
9696
9797 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
9898
9999
100100 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
101101
102102
103103 func swapsTimeframeKEY () = "swaps_timeframe"
104104
105105
106106 func keyUserLastQuickSwapHeight (userAddress) = makeString(["%s%s", "userLastQuickSwapHeight", userAddress], SEP)
107107
108108
109109 func keyQuickSwapUserSpentInPeriod (userAddress) = makeString(["%s%s", "quickSwapUserSpentInPeriod", userAddress], SEP)
110110
111111
112112 func keyPrice () = "price"
113113
114114
115115 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
116116
117117
118118 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
119119
120120
121121 func getNumberByKey (address,key) = valueOrElse(getInteger(address, key), 0)
122122
123123
124124 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
125125
126126
127127 func convertNeutrinoToWaves (amount,price) = fraction(amount, MULT8, price)
128128
129129
130130 func convertWavesToNeutrino (amount,price) = fraction(amount, price, MULT8)
131131
132132
133133 func toX16 (origVal,origScaleMult) = fraction(toBigInt(origVal), MULTX16, toBigInt(origScaleMult))
134134
135135
136136 func fromX16 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), MULTX16))
137137
138138
139139 func asAnyList (val) = match val {
140140 case valAnyLyst: List[Any] =>
141141 valAnyLyst
142142 case _ =>
143143 throw("fail to cast into List[Any]")
144144 }
145145
146146
147147 func asInt (val) = match val {
148148 case valInt: Int =>
149149 valInt
150150 case _ =>
151151 throw("fail to cast into Int")
152152 }
153153
154154
155155 func asString (val) = match val {
156156 case valStr: String =>
157157 valStr
158158 case _ =>
159159 throw("fail to cast into String")
160160 }
161161
162162
163163 let IdxControlCfgNeutrinoDapp = 1
164164
165165 let IdxControlCfgAuctionDapp = 2
166166
167167 let IdxControlCfgRpdDapp = 3
168168
169169 let IdxControlCfgMathDapp = 4
170170
171171 let IdxControlCfgLiquidationDapp = 5
172172
173173 let IdxControlCfgRestDapp = 6
174174
175175 let IdxControlCfgNodeRegistryDapp = 7
176176
177177 let IdxControlCfgNsbtStakingDapp = 8
178178
179179 let IdxControlCfgMediatorDapp = 9
180180
181181 func keyControlAddress () = "%s%s__config__controlAddress"
182182
183183
184184 func keyControlCfg () = "%s__controlConfig"
185185
186186
187187 func readControlCfgOrFail (control) = split(getStringOrFail(control, keyControlCfg()), SEP)
188188
189189
190190 func getContractAddressOrFail (controlCfg,idx) = valueOrErrorMessage(addressFromString(controlCfg[idx]), ("Control cfg doesn't contain address at index " + toString(idx)))
191191
192192
193193 let controlContract = addressFromStringValue(valueOrElse(getString(this, keyControlAddress()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
194194
195195 let controlCfg = readControlCfgOrFail(controlContract)
196196
197197 let neutrinoContract = getContractAddressOrFail(controlCfg, IdxControlCfgNeutrinoDapp)
198198
199199 let auctionContract = getContractAddressOrFail(controlCfg, IdxControlCfgAuctionDapp)
200200
201201 let liquidationContract = getContractAddressOrFail(controlCfg, IdxControlCfgLiquidationDapp)
202202
203203 let neutrinoAssetId = fromBase58String(getStringOrFail(neutrinoContract, keyNeutrinoAssetId()))
204204
205205 let nsbtAssetId = fromBase58String(getStringValue(neutrinoContract, keyNsbtAssetId()))
206206
207207 let surfAssetId = fromBase58String(getStringValue(auctionContract, keySurfAssetId()))
208208
209209 let currentPrice = getIntegerValue(controlContract, keyPrice())
210210
211211 let neutrinoLockedBalance = valueOrElse(getInteger(neutrinoContract, keyNeutrinoLockedBalance()), 0)
212212
213213 let wavesLockedBalance = valueOrElse(getInteger(neutrinoContract, keyWavesLockedBalance()), 0)
214214
215215 let reserve = (wavesBalance(neutrinoContract).regular - wavesLockedBalance)
216216
217217 let reservesInUsdn = convertWavesToNeutrino(reserve, currentPrice)
218218
219219 let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(liquidationContract, neutrinoAssetId))
220220
221221 let BR = if ((neutrinoSupply == 0))
222222 then 0
223223 else fraction(reservesInUsdn, MULT6, neutrinoSupply)
224224
225225 @Callable(i)
226226 func constructor (neutrinoAddress,nsbtLockAddress,swapAmountAParam) = if ((i.caller != this))
227227 then throw("not authorized")
228228 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), IntegerEntry(keySwapAmountAParam(), swapAmountAParam)]
229229
230230
231231
232232 @Callable(i)
233233 func calcSwapLimitREADONLY (gNsbtAmount) = {
234234 let limitWavesInUsdn = if ((0 >= gNsbtAmount))
235235 then 0
236236 else {
237237 let aParamX8 = toBigInt(getIntOrFail(this, keySwapAmountAParam()))
238238 let bParamX16 = toBigInt(getIntOrFail(this, keySwapAmountBParam()))
239239 let powPartX8 = pow(toBigInt(gNsbtAmount), 6, bParamX16, 16, 8, CEILING)
240240 toInt(fraction(aParamX8, powPartX8, MULTX10))
241241 }
242242 let limitWaves = convertNeutrinoToWaves(limitWavesInUsdn, currentPrice)
243243 let limitUsdn = if ((0 >= gNsbtAmount))
244244 then 0
245245 else {
246246 let aParamX8 = toBigInt(getIntOrFail(this, keyUsdnSwapAmountAParam()))
247247 let bParamX16 = toBigInt(getIntOrFail(this, keyUsdnSwapAmountBParam()))
248248 let brX6 = toBigInt(BR)
249249 let powPartX8 = pow(toBigInt(gNsbtAmount), 6, bParamX16, 16, 8, CEILING)
250250 toInt(fraction(fraction(aParamX8, powPartX8, MULTX10), brX6, MULTX6))
251251 }
252252 $Tuple2(nil, [limitWavesInUsdn, limitWaves, limitUsdn])
253253 }
254254
255255
256256
257257 @Callable(i)
258258 func calculateKREADONLY (wRaw,uRaw,price,mRaw,sRaw) = {
259259 let EXP = toBigInt(2718281)
260260 let EXPSCALE = 6
261261 let a = valueOrElse(getInteger(auctionContract, "nsbtCurveParam_a"), 3)
262262 let paulB = valueOrElse(getInteger(auctionContract, "nsbtCurveParam_b"), ((3 * MULT6) / 10))
263263 let wReservesInUsdn = convertWavesToNeutrino(wRaw, price)
264264 let multBR = fraction(wReservesInUsdn, MULT8, uRaw)
265265 if ((multBR > 10678564816))
266266 then throw((("BR=" + toString(multBR)) + " > 10678.564816% will overflow exponent"))
267267 else {
268268 let multPower = (a * (multBR - MULT8))
269269 let multExpInPower = pow(EXP, EXPSCALE, toBigInt(multPower), MULTSCALE, SCALE16, DOWN)
270270 let multK = fraction(toBigInt(paulB), multExpInPower, MULTX6)
271271 $Tuple2(nil, [a, paulB, wReservesInUsdn, multBR, multPower, toString(multExpInPower), toString(multK)])
272272 }
273273 }
274274
275275
276276
277277 @Callable(i)
278278 func curveFunctionREADONLY (wavesPayRaw) = {
279279 let neutrinoMetrics = asAnyList(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
280280 let price = asInt(neutrinoMetrics[nMetricIdxPrice])
281281 let wRaw = asInt(neutrinoMetrics[nMetricIdxReserve])
282282 let uRaw = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
283283 let sRaw = asInt(neutrinoMetrics[nMetricIdxNsbtSupply])
284284 let mRaw = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
285285 let kCalcArray = asAnyList(invoke(this, "calculateKREADONLY", [wRaw, uRaw, price, mRaw, sRaw], nil))
286286 let multK = parseBigIntValue(asString(kCalcArray[kResultIdxMultKStr]))
287287 let usdnPay = convertWavesToNeutrino(wavesPayRaw, price)
288288 let bigMaxNsbtSupply = toBigInt(mRaw)
289289 let bigNsbtSupply = toBigInt((mRaw - sRaw))
290290 let step1 = fraction(toBigInt(usdnPay), MULTX16, multK)
291291 let step2 = fraction(step1, bigNsbtSupply, bigMaxNsbtSupply)
292292 let step3 = toInt(fraction(bigNsbtSupply, bigMaxNsbtSupply, (step2 + bigMaxNsbtSupply)))
293293 let nsbtAmountRaw = ((mRaw - sRaw) - step3)
294294 $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])
295295 }
296296
297297
298298
299299 @Callable(i)
300300 func surfFunctionREADONLY (amount,assetId) = if ((0 > amount))
301301 then throw("amount should be positive")
302302 else {
303303 let price = currentPrice
304304 let priceBig = toBigInt(price)
305305 let reserveBig = toBigInt(reserve)
306306 let supply = neutrinoSupply
307307 let supplyBig = toBigInt(supply)
308308 if ((BR >= MULT6))
309309 then throw((("BR = " + toString(BR)) + ", cannot buy SURF"))
310310 else {
311311 let maxWavesPay = (fraction(supply, MULT8, price) - reserve)
312312 let maxUsdnPay = (supply - fraction(reserve, price, MULT8))
313313 let useAmount = if ((assetId == neutrinoAssetId))
314314 then if ((amount > maxUsdnPay))
315315 then maxUsdnPay
316316 else amount
317317 else if ((assetId == WAVESID))
318318 then if ((amount > maxWavesPay))
319319 then maxWavesPay
320320 else amount
321321 else 0
322322 let amountBig = toBigInt(useAmount)
323323 if ((assetId == neutrinoAssetId))
324324 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)), (amount - useAmount), price])
325325 else if ((assetId == WAVESID))
326326 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), price])
327327 else throw("Unsupported asset")
328328 }
329329 }
330330
331331
332332
333333 @Callable(i)
334334 func calcContractNsbtPriceSYSREADONLY (nsbtSupplyDELTA) = {
335335 let neutrinoMetrics = asAnyList(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
336336 let price = asInt(neutrinoMetrics[nMetricIdxPrice])
337337 let wRaw = asInt(neutrinoMetrics[nMetricIdxReserve])
338338 let uRaw = (asInt(neutrinoMetrics[nMetricIdxUsdnSupply]) - nsbtSupplyDELTA)
339339 let sRaw = (asInt(neutrinoMetrics[nMetricIdxNsbtSupply]) + nsbtSupplyDELTA)
340340 let mRaw = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
341341 let kCalcArray = asAnyList(invoke(this, "calculateKREADONLY", [wRaw, uRaw, price, mRaw, sRaw], nil))
342342 let multKX16 = parseBigIntValue(asString(kCalcArray[kResultIdxMultKStr]))
343343 let multStep1X16 = fraction(toBigInt(mRaw), MULTX16, toBigInt((mRaw - sRaw)))
344344 let multStep2X16 = fraction(multStep1X16, multStep1X16, MULTX16)
345345 let multNsbt2usdnPriceX16 = fraction(multKX16, multStep2X16, MULTX16)
346346 let nsbt2usdnPrice = toInt(fraction(multNsbt2usdnPriceX16, toBigInt(MULT6), MULTX16))
347347 let nsbt2wavesPrice = fraction(nsbt2usdnPrice, MULT6, price)
348348 $Tuple2(nil, [nsbt2usdnPrice, nsbt2wavesPrice])
349349 }
350350
351351
352352
353353 @Callable(i)
354354 func calcNeutinoMetricsREADONLY () = {
355355 let surplus = (reservesInUsdn - neutrinoSupply)
356356 let deficit = (neutrinoSupply - reservesInUsdn)
357357 let surplusPercent = if ((neutrinoSupply == 0))
358358 then 0
359359 else (fraction(surplus, MULT6, neutrinoSupply) * 100)
360360 let nsbtSupplyMAX = value(assetInfo(nsbtAssetId)).quantity
361361 let nsbtSupply = (nsbtSupplyMAX - assetBalance(auctionContract, nsbtAssetId))
362362 let surfSupply = value(assetInfo(surfAssetId)).quantity
363363 $Tuple2(nil, [currentPrice, neutrinoLockedBalance, wavesLockedBalance, reserve, reservesInUsdn, neutrinoSupply, surplus, surplusPercent, BR, nsbtSupply, nsbtSupplyMAX, surfSupply])
364364 }
365365
366366
367367
368368 @Callable(i)
369369 func getUnstakeComissionAmountREADONLY (amount,startHeight,halfLife) = $Tuple2(nil, fraction(amount, pow(2, 0, fraction(-((height - startHeight)), MULT8, halfLife), 8, 8, HALFUP), MULT8))
370370
371371
372372
373373 @Callable(i)
374374 func mergeStakesREADONLY (amount1,height1,amount2,height2,halfLife) = {
375375 let w = fraction(amount2, pow(2, 0, fraction((height2 - height1), MULT8, halfLife), 8, 8, HALFUP), MULT8)
376376 let v = fraction((amount1 + amount2), MULT8, (amount1 + w))
377377 $Tuple2(nil, (height1 + ((HALF8 - (halfLife * log(v, 8, 2, 0, 8, HALFUP))) / MULT8)))
378378 }
379379
380380
381381 @Verifier(tx)
382382 func verify () = {
383383 let pubKeyAdminsListStr = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], SEP)
384384 let pubKeyAdminsList = split(valueOrElse(getString(controlContract, "%s__multisig"), pubKeyAdminsListStr), SEP)
385385 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
386386 then 1
387387 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
388388 then 1
389389 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
390390 then 1
391391 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
392392 then 2
393393 else 0))
394394 (count >= 3)
395395 }
396396

github/deemru/w8io/026f985 
44.67 ms